$\TeX$ Gyre 字体安装过程与问题解决

时间:2023-03-08 22:15:24
$\TeX$ Gyre 字体安装过程与问题解决

本文地址
https://www.cnblogs.com/oberon-zjt0806/p/13672426.html

本文只是一个小记录,不会采用比较严格的行文格式,见谅。

昨天刚刚通过HIT的镜像安装TeX Live,然后准备安装我比较喜欢的TeX Gyre Math系列的字体,用于\(\TeX\)的数学字体使用。

安装过程

1. 下载字体包

GUST e-Foundry上下载需要的字体包。比如,以Pagella为例,下载之后的包为texgyrepagella-math-1632.zip

与普通字体包不一样,数学字体包只有两个文件夹组成——opentypedoc,其中opentype内是一个单独的otf字体文件,这个就是字体的本体,我们一会可以先直接在Windows内安装到系统中以供Office等程序使用。而另外一个doc文件夹内包含的就是一些范例文件和许可信息

然而我们是要在TeX Live环境下给\(\TeX\)安装这个字体,虽然有说法是像XeLaTeX这类编译器是通吃系统字体和\(\TeX\)字体。不过保险起见我还是在\(\TeX\)环境下安装一个。

2. 安装字体

解压上面的压缩包到你能找到的任意一个位置(除了回收站)。

在\(\TeX\)环境下安装字体比想象中要麻烦一些,不过好在doc文件夹里附带了一个安装说明INSTALL.TXT,里面是这么描述的安装过程:

2. INSTALLING FONTS IN TEX LIVE

To install fonts in the TeX Live system you have to copy it to the
appropriate directory: (TEXMF root)/texmf-local/fonts/opentype/public/
(you may have to create this directory). When you want install fonts
for only one user, you can use the ~/texmf/fonts/opentype directory
(this directory also may be nonexistent). After coping the font file,
you have to run mktexlsr command to refresh the kpathsea caches. Most of the typesetting engines can use fonts installed either in OS or
in TeX Live. Microsoft Office (Word) uses, of course, only system fonts.
XeLaTeX can use both of them. LuaLaTeX and ConTeXt uses TeX Live fonts
by default, but if the OSFONTDIR environment variable is set, the
system fonts also can be found. For typesetting math using an OpenType font with (Lua|Xe)LaTeX, an up
to date version of the unicode-math package (and related LaTeX3
packages) is crucial.

大概意思是把otf字体要丢到(TEXMF root)/texmf-local/fonts/opentype/public/这个文件夹里,不过TEXMF root在哪找呢??

网上找了一下,大概找到了MikTEX的一个关于texmf root的说明网页,不过我这里安装的并不是MikTEX而是TeX Live(当然我估计过段时间可能要转用MikTeX,因为在Win上比较好用,但是暂时先不动……)

那么TeX Live怎么找他的root目录呢,我最后在tex的stackexchange上找到了解决方案

You could type at the command prompt:

kpsewhich -var-value TEXMFHOME

Alternatively:

kpsewhich -expand-var '$TEXMFHOME'

While on my Linux system, it returns /home/stefan/texmf, on Windows it may return something like C:/Users/Gablin/texmf depending on where your Windows user profile is.

The syntax of kpsewhich may vary depending on the system, for example regarding the quotes or dashes. Type kpsewhich --help.

通过这个我们得到了我们的root目录(通常情况下一般为)%USERPROFILE\texmf%,不过这个文件夹一般不存在,因此我们需要创建这个目录,为了方便起见,我们连带下面的几个目录都创建出来,直接用bat指令:

cd %USERPROFILE%
mkdir texmf/texmf-local/fonts/opentype/public
cd texmf/texmf-local/fonts/opentype/public
start .

然后我们就把解压出来的字体(在opentype/下)丢到打开的目录里就可以了。

3. 测试范例文件

字体安装完成后,我们就考虑运行doc/文件夹下test-*-texgyre_pagella_math.tex文件即可,用VSCode或者TeXworks editor打开这个文件都可以,然后选择对应的TeX编译器(取决于*部分是什么,如果是xelatex则需要使用XeLaTeX编译器(推荐),如果是lua的则需要选择LuaLaTeX编译器,总之不要使用pdfLaTeX编译器)。

注意
务必使用test-*.tex的文件而不要打开math-test.tex之类的文件,因为后者是不完全的,只是供前者输入的。
此外,doc文件夹中一般附带pdf文件,是tex编译之后的结果,然而,我们这里需要自己手动编译来看看结果,一般情况下TeXworks editor会连带打开与之相关联的pdf文件,我们需要把他关掉重新编译。
另外,如果使用VSCode,需要安装LaTeX Workshop插件,如果这个插件先于TeX环境安装,则需要在TeX环境安装完成后卸载并重新安装该插件。

基本上准备就绪,我们编译运行范例tex,然后……前方高能……

! LaTeX3 Error: The key 'fontspec-opentype/vargreek-shape' is unknown and is
(LaTeX3) being ignored.

出错了!!

我把错误文本复制下来全网找,结果找到的结果完全不相干,于是只能不断的缩减关键词,最后把关键词聚焦到vargreek-shape上,找到了两种说法:

  1. https://tex.stackexchange.com/questions/509605/tex-gyre-schola-math-gives-error-when-compiling-the-example-given-in-the-gust
  2. https://tex.stackexchange.com/questions/351955/compilation-error-option-unknown-can-anyone-help-me/352094#352094

大概意思是说vargreek-shape这个内容只在旧版本的TeX中存在,新版本中已经统一了这些规则,因此这个东西不再需要了。

所谓的这个“vargreek”指的是希腊字母的变体,有些希腊字母存在两种写法,例如:

\[\begin{array} \\
&\mathrm{phi} &\phi \\
&\mathrm{varphi} &\varphi \\
\\
&\mathrm{sigma} &\sigma\\
&\mathrm{varomega} &\varsigma \\
\\
&\mathrm{epsilon} &\epsilon\\
&\mathrm{varepsilon} &\varepsilon\\
\end{array}
\]

然后新版本已经对这些变体统一处理了,所以不再需要这个选项了,于是我们就把第10行中的vargreek-shape=TeX选项删掉,改完应该是这个样子:

% 省略号里应当是你的字体,那里不需要作改动
\setmathfont[math-style=ISO,bold-style=ISO]{...}

然后我们再次运行编译就不再出错了,并编译出pdf文档,显示下面的内容:

$\TeX$ Gyre 字体安装过程与问题解决

随机推荐

  1. 他们都说JVM能实际使用的内存比-Xmx指定的少?这是为什么呢

    这确实是个挺奇怪的问题,特别是当最常出现的几种解释理由都被排除后,看来JVM并没有耍一些明显的小花招: -Xmx和-Xms是相等的,因此检测结果并不会因为堆内存增加而在运行时有所变化. 通过关闭自适应 ...

  2. 简述python中`functools.wrapper()

    简述python中functools.wrapper() 首先对于最简单的函数: def a(): pass if __name__ == '__main__': print(a.__name__) ...

  3. MST(最小生成树)

    1.prim算法分析 prim算法是用来构建MST(最小生成树)的一种基于贪心策略的算法.prim算法通过维护lowcost数组和closest数组记录每次查询的最小权值边结点. 首先,看一个示例来理 ...

  4. Fiddler+模拟器+APP抓包HTTPS 为什么有时候抓不到?

    抓包的原理是什么? 代理 客户端请求 -> 经过代理 -> 到达服务端 服务端返回 -> 经过代理 -> 到达客户端 任何Https的App都能抓到包么? Android7.0 ...

  5. 非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3

    非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3 题目描述 给定两个长度为 \(n\) 的排列,定义 \(magic(A,B)=∑_{i=1}^nmax(Ai,Bi)\) . 现在给定 ...

  6. css3新属性position: sticky 一分钟实现 导航栏悬停功能

    css3新属性position: sticky 一分钟实现 导航栏悬停功能 前言 正文 前言 想必很多前端小伙伴经常会在开发中遇到这样一个需求,就是在下划时,导航栏悬停在屏幕最上方,例如咱们的csdn ...

  7. Java中实现十进制数转换为二进制的三种方法

    第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数 ...

  8. Kettle基本使用

    Kettle基本使用 Kettle的几个子程序的功能和启动方式 Spoon.bat 图形界面方式启动作业和转换设计器. Pan.bat 命令行方式执行转换. Kitchen.bat   命令行方式执行 ...

  9. Solon详解(五)- Solon扩展机制之Solon Plugin

    Solon 中也有一种非常解耦的扩展机制:Solon Plugin.这种扩展机制和Spring Factories很像,和SPI也很像. 一.Solon 中的扩展机制 在Solon的扩展插件加载机制, ...

  10. SpringCloud Alibaba之Nacos

    一.运行Nacos Nacos GitHub开源地址:https://github.com/alibaba/nacos Nacos 官方文档:https://nacos.io/zh-cn/docs/q ...