使用最新的 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}