无衬线大写希腊字母不再显示在 acmart 中

无衬线大写希腊字母不再显示在 acmart 中

我有一个文档(在 acmart 类中),它应该写一个无衬线的 Gamma:

\documentclass{acmart}

\usepackage{amsmath}
\begin{document}

\sbox0{$\mathsf{\Gamma}$}
{\tracingall\scrollmode\showbox0 }
\usebox{0}

\end{document}

其日志如下:https://pastebin.com/M1aDaFDQ 我猜最有趣的是第 949 行:

.\T1/LinuxBiolinumT-TLF/m/n/9 ^^@

在我的旧 MacBook 上,它显示正常,我得到的日志是:https://pastebin.com/GS1imAYa 但是,在我的新款 MacBook Pro 中,它显示一个反勾“`”。我知道这个问题也出现在运行不同操作系统的其他笔记本电脑上,例如 Linux(但不知道具体的发行版)。

其他大写希腊字母(如 \Pi)也会出现此问题,但 \Sigma 或任何小写希腊字母都不会出现此问题。

我也尝试添加\tracinglostchars=3,但是什么也没有弹出。

有没有办法对我的旧笔记本电脑(我仍然拥有它)进行逆向工程,以便让新笔记本电脑正确打印大写希腊字母?

答案1

更新

我很尴尬地说我忽略了这个问题,即您加载的文档类amsart加载了命令

\usepackage[tt=false, type1=true]{libertine}
\usepackage[libertine]{newtxmath}

这些将文本字体编码从 20 世纪 80 年代的包含大写希腊字母的 7 位 OT1 更改为 20 世纪 90 年代的 8 位 T1 编码,将重音符号放在相同的位置。

您可以通过加载具有所需编码的无衬线字体来解决这个问题。如果您想要一种支持大写和小写希腊字母的直立无衬线字体,最好的选择是使用 切换到 Unicode 字体fontspec。但是,您可以使用以下命令加载具有大写希腊字母的匹配\mathsf字母表(例如 Libertinus Sans):

\documentclass{acmart}
\tracinglostchars=3 % Make missing symbols an error!

\pagestyle{empty} % Suppress page numbers

\usepackage{amsmath}
\DeclareMathAlphabet{\mathsf}{OT1}{LibertinusSans-LF}{m}{n}
\SetMathAlphabet{\mathsf}{bold}{OT1}{LibertinusSans-LF}{bx}{n}

\begin{document}

\[ \mathop{\textsf{sin}} \mathsf{\Gamma} \quad \mathop{\textsf{Tr}} \boldsymbol{\mathsf{\Gamma}}
\]

\end{document}

Libertius Sans 样本

原始答案

我无法复制您的错误,但一个可能的笨拙解决方法是手动设置为\mathsf肯定涵盖希腊大写字母的字母表。(如果您还需要直立无衬线小写希腊文,则旧版 8 位 TeX 中没有太多好的选择,但如果您切换到 ,就会有大量的选择unicode-math。)

例如,这可能会解决您的眼前问题:

\documentclass{article}
\tracinglostchars=3 % Make missing symbols an error!

\pagestyle{empty} % Suppress page numbers

\usepackage{amsmath}

\DeclareMathAlphabet{\mathsf}{OT1}{cmss}{m}{n}
\SetMathAlphabet{\mathsf}{bold}{OT1}{cmss}{bx}{n}

\begin{document}

\[ \mathsf{\Gamma} \quad \boldsymbol{\mathsf{\Gamma}}
\]

\end{document}

计算机现代无衬线字体示例

但是,这里重要的不是\DeclareMathAlphabet。而是\tracinglostchars=3。如果您在 MWE 中遇到此错误,则说明您的安装出现了问题,您需要诊断出是什么问题,而不是继续用笨办法解决它。

由于 20 世纪 80 年代的技术原因,当你请求当前字体没有的符号时,TeX 的默认行为是打印一个空格,然后默默将错误消息记录到文件中间.log。相反,您希望它停止并打印错误消息,告诉您实际出了什么问题。

不过,我猜你加载的某个包直接或间接地将 的编码\mathsfOT1(其中插槽"00为 Γ)更改为T1(其中同一插槽为反引号)。但是,你的 MWE 中似乎没有任何一行应该这样做。

相关内容