![2021 年,小型大写字母和旧式数字不再适用于 XeTeX](https://linux22.com/image/438499/2021%20%E5%B9%B4%EF%BC%8C%E5%B0%8F%E5%9E%8B%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D%E5%92%8C%E6%97%A7%E5%BC%8F%E6%95%B0%E5%AD%97%E4%B8%8D%E5%86%8D%E9%80%82%E7%94%A8%E4%BA%8E%20XeTeX.png)
如上所述,我很难小帽子和旧式数字使用时正确打印CMU 衬线体和特克斯。
我知道这个话题之前已经讨论过了但我无法使用以前的答案解决我的问题。以前的解决方案似乎主要涉及修复 MikTeX 更新中的错误,我使用 TeX Live。
以下是我的问题的 MWE。您可以从上面的链接获取与我相同版本的 CMU Serif。
\documentclass{amsart}
\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{CMU Serif}
\begin{document}
Hello, 1234567890!\\
\textsc{goodbye!}
\end{document}
如果我把上面的代码放到 中xelatex main.pdf
,数字就不是旧式的了,而且“goodbye”会全部以小写字母打印出来。但是,如果我把这行代码改成setmainfont[Numbers=OldStyle]{CMU Serif}
,setmainfont[Numbers=OldStyle]{Linux Libertine O}
一切就都正常了——只是字体不是我想要的!这说明CMU Serif 的字体文件存在问题。是吗?
我当前的“CMU Serif, Roman”文件包含 700 个字形。这太少了吗?如果是,我很难找到更完整的 Computer Modern .ttf 文件集。
答案1
目前推荐使用文件名加载字体,但单纯加载cmunrm.otf
无法找到其他字体,例如粗体或斜体。要启用这些字体,您可以使用以下命令:
\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures[CMUSerif]{
Ligatures={Common,TeX},
Numbers=OldStyle,
UprightFont=cmunrm,
BoldFont=cmunbx,
ItalicFont=cmunti,
SlantedFont=cmunsl,
BoldItalicFont=cmunbi,
BoldSlantedFont=cmunbl,
Extension=.otf}
\setmainfont{CMUSerif}
\begin{document}
\noindent Computer Modern Serif \textit{Italic} \textsl{Slanted} \textsc{Small Caps \textsl{Oblique}}
\textbf{Bold \textit{Italic} \textsl{Slanted} \textsc{Small Caps}}
\end{document}
您还可以将\defaultfontfeatures
命令保存到名为的文件中CMUSerif.fontspec
,以便\setmainfont{CMUSerif}
在您的文档中使用。
如果你需要对 sans-serif 或 typewriter 执行相同操作,则文件名索引在这里。 另一个不错的选择是加载\usepackage{newcomputermodern}
。
您无需担心这个额外的设置,但如果 XeTeX 或 LuaTeX 已配置为通过显示名称查找字体,它仍然可以工作。您可以使用 测试 XeTeX 的索引中是否有此字体fc-match "CMU Serif"
,以及 LuaTeX 是否使用luaotfload-tool --find="CMU Serif"
。
如果您的 Linux 系统无法自动找到字体,请使用 找到所需的配置文件,kpsewhich texlive-fontconfig.conf
并将其符号链接或复制到/etc/fonts/conf.d/
或系统上的相应目录。您可能还想使用 和 刷新字体缓存fc-cache -f -s -v
。luaotfload-tool -f -u -p -v
您还可以将字体安装为系统字体,以便在所有应用程序中使用它们。在 Linux 上,XeTeX 和 LuaTeX 也应该能够在您的用户字体目录中找到它们,因此您应该能够将副本或符号链接到 中的 TeX 树的字体目录~/.fonts/
。