![为什么 newtxmath 无法与 pdflatex 和 libertine 一起使用](https://linux22.com/image/257366/%E4%B8%BA%E4%BB%80%E4%B9%88%20newtxmath%20%E6%97%A0%E6%B3%95%E4%B8%8E%20pdflatex%20%E5%92%8C%20libertine%20%E4%B8%80%E8%B5%B7%E4%BD%BF%E7%94%A8.png)
newtxmath
包和之间似乎存在某种不兼容性libertine-legacy
;以下代码无法编译:
\documentclass{article}
\usepackage[libertine]{newtxmath}
\begin{document}
$a = 1$
\end{document}
当通过编译时pdflatex
,它会导致 latex 尝试查找Libertine-nu
似乎不存在的字体:
kpathsea: Running mktextfm Libertine-nu
/usr/local/texlive/2012/texmf/web2c/mktexnam: Could not map source abbreviation L for Libertine-nu.
/usr/local/texlive/2012/texmf/web2c/mktexnam: Need to update /usr/local/texlive/2012/texmf-dist/fonts/map/fontname/special.map?
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; nonstopmode; input Libertine-nu
我从以下位置安装了该软件包的最新版本:http://mirrors.ctan.org/install/fonts/libertine-legacy.tds.zip今天,之前没有尝试过,所以不知道这是否是最近的破损。
我宁愿继续使用,pdflatex
因为该microtype
软件包似乎还不能很好地与lualatex
或配合使用xelatex
。将软件包更改为使用该libertineotf
软件包并进行编译xelatex
确实有效。
答案1
我假设您使用的是最新版本的 newtx 软件包,它附带了 Libertine 字体的精简版。不幸的是,有一个小的打包错误:文件Libertine-nu.tfm
的大小写错误。更改
/usr/local/texlive/2012/texmf-dist/fonts/tfm/public/newtx/libertine-nu.tfm
到
/usr/local/texlive/2012/texmf-dist/fonts/tfm/public/newtx/Libertine-nu.tfm
应该可以解决问题。
答案2
这确实是一个非常隐蔽的错误。我在nxlmia.vf
虚拟字体文件中追踪到了它。
如果从 Bash shell 运行vftovp $(kpsewhich nxlmia.vf)
,输出将显示
(VTITLE )
(FAMILY UNSPECIFIED)
(FACE F MRR)
(CODINGSCHEME FONTSPECIFIC)
(DESIGNSIZE R 10.0)
(COMMENT DESIGNSIZE IS IN POINTS)
(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)
(CHECKSUM O 24175074123)
(SEVENBITSAFEFLAG TRUE)
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.25)
(STRETCH R 0.3)
(SHRINK R 0.1)
(XHEIGHT R 0.478)
(QUAD R 1.0)
(EXTRASPACE R 0.06)
)
(MAPFONT D 0
(FONTNAME rfxlr-alt)
(FONTCHECKSUM O 30127131230)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 1
(FONTNAME Libertine-nu)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
(MAPFONT D 2
(FONTNAME txmia)
(FONTCHECKSUM O 4141071701)
(FONTAT R 1.0)
(FONTDSIZE R 10.0)
)
[...]
错误出现在指令中MAPFONT D1
,其中请求的字体是不存在的Libertine-nu
。所有其他需要它的虚拟字体都会调用LibertineZI-nu
存在的字体。
临时解决方案
从 Bash shell 运行
cp $(kpsewhich libertine-tfm) Libertine-nu.tfm
vftovp $(kpsewhich nxlmia.vf) > nxlmia.vpl
跑步
vptovf nxlmia.vpl
nxlmia.tfm
并将生成的文件保存nxlmia.vf
在与您正在处理的文档相同的目录中Libertine-nu.tfm
如果您足够大胆,您可以移动这两个文件来替换 TeX Live(或 MiKTeX)提供的文件。当newtx
更新以纠正此问题时,除了删除这三个文件外,无需执行任何其他操作。