beamer 标准字体的数学符号定位错误

beamer 标准字体的数学符号定位错误

使用最新的 TeX 发行版,这个问题的简单答案是“加载 sansmathaccent 包”(这是 Ariel 对我的答案的实现)。实际上,更正后的字体应该通过 beamer,但不知何故,目前这不起作用。


我刚刚参加了一个数学会议,在那里我看到了很多为班级准备的幻灯片,beamer其中包含位置错误的数学重音,例如:。LaTeX 文件是

\documentclass{beamer}
\begin{document}
\begin{frame}{}
$\tilde M$ $\dot u$ $\hat T$
\end{frame}
\end{document}

正如你所见,重音位于基地相应字母的倾斜,即不考虑字母的倾斜。我确信造成这种情况的原因是标准数学字体的字距表中缺少条目;另请\skewchar参阅这个帖子

我知道一个选择是尝试其他字体,但我不喜欢这个,原因有二:首先,我确实喜欢标准字体的外观,其次,如果使用不同的字体,那么我仍然不得不忍受查看使用标准字体的其他人的幻灯片。所以我的问题是:是否存在一种修复方法,可以让我在 中使用表现良好的标准字体beamer,并且是否有希望上述 LaTeX 文件在未来的某个版本中产生正确定位的重音beamer?(我认为对类的字体进行这样的更改不会有问题,因为它不会影响 的边界框,例如\dot u,因此它不会导致间距、换行符和分页符的任何变化。)

答案1

您可以使用\skew宏:

\skew{shift}{accent}{character}

具体来说,我会为符号定义宏。这样以后就可以轻松调整它们,尤其是当字体发生变化时。

\newcommand*{\Mtilde}{\skew{5}{\tilde}{M}}
\newcommand*{\That}{\skew{3}{\hat}{T}}
\newcommand*{\udot}{\skew{3}{\dot}{u}}

投影仪中给出:

替代文本

答案2

好的,在与 Joseph Wright 交谈后,我继续为 编写了一个补丁cmssi,这是 beamer 中的标准数学字体。问题是,这种字体(计算机现代无衬线斜体)被设计为文本字体,因此它不包含有关重音定位的任何信息。比较修补前后的情况:

现在答案(希望)是在最终版本中并准备使用。但是,我要编写的内容仅适用于 Unix 类型的系统。奇怪的是,我最初编写的补丁10pt也适用于其他尺寸。

为了获得位置合适的重音,您需要执行以下操作。无需更改实际的 TeX 文件,并且输出中除了重音位置之外不会发生任何变化。好的,创建一些测试目录并运行以下脚本。(如果您在系统上拥有 root 权限,您可能希望将该updmap命令替换为updmap-sys;谢谢,赫伯特!而且,最后被删除的地图文件应该存储在某个合适的位置,但我不确定在哪里。)

# Create the patch file:
echo '17a18,61
>    (LABEL C E)
>    (LABEL C H)
>    (LABEL C M)
>    (LABEL C N)
>    (LABEL C Q)
>    (LABEL C i)
>    (LABEL C j)
>    (KRN O 177 R 0.1)
>    (STOP)
>    (LABEL C J)
>    (KRN O 177 R 0.22)
>    (STOP)
>    (LABEL C e)
>    (LABEL C m)
>    (LABEL C n)
>    (LABEL C r)
>    (LABEL C B)
>    (LABEL C R)
>    (LABEL C S)
>    (LABEL C Z)
>    (KRN O 177 R 0.08)
>    (STOP)
>    (LABEL C c)
>    (LABEL C q)
>    (LABEL C s)
>    (LABEL C z)
>    (KRN O 177 R 0.06)
>    (STOP)
>    (LABEL C v)
>    (LABEL C x)
>    (KRN O 177 R 0.04)
>    (STOP)
>    (LABEL C h)
>    (KRN O 177 R 0.02)
>    (STOP)
>    (LABEL C l)
>    (LABEL C U)
>    (KRN O 177 R 0.11)
>    (STOP)
>    (LABEL C d)
>    (LABEL C C)
>    (LABEL C G)
>    (KRN O 177 R 0.12)
>    (STOP)
25a70
>    (KRN O 177 R 0.1)
61a107
>    (KRN O 177 R 0.04)
62a109
>    (KRN O 177 R 0.03)
68a116
>    (KRN O 177 R 0.08)
70a119
>    (KRN O 177 R 0.04)
77a127
>    (KRN O 177 R 0.1)
79a130
>    (KRN O 177 R 0.07)
86a138
>    (KRN O 177 R 0.08)
87a140
>    (KRN O 177 R 0.06)
93a147
>    (KRN O 177 R 0.09)
95a150
>    (KRN O 177 R 0.06)
103a159
>    (KRN O 177 R 0.08)
104a161
>    (KRN O 177 R 0.1)
111a169
>    (KRN O 177 R 0.05)
112a171
>    (KRN O 177 R 0.06)
120a180
>    (KRN O 177 R 0.08)
122a183
>    (KRN O 177 R 0.07)
124a186
>    (KRN O 177 R 0.08)
127a190
>    (KRN O 177 R 0.14)
134a198
>    (KRN O 177 R 0.05)
140a205
>    (KRN O 177 R 0.01)
143a209
>    (KRN O 177 R 0.1)' > cmssi.patch
# Patch the font metrics of cmssi8, 9, 10, 12 and 17:
for i in 8 9 10 12 17; do
tftopl $(kpsewhich cmssi$i.tfm) > cmssmi$i.pl
patch cmssmi$i.pl cmssi.patch
pltotf cmssmi$i.pl
done
# Include the patched font in beamerbasefont.sty and define its \skewchar:
cp $(kpsewhich beamerbasefont.sty) newbeamerbasefont.sty
sed '
/{OT1}{cmss}{m}{it}/,/{}/{
s|cmssi|cmssmi|g
s|{}|{\\skewchar\\font=127}|}
' newbeamerbasefont.sty > beamerbasefont.sty
# Make the font metric available to the system:
echo 'cmssmi8 cmssmi8 <cmssi8.pfb
cmssmi9 cmssmi9 <cmssi9.pfb
cmssmi10 cmssmi10 <cmssi10.pfb
cmssmi12 cmssmi12 <cmssi12.pfb
cmssmi17 cmssmi17 <cmssi17.pfb' > cmssmi.map
updmap --enable Map=cmssmi.map
# clean up:
rm cmssi.patch cmssmi{8,9,10,12,17}.pl newbeamerbasefont.sty cmssmi.map

这将创建六个文件:五个名为 的 tfm 文件cmssmi<n>.tfm,其中包含修补后的字体指标,以及beamerbasefont.sty将用来代替原始的beamerbasefont.sty。(我认为这cmssmi对于“计算机现代无衬线”来说很不错数学(斜体)现在,您可以开始测试以下示例 TeX 文件。这应该进入同一个测试目录,因为上述六个文件仅在那里可用。非常感谢您的反馈!

\documentclass{beamer}
\newcommand\test{}
\newcommand\testframe[1]{
\renewcommand\test[1]{{$#1 ##1_{{#1 ##1_{#1 ##1}}}$} }
\begin{frame}{}
\test a
\test b
\test c
\test d
\test e
\test f
\test g
\test h
\test i
\test j
\test k
\test l
\test m
\test n
\test o
\test p
\test q
\test r
\test s
\test t
\test u
\test v
\test w
\test x
\test y
\test z
\test A
\test B
\test C
\test D
\test E
\test F
\test G
\test H
\test I
\test J
\test K
\test L
\test M
\test N
\test O
\test P
\test Q
\test R
\test S
\test T
\test U
\test V
\test W
\test X
\test Y
\test Z
\end{frame}
}

\begin{document}
\renewcommand{\baselinestretch}{1.4}\normalsize
\testframe{\dot}
\testframe{\hat}
\testframe{\tilde}
\testframe{\bar}
\end{document}

答案3

显然,默认的 beamer 字体不适合高质量的数学排版(缺乏适当的重音定位是一个方面,但我怀疑还有更多)。

除了使用适当的数学字体外,没有其他方法可以解决这个问题,请参阅了解带有 beamer 的不同数学字体的示例。当然,如果通知 beamer 维护人员默认设置更好的字体,那就更好了。

答案4

我觉得无衬线字体对于演讲来说很丑陋。它们在书中很难阅读,所以我看不出在演讲中使用它们的任何理由。下面的字体对我来说看起来相当不错。(我还稍微调整了重音命令。)

\documentclass[serif]{beamer}
\usepackage{mathptmx}
\usepackage{helvet}
\usepackage{courier}
\begin{document}
\begin{frame}{}
$\widetilde{M}$ $\dot u$ $\widehat{T}$
\end{frame}
\end{document}

相关内容