我正在尝试编写一个可以在 Windows 和 Unix 上编译的文件(我正在使用 alpine-tinytex 图像,但答案应该可以在 *nix 上移植)。
我想使用Inconsolata
XeLaTeX 的 google-font 的半粗体字体。对于 Windows,我手动安装了它,在 Alpine 中,我使用了
apk add ttf-inconsolata
使用 \newfontfamily\codefont{Inconsolata}
我可以在 Unix 中使用字体,甚至可以将粗细更改为标准变体(例如使用 粗体\textbf{}
),但我无法使用半粗体。所有答案都启用非标准粗细(例如这或者这似乎依赖于加载不同的子字体。
我试过了
\newfontfamily\codefont{Inconsolata Semi Bold}
在 Windows 上不起作用(未找到字体错误)。
\newfontfamily\codefont{Inconsolata SemiBold}
在 Windows 上可以运行,但在 Linux 上失败
Package fontspec Error: The font "Inconsolata SemiBold" cannot be found.
\newfontfamily\codefont{Inconsolata-SemiBold}
(根据字体文档,这是 ttf 变体的名称)
它在 Windows 上运行良好,但在 Linux 上失败,并kpathsea
显示:`
kpathsea: Running mktextfm Inconsolata-SemiBold
/home/appuser/.TinyTeX/texmf-dist/web2c/mktexnam: Could not map source abbreviation for Inconsolata-SemiBold.
/home/appuser/.TinyTeX/texmf-dist/web2c/mktexnam: Need to update ?
mktextfm: Running mf-nowin -progname=mf \mode:=ljfour; mag:=1; ; nonstopmode; input Inconsolata-SemiBold
This is METAFONT, Version 2.7182818 (TeX Live 2020) (preloaded base=mf)
kpathsea: Running mktexmf Inconsolata-SemiBold
! I can't find file `Inconsolata-SemiBold'.
<*> ...; ; nonstopmode; input Inconsolata-SemiBold
我认为这是最接近解决方案的,但我似乎仍然错过了一些东西。
编辑:
\newfontfamily\codefont{Inconsolata-SemiBold.ttf}
在 Windows 上可以工作但在 Unix 上失败:
kpathsea:make_tex: Invalid filename `[Inconsolata-SemiBold.ttf]/OT', contains '['
[...]
! Package fontspec Error: The font "Inconsolata-SemiBold" cannot be found.
[...]
! Font TU/Inconsolata-SemiBold.ttf(0)/m/n/10.95=[Inconsolata-SemiBold.ttf]/OT a
t 10.95pt not loadable: Metric (TFM) file or installed font not found.
<to be read again>
答案1
我找到了一个适合我且可在 Windows 和 Unix 之间移植的解决方案。
我从软件包中安装了 Inconsolata 作为字体。在 ubuntu 中,apt-get install fonts-inconsolata
安装.otf
字体的版本 - 例如,在 alpine 中apk add ttf-inconsolata
仅安装字体的常规和粗体粗细。这里有几个关于如何使用不同粗细字体的答案.otf
,但它们似乎都与在 Windows 下编译的文件不兼容.tex
。
Inconsolata-SemiBold.ttf
因此,我通过将两者都复制到/usr/share/fonts/TTF/Inconsolata-SemiBold.ttf
以及来手动安装所需的字体变体(在我的情况下) /usr/share/fonts/truetype/inconsolata/Inconsolata-SemiBold.ttf
。这样,我可以直接选择字体或自动将其用作 Inconsolata 的半粗体变体(例如在列表中)。
为了使其正常工作,字体必须具有正确的权限(chmod 644
),并且字体缓存必须更新(例如/usr/bin/fc-cache -fv
)。
在我的.tex
文件中,两个版本
\newfontfamily\codefont{Inconsolata-SemiBold}
\newfontfamily\listingfont{Inconsolata}
lstlisting
例如在 Windows 和 *nix 上使用半粗体即可。