在许多书目样式中,重复的作者用三个破折号表示,形成一行。这在某些字体中效果很好,而在其他字体中会留下空白:
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\newcommand*{\threeemdashes}{\textemdash\kern-1pt\textemdash\kern-1pt\textemdash}
\begin{document}
\raggedright
\fontfamily{lmr}\selectfont%
Latin Modern \textemdash{}\textemdash{}\textemdash{} Latin Modern \linebreak
Latin Modern \threeemdashes{} Latin Modern \linebreak
Latin Modern \rule[0.6ex]{2.3em}{.4pt} Latin Modern\linebreak
Latin Modern mmm Latin Modern
\fontfamily{LinuxLibertineO-OsF}\selectfont
Linux Libertine \textemdash{}\textemdash{}\textemdash{} Linux Libertine \linebreak
Linux Libertine \threeemdashes{} Linux Libertine \linebreak
Linux Libertine \rule[.55ex]{2.2em}{.5pt} Linux Libertine\linebreak
Linux Libertine mmm Linux Libertine
\end{document}
正如你所见,我尝试自己调整字距,但是效果并不好,比较一下,例如{\tiny\threeemdashes}
和{\Huge\threeemdashes}
。我已经学会了我无法通过添加字距调整对来解决这个问题,至少无法通过 TeX 来解决。我甚至尝试手工绘制一条长线,但也无法缩放,而且 LaTeX 线是矩形,而虚线的圆形末端看起来要好得多。此外,获得厚度和凸起的正确值似乎很难。令我惊讶的是,我还了解到,在大多数字体中,emdash 的宽度不如 m,而且长度1em
不能描述 m 的宽度!?
我认为这不是一个小问题,应该有很多解决方案。那么,有没有一个真正的解决方案可以随字体大小、字体类型等而扩展?
是的,我绝对想使用 pdflatex。
答案1
正如前面所说,四边形不一定是大写字母 M 的宽度,而是字体设计师认为的最佳宽度。
获得长划线的方法可能是这样的:
\documentclass[a4paper]{article}
\newcommand*{\threeemdashes}{%
\makebox[3\fontcharwd\font`M]{% or \makebox[3em]
\rlap{\textemdash}\kern.5em
\cleaders\hbox{\kern-.3em\textemdash\kern-.3em}\hfill\kern.5em
\llap{\textemdash}}%
}
\begin{document}
\raggedright
\fontfamily{lmr}\selectfont%
Latin Modern \threeemdashes{} Latin Modern \linebreak
Latin Modern MMM Latin Modern
\fontfamily{LinuxLibertineO-OsF}\selectfont
Linux Libertine \threeemdashes{} Linux Libertine \linebreak
Linux Libertine MMM Linux Libertine
\end{document}
三个破折号是通过重复破折号产生的,确保有合适数量的备份并且宽度正是我们想要的。
答案2
ams 文档类将此规则定义为
\def\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace}
这完全避免了破折号之间可能出现的任何间隙。
至于 的长度1em
,它传统上与特定字体的标称大小相同,并且与字体的样式无关;即使在扩展或压缩字体中,1em
10pt 字体也为 10pt。字母“M”可能很1em
宽,也可能不宽,尽管它通常位于普通的中等或“书本”粗细字体中。此外,特定字体中的破折号(金属)将位于 1em 方块上;但是,破折号的可打印宽度可能会或可能不会包含整个宽度,这取决于字体设计者的想法。这种差异延续到数字类型。