我收到了一些难以解释的行为\widehat
:
\documentclass[12pt,a4paper]{文章} \usepackage{amsfonts} \开始{文档} \[ \fbox{$\widehat{\mathcal{C}}$}, \fbox{$\widehat{\hspace{0pt}\mathcal{C}}$}, \fbox{$\widehat{\mathcal{C}\hspace{0pt}}$}, \fbox{$\widehat{\hspace{0pt}\mathcal{C}\hspace{0pt}}$} \] \结束{文档}
请注意,帽子在第一种情况下没有对齐,但在其他所有情况下都正确对齐。为什么\hspace{0pt}
会有如此大的差异?
另外,我如何才能复制此效果以解决其他对齐问题?目前,我在使用脚本字体的边界框方面遇到了麻烦……
答案1
如果您将重音符号放在单个字符上,TeX 会使用字体度量中的信息来移动重音符号,以考虑斜体字母的斜度。这就是第一个字母移动的原因。如果您将重音符号放在更复杂的数学列表上,那么它只会位于列表的中心。
答案2
David Carlisle 解释了为什么\hspace{0pt}
会有如此大的差异。我想解释一下如何改变重音符号的行为,\mathcal{C}
使它们不会向右偏离太多。事实上,我甚至可以说\mathcal
字体的字体度量存在错误cmsy10
。我的解决方案适用于 UNIX 类型的系统;以下是未打补丁和打补丁后的字体度量的比较。
我认为右边的修补版本看起来好多了。要生成修补后的字体指标,请在当前 TeX 目录中运行以下 shell 脚本:
for i in 5 6 7 8 9 10
do tftopl $(kpsewhich cmsy$i.tfm) |
sed '
/(LABEL O 103)/d
/(LABEL O 104)/a\ \ \ (LABEL O 103)' > modcmsy$i.pl
pltotf modcmsy$i.pl
rm modcmsy$i.pl
done
这将生成 6 个文件modcmsy5.tfm
。modcmsy10.tfm
(如果您认为重音符号仍然太靠右,请在 shell 脚本中替换104
为113
。)现在 LaTeX 文件
\documentclass[12pt]{article}
\DeclareFontShape{OMS}{cmsy}{m}{n}{%
<5><6><7><8><9><10>gen*modcmsy%
<10.95><12><14.4><17.28><20.74><24.88>modcmsy10%
}{}
\pdfmapline{+modcmsy5 CMSY5 <cmsy5.pfb}
\pdfmapline{+modcmsy6 CMSY6 <cmsy6.pfb}
\pdfmapline{+modcmsy7 CMSY7 <cmsy7.pfb}
\pdfmapline{+modcmsy8 CMSY8 <cmsy8.pfb}
\pdfmapline{+modcmsy9 CMSY9 <cmsy9.pfb}
\pdfmapline{+modcmsy10 CMSY10 <cmsy10.pfb}
\usepackage{amsfonts}
\begin{document}
$\dot{\mathcal C}$ $\tilde{\mathcal C}$ $\widehat{\mathcal C}$
\end{document}
将产生上图右侧部分的输出,并且重音校正将适用于所有字体大小。(谢谢,egreg,告诉我\pdfmapline
!) 就我个人而言,我不太喜欢这个\widehat
形式amsfonts
,所以如果可能的话我还是会省略\usepackage{amsfonts}
:
¹简单解释一下:(八进制数!)是字体中103
的位置。在原始字体指标中, 上的重音符号向右移动的量与 上的重音符号向右移动的量相同。在修补版本中,它与 上的重音符号相同(以 8 为基数);替代版本对应于。\mathcal{C}
\mathcal{C}
\mathcal{B}
\mathcal{D}
104
113
\mathcal{K}