Skip to content

Variant forms of Greek symbols

Attempt 1: MinionPro

\documentclass{article}
\usepackage{MinionPro} %! FAIL TO INSTALL THE PACKAGE
\begin{document}
    $\epsilon\varepsilon\phi\varphi\theta\vartheta\kappa\varkappa\beta\varbeta\pi\varpi\rho\varrho$
\end{document}

首先在 T460p 上进行了尝试,不过直接运行会报出

! LaTeX Error: File MinionPro.sty not found.

$ locate MinionPro.sty
$ apt-cache search MinionPro
texlive-fonts-extra - TeX Live: Additional fonts

于是试图装这个包,但是因为提示说要占用 1300+ MB 的空间。因为心疼硬盘大小,所以转而在 G40 上测试,

$ sudo apt install texlive-fonts-extra
Reading package lists... Done
Building dependency tree       
Reading state information... Done
texlive-fonts-extra is already the newest version (2019.202000218-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

但是显示已经装好的,然而确实编译过程中找不到这个包。甚至试图重装也是没有这个包,

$ sudo apt reinstall texlive-fonts-extra
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 460 MB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://cn.archive.ubuntu.com/ubuntu focal/universe amd64 texlive-fonts-extra all 2019.202000218-1 [460 MB]
Fetched 460 MB in 1min 30s (5,123 kB/s)                                                                                                                              
(Reading database ... 619949 files and directories currently installed.)
Preparing to unpack .../texlive-fonts-extra_2019.202000218-1_all.deb ...
Unpacking texlive-fonts-extra (2019.202000218-1) over (2019.202000218-1) ...
Setting up texlive-fonts-extra (2019.202000218-1) ...
Processing triggers for tex-common (6.13) ...
Running mktexlsr. This may take some time... done.
Running mtxrun --generate. This may take some time... done.
Running updmap-sys. This may take some time... done.
Running mktexlsr /var/lib/texmf ... done.
$ locate MinionPro.sty

另外根据安装指示

  $ otfinfo -v MinionPro-Regular.otf
  Version 2.012;PS 002.000;Core 1.0.38;makeotf.lib1.6.6565

2) Copy your OpenType font files into the otf directory.

  $ cp /some/path/*.otf otf

似乎需要预装 MinionPro-Regular.otf 字体,然而根据 Adobe fonts 给的信息,该字体是 “Available with CC”,也就是说需要 Adobe Creative Cloud subscription. 然而似乎学校没有订购,办公室电脑也没有找到该字体。

Attempt 2: unicode-math

\documentclass{article}
\usepackage{unicode-math}
\begin{document}
    Asana Math:
    \setmathfont{Asana Math}
    $\symbol{"003D0}$
\end{document}

需要通过 \symbol 来使用该符号,不够便捷。而且如果使用其它的字符,还要预先知道其 unicode 码

Attempt 3: mathspec

\documentclass{article}
\usepackage{mathspec}
\setmathfont(Greek){Asana-Math}
\begin{document}
    $\epsilon\varepsilon\phi\varphi\theta\vartheta\kappa\varkappa\beta\varbeta\pi\varpi\rho\varrho$
\end{document}

这个包的文档中有列出可用的 variant forms,不过 \epsilon\varepsilon 跟我之前的认知反过来了。

image

一开始便确定了 Asana Math 能够很好地支持该字体,而且 FreeMono 也可以,只不过字体有点差异。

Run in Batch

为了方便比较不同字体的效果,首先尝试在正文中切换

\setmathfont(Greek){Asana-Math}

但是报错提示说只能在 preamble 中定义。不过注意到如果不加 mathspec package,在文内 \setmathfont{...} 是可以的(注意此时没有指定 Greek)。

既然无法同时在一篇文档里面展现,那就多篇呗。因为 article 默认 A4 paper,也看过 geometry,似乎也只提供常见的 paper 大小,不能像 standalone 环境那样,然而直接使用 standalone 又不可行,似乎它只适用于 tikz。于是便想到 crop pdf。

这篇回答Command line tool to crop PDF files 提到, latex 本身有提供命令 pdfcrop,查看其帮助文档不能用 man,而是用 texdoc,从文档本身了解到 --help 可以看帮助文档。参数 --bbox 可以指定裁剪区域,而这个参数定义又是来自于 ghostscript 的,所以预先需要了解这些参数是怎么定义的

$ gs -sDEVICE=bbox vargreek.pdf 
GPL Ghostscript 9.26 (2018-11-20)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
%%BoundingBox: 149 139 308 714
%%HiResBoundingBox: 149.867995 139.247996 307.295991 713.465978

其中 --box <left> <bottom> <right> <top> 四个参数的含义(72 个 points 为 1inch)是

  • <left> <bottom>: 左下角,距离左边边界 <left> 个 points,而距离底边边界 <bottom> 个 points
  • <right> <top>: 右上角,距离左边边界 <right> 个 points,而距离底边边界 <top> 个 points

然后开始写 Makefile,通过 jobname 指定字体名,这样每次添加一个字体都要新增一个 object,不够智能,想通过写 for 循环来实现。不过在 Makefile 写循环不是很熟悉,索性直接写 shell 脚本。

首先便需要通过 fc-list 提取字体名,不过这里需要注意,字体名是用空格分隔的,所以需要加上引号,但是这还不够,如果采用

for font in ${fonts[@]}; do
    $font

$font 仍会以空格进行分隔,进而只提取第一个元素。需要换成

for ((i = 0; i < ${#fonts[@]}; i++)); do
    font=${fonts[$i]}

参考 Bash array with spaces in elements

但是如果用 fc-list 提取的话,不如直接将空格换成 -,后面需要用到原形式时再换过来。

# orig=${font//[-]/ }
# echo $font ${font//[-]/ }

这个技巧参考Replacing some characters in a string with another character

默认情况下,latex 如果出错,比如找不到字体文件,为了避免这个问题,添加参数 -halt-on-error 遇到错误即退出,类似参数的选择解释详见 What is the difference between “-interaction=nonstopmode” and “-halt-on-error”?

最后,再将这些文档通过 pdftk 结合在一起。

最终成功的版本已整理至个人模板仓库

References