由于我可以为这个问题想出一个 MWE,所以我完全重写了这篇文章——如果你对我原来的问题感到好奇,请查看上次修订 (1)。
考虑这个 MWE test.tex
:
\PassOptionsToPackage{dvipsnames}{xcolor}
% compile with: lualatex test.tex
\documentclass[10pt,a4paper]{article}
\makeatletter
\newcommand{\name}[1]{\def\@name{#1}}
\makeatother
\usepackage[margin=2cm]{geometry}
\geometry{left=1.25cm,right=1.25cm,top=1.25cm,bottom=1.25cm}
\usepackage{fontspec}
\newfontfamily\titlenamefont{EB Garamond}[Ligatures=TeX]
\usepackage[hidelinks=true]{hyperref}
\begin{document}
\name{\hspace{4em}\addfontfeature{LetterSpace=10.0}\textsc{Brazen Discovery}}
\begingroup
\makeatletter
{\ifcsname titlenamefont\endcsname\titlenamefont\fi \Huge\bfseries{\@name}\par}
\makeatother
\endgroup\medskip
Testing some normal paragraph text here...
\end{document}
我有一个老的机器,有些硬件损坏,但在某些情况下仍然可以使用,装有 Ubuntu 14.04 和 TexLive 2014 或 2015(我一直将 TexLive 安装在“关闭”文件夹中,然后添加到/path/to/texlive/2014/bin/i386-linux
)$PATH
。
然后,我有一个新的机器,从头开始安装 Ubuntu 14.04,并从旧机器逐字复制 TexLive 2014 或 2015(但仍在同一路径)。编译过程在两台机器上运行正常,但字体有问题。
这老的机器报告此情况:
$ uname -a
Linux myOldPC 4.4.0-57-generic #78~14.04.1-Ubuntu SMP Sat Dec 10 00:16:09 UTC 2016 i686 i686 i686 GNU/Linux
$ echo $(lsb_release -i -d -r -c)
Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty
$ tlmgr --version
tlmgr revision 39298 (2016-01-07 03:44:29 +0100)
tlmgr using installation: /path/to/texlive/2014
TeX Live (http://tug.org/texlive) version 2014
$ lualatex --version
This is LuaTeX, Version beta-0.80.0 (TeX Live 2015) (rev 5238)
当我使用 构建时lualatex test.tex
,输出以以下内容结束:
$ lualatex test.tex
...
(/path/to/texlive/2014/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/path/to/texlive/2014/texmf-dist/tex/latex/oberdiek/grfext.sty)
(/path/to/texlive/2014/texmf-dist/tex/latex/latexconfig/epstopdf-sys.c
fg)) (/path/to/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
(/path/to/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.
sty)) (./test.out) (./test.out) [1{~/.texlive2015/texmf-var/fo
nts/map/pdftex/updmap/pdftex.map}] (./test.aux))
301 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 3 attribute, 44 glue_spec, 3 attribute_list
, 1 write nodes
avail lists: 2:42,3:4,4:38,5:22,6:65,7:2,8:2,9:13,10:5
</path/to/texlive/2014/texmf-dist/fonts/opentype/public/lm/lmroman10-re
gular.otf><~/.fonts/EBGaramond08-Regular.otf>
Output written on test.pdf (1 page, 8339 bytes).
Transcript written on test.log.
PDF 文档如下所示evince
:
...基本上,标题字体是粗体,并且是小写字母 - 并且嵌入在 PDF 中的字体是:
$ pdffonts test.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
IJJDUA+EBGaramond08-Regular CID Type 0C Identity-H yes yes yes 8 0
QXSXVQ+LMRoman10-Regular CID Type 0C Identity-H yes yes yes 9 0
...即EBGaramond08-Regular
包含在标题中(对应于日志<~/.fonts/EBGaramond08-Regular.otf>
的最后几行lualatex
)。
这新的机器报告此情况:
$ uname -a
Linux myNewPC 4.4.0-101-generic #124~14.04.1-Ubuntu SMP Fri Nov 10 19:06:11 UTC 2017 i686 i686 i686 GNU/Linux
$ echo $(lsb_release -i -d -r -c)
Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 Codename: trusty
$ tlmgr --version
tlmgr revision 39298 (2016-01-07 03:44:29 +0100)
tlmgr using installation: /path/to/texlive/2014
TeX Live (http://tug.org/texlive) version 2014
$ lualatex --version
This is LuaTeX, Version beta-0.80.0 (TeX Live 2015) (rev 5238)
因此,除了内核版本之外,其他一切都相同。当我使用 构建时lualatex test.tex
,输出结果如下:
$ lualatex test.tex
...
(/path/to/texlive/2014/texmf-dist/tex/latex/oberdiek/epstopdf-base.sty
(/path/to/texlive/2014/texmf-dist/tex/latex/oberdiek/grfext.sty)
(/path/to/texlive/2014/texmf-dist/tex/latex/latexconfig/epstopdf-sys.c
fg)) (/path/to/texlive/2014/texmf-dist/tex/latex/hyperref/nameref.sty
(/path/to/texlive/2014/texmf-dist/tex/generic/oberdiek/gettitlestring.
sty)) (./test.out) (./test.out)
LaTeX Font Warning: Font shape `EU2/EBGaramond(0)/bx/n' undefined
(Font) using `EU2/EBGaramond(0)/m/n' instead on input line 23.
LaTeX Font Warning: Font shape `EU2/EBGaramond(1)/bx/n' undefined
(Font) using `EU2/EBGaramond(1)/m/n' instead on input line 23.
LaTeX Font Warning: Font shape `EU2/EBGaramond(1)/bx/sc' undefined
(Font) using `EU2/EBGaramond(1)/bx/n' instead on input line 23.
[1{/path/to/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./test.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
)
310 words of node memory still in use:
3 hlist, 1 vlist, 1 rule, 2 glue, 1 kern, 4 attribute, 44 glue_spec, 4 attrib
ute_list, 1 write nodes
avail lists: 2:40,3:4,4:37,5:22,6:65,7:2,8:2,9:13,10:5
</path/to/texlive/2014/texmf-dist/fonts/opentype/public/lm/lmroman10-re
gular.otf><~/.fonts/EBGaramond12-Regular.otf>
Output written on test.pdf (1 page, 7527 bytes).
Transcript written on test.log.
310 words of node memory
因此,除了(与旧电脑的情况相比)的差异之外301 words of node memory
,还有未定义的字体形状——就的情况下bx/sc
,我猜这意味着粗体小型大写字母的形状是未定义的。
PDF 文档如下所示evince
:
...基本上,标题字体是不是加粗,并且不是小型大写字母 - PDF 中嵌入的字体为:
$ pdffonts test.pdf
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
JYJWKP+EBGaramond12-Regular CID Type 0C Identity-H yes yes yes 8 0
QXSXVQ+LMRoman10-Regular CID Type 0C Identity-H yes yes yes 9 0
...即EBGaramond12-Regular
包含在标题中(对应于<~/.fonts/EBGaramond12-Regular.otf>
最后几行的lualatex
) - 但是,它确实不是对应于EBGaramond08-Regular
旧机器上的构建使用?!
所以,我想我的问题是:
- 为什么
lualatex
在相同的操作系统环境下,对于完全相同的.tex
源文件,可以在一种情况下(旧 PC 版本)选择一种字体系列,而在另一种情况下(新 PC 版本)选择另一种字体系列? - 如何在新机器上进行构建,执行与旧机器上相同的操作并生成相同的文档?
请注意,新旧机器都会报告此情况:
$ luaotfload-tool --find="EB Garamond"
luaotfload | resolve : Font "EB Garamond" found!
luaotfload | resolve : Resolved file name "~/.fonts/EBGaramond12-Regular.otf"
如果我在两个系统上查找 garamond OTF 字体并进行比较,我会得到:
# $ find / -xdev -iname '*garamond*.otf' 2>/dev/null | sort | tee findold # on old PC
# $ find / -xdev -iname '*garamond*.otf' 2>/dev/null | sort | tee findnew # on new PC
$ diff -U 100000 findold findnew
--- findold 2017-12-05 07:13:18.813205949 +0100
+++ findnew 2017-12-05 07:13:09.413124141 +0100
@@ -1,15 +1,11 @@
~/.fonts/EBGaramond08-Italic.otf
~/.fonts/EBGaramond08-Regular.otf
~/.fonts/EBGaramond12-AllSC.otf
~/.fonts/EBGaramond12-Italic.otf
~/.fonts/EBGaramond12-Regular.otf
~/.fonts/EBGaramond-InitialsF1.otf
~/.fonts/EBGaramond-InitialsF2.otf
~/.fonts/EBGaramond-Initials.otf
~/.fonts/EBGaramondSC08-Regular.otf
~/.fonts/EBGaramondSC12-Regular.otf
-~/.fonts/GaramondNo8-Italic.otf
-~/.fonts/GaramondNo8-Medium-Italic.otf
-~/.fonts/GaramondNo8-Medium.otf
-~/.fonts/GaramondNo8-Regular.otf
... 所以至少我有相同的 EBGaramond 文件名(我猜 GaramondNo8 是“URW Garamond”,而不是 EBGaramond)。结果,我也有完全相同的EBGaramond*.otf
文件(显然,来自EBGaramond-0.016.zip- 请参阅过去的修订版以了解我在新电脑上安装它的代码):
# $ find / -xdev -iname '*ebgaramond*.otf' 2>/dev/null | sort | xargs ls -la | sed "s/$(whoami) $(whoami)//" | tee ls-laold # on old PC
$ find / -xdev -iname '*ebgaramond*.otf' 2>/dev/null | sort | xargs ls -la | sed "s/$(whoami) $(whoami)//" | tee ls-lanew # on new PC
-rw-r--r-- 1 200656 Apr 8 2014 ~/.fonts/EBGaramond08-Italic.otf
-rw-r--r-- 1 259968 Apr 8 2014 ~/.fonts/EBGaramond08-Regular.otf
-rw-r--r-- 1 212492 Apr 8 2014 ~/.fonts/EBGaramond12-AllSC.otf
-rw-r--r-- 1 298252 Apr 8 2014 ~/.fonts/EBGaramond12-Italic.otf
-rw-r--r-- 1 495300 Apr 8 2014 ~/.fonts/EBGaramond12-Regular.otf
-rw-r--r-- 1 60240 Apr 8 2014 ~/.fonts/EBGaramond-InitialsF1.otf
-rw-r--r-- 1 5120 Apr 8 2014 ~/.fonts/EBGaramond-InitialsF2.otf
-rw-r--r-- 1 78512 Apr 8 2014 ~/.fonts/EBGaramond-Initials.otf
-rw-r--r-- 1 226840 Apr 8 2014 ~/.fonts/EBGaramondSC08-Regular.otf
-rw-r--r-- 1 353364 Apr 8 2014 ~/.fonts/EBGaramondSC12-Regular.otf
$ diff -U 100000 --report-identical-files ls-laold ls-lanew
Files ls-laold and ls-lanew are identical
luatex-cache 名称中的相关条目在新旧 PC 上也相同:
$ zgrep -i ebgaramond /path/to/texlive/2014/texmf-var/luatex-cache/generic/names/luaotfload-names.lua.gz | grep -v '"full"' | grep fullpath | sort
["fullpath"]="~/.fonts/EBGaramond08-Italic.otf",
["fullpath"]="~/.fonts/EBGaramond08-Regular.otf",
["fullpath"]="~/.fonts/EBGaramond12-AllSC.otf",
["fullpath"]="~/.fonts/EBGaramond12-Italic.otf",
["fullpath"]="~/.fonts/EBGaramond12-Regular.otf",
["fullpath"]="~/.fonts/EBGaramond-InitialsF1.otf",
["fullpath"]="~/.fonts/EBGaramond-InitialsF2.otf",
["fullpath"]="~/.fonts/EBGaramond-Initials.otf",
["fullpath"]="~/.fonts/EBGaramondSC08-Regular.otf",
["fullpath"]="~/.fonts/EBGaramondSC12-Regular.otf",
...唯一的区别似乎在于 luatex-cache otf 字体:
# $ ls -la /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond* | sed "s/$(whoami) $(whoami)//" | tee luatex-cache-otf-old # on old PC
# $ ls -la /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond* | sed "s/$(whoami) $(whoami)//" | tee luatex-cache-otf-new # on new PC
$ diff -U 100000 luatex-cache-otf-old luatex-cache-otf-new
--- luatex-cache-otf-old 2017-12-05 07:48:06.679082205 +0100
+++ luatex-cache-otf-new 2017-12-05 07:45:15.625596626 +0100
@@ -1,6 +1,4 @@
--rw-rw-rw- 1 473749 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond08-regular.lua
--rw-rw-rw- 1 303043 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond08-regular.luc
--rw-rw-rw- 1 568196 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-italic.lua
--rw-rw-rw- 1 364914 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-italic.luc
--rw-rw-rw- 1 724218 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-regular.lua
--rw-rw-rw- 1 466820 Oct 28 2016 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-regular.luc
+-rw-rw-rw- 1 568148 Dec 4 16:21 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-italic.lua
+-rw-rw-rw- 1 364894 Dec 4 16:21 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-italic.luc
+-rw-rw-rw- 1 724173 Dec 4 16:21 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-regular.lua
+-rw-rw-rw- 1 466728 Dec 4 16:21 /path/to/texlive/2014/texmf-var/luatex-cache/generic/fonts/otf/ebgaramond12-regular.luc
ebgaramond12-italic.lua
我尝试在新旧机器上进行差异分析,但变化实在太多,都是数字引用中的数字变化(如["slookups"]={ 983214, 983316, 983112, 983418 },
),所以揭示不了太多信息。
除此之外,唯一明显的区别是新的机器,ebgaramond08-regular.lua
/.luc
无法生成texmf-var/luatex-cache/generic/fonts/otf/
(如果它们在第一次运行中不存在,它们应该被生成lualatex
)...并且,从lualatex
日志中:
- 老的机器用途
~/.texlive2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map
(它也texmf-config
有~/.texlive2015
) - 新的机器没有
~/.texlive2015
,所以它使用/path/to/texlive/2014/texmf-var/fonts/map/pdftex/updmap/pdftex.map
(显然?)- 但是,如果我
updmap
在新机器上运行,它~/.texlive2015/texmf-var
会被创建(但~/.texlive2015/texmf-config
没有),然后lualatex
读取pdftex.map
它 - 但字体的相同问题仍然存在..
- 但是,如果我
我真的不知道如何从这里继续调试......
答案1
好吧,我想我已经在某种程度上解决了这个问题,但是它都是不完整的 - 所以如果有人知道我如何“修复”这个安装(但无需从头开始重新安装),我很乐意听到它。
问题是:在旧机器上,我确实使用install-tl
脚本安装了 TexLive 2014 / 2015(但在“off”文件夹中,即非系统、额外安装的分区中的文件夹);在新机器上,我只是将安装从旧机器的“off”文件夹复制到新机器的“off”文件夹(即额外安装的分区,与旧机器上的“off”文件夹具有相同的路径(名称)。(我非常喜欢从外部安装的分区运行软件,对被视为操作系统安装树的干预最少)。
我曾假设,由于两个(旧的和新的)“off”文件夹具有相同的路径,我所需要做的就是将相同的内容添加/path/to/texlive/2014/bin/i386-linux
到$PATH
in中.bashrc
,事情就会同样起作用 - 通常它们确实如此(即可执行文件照常运行)。只是,我忘记了在 中创建了其他文件夹$HOME
(显然是由install-tl
或创建的tlmgr
,尽管我不记得我是否手动创建了其中任何一个)。
因此,在确保与 OP 中所述相同的字体在新机器中与旧机器中的相同位置放置后,我重复了复制,这次使用文件$HOME
夹:
rsync -aP oldPC.lan:/path/to/texlive /path/to/
rsync -aP oldPC.lan:~/.texlive2014 ~/
rsync -aP oldPC.lan:~/.texlive2015 ~/
rsync -aP oldPC.lan:~/texmf ~/
经过这次复制后,test.tex
OP 中的内容最终可以正常编译,没有关于字体形状未定义的投诉,并且 PDF 看起来与 OP 中的“旧”PC 示例相同。
我想,可以说,如果相同的字体文件在“新”PC 和“旧”PC 上位于相同的位置(即,texlive install/luatex-cache 期望它们所在的位置,如图所示fc-list
),并且如果 texlive 安装在“新”PC 和“旧”PC 上的路径相同,那么使用上述文件夹复制,“旧”PC 中的缓存信息也将适用于“新”PC,并且 Latex 编译将以相同的方式执行。
但事实并非如此。在开始之前,请注意,只有在完成上述rsync
复制后,此命令才会在“新”机器上显示与“旧”机器相同的输出:
$ kpsewhich --all updmap.cfg
~/.texlive2015/texmf-config/web2c/updmap.cfg
/path/to/texlive/texmf-local/web2c/updmap.cfg
/path/to/texlive/2014/texmf-dist/web2c/updmap.cfg
在复制之前,~/.texlive2015/texmf-config/web2c/updmap.cfg
不会输出该行。正如 OP 中所述,即使之前不存在,updmap
新机器也会创建;但是,是什么创建了?在这种情况下,我刚刚从“旧”机器复制到“新”机器,由于路径相同,所以一切正常 - 但我想使用某些工具生成会更合适(例如由生成;我曾希望有这样的一个,但没有。有,但它在“旧”和“新”机器上都报告相同的错误)。~/.texlive2015/texmf-var
~/.texlive2015
~/.texlive2015/texmf-config
~/.texlive2015/texmf-config
~/.texlive2015/texmf-config
~/.texlive2015/texmf-var
updmap
tlmgr --repair
tlmgr check all
可能因为这个原因,我遇到了另一个字体问题:复制并确认可以正常test.tex
工作后,我返回到导致此问题的原始文档,但无法编译它,因为找不到字体 Lato。因此,我将 Lato 文件复制到 luatex-cache 期望它们的位置(在本例中,在~/.fonts/
“新”机器上),然后运行:
luaotfload-tool -vvv --update --force
... 但在此之后,找到了 Lato 字体 - 但 EB Garamond 又恢复到与 OP 中相同的错误!因此,在此之后,我不得不rsync
再次重新运行复制过程以“撤消”效果luaotfload-tool
(复制过程替换的唯一内容是luatex-cache 中的lato*
文件ebgaramond*
)- 然后最终像在“旧”机器上一样完成编译。
好吧,如果知道如何在“新”机器上恢复或修复复制的安装就太好了,而且luaotfload-tool
调用结果也能正常运行编译过程 - 但我想,我的用例已经太模糊了,无法直接回答...