短划线和长划线间距

短划线和长划线间距

我注意到,en 破折号和 em 破折号会碰到某些数字和字母,我认为在这些数字和字母之间使用空格不是标准做法。例如,如果“b”在破折号之前,或者“6”在破折号之后,除非您放大,否则破折号看起来就像真的碰到了字符。我知道我很挑剔,但有什么想法吗?

梅威瑟:

\documentclass[11pt]{amsart}
\begin{document}

61--68
49--81
58--44
bib---thing

\end{document}

答案1

“在大多数文本字体中,长破折号没有侧边距,这使得它们看起来非常靠近它们分隔的单词”(詹姆斯·费利西)

主要问题在于,由于在某些字符中,破折号看起来不像其他字符那样紧密。例如:

在此处输入图片描述

破折号看起来与 1 的分离比与 6 的分离要大得多。但是,如果你在每个字符周围画出方框,你会看到它与两个方框都相接:

在此处输入图片描述

现在您可以看到问题出在“1”上,它的右侧有太多空白。这是故意的,这样所有数字的宽度都相同。但在其他字体中可能会有所不同。

问题取决于字体以及字体中的每个字符。因此,这是一个字距调整问题。每种字体都应该定义每个字符和破折号之间的适当字距,这样这种影响就不会引人注目。不幸的是,字距信息存储在字体中,你不能(轻松地)从 TeX 修改它(看这里)

顺便说一句,如果有人关心,用于生成上述图形的代码如下:

\documentclass[11pt]{amsart}
% Following lines are taken from "The TeXBook", solution to Exercise 11.5, but modified so that 
% it shows the character in addition to the box
\def\dolist{\afterassignment\dodolist\let\next= }
\def\dodolist{\ifx\next\endlist \let\next\relax
  \else \\\let\next\dolist \fi
  \next}
\def\endlist{\endlist}
\def\hidehrule#1#2{\kern-#1%
  \hrule height#1 depth#2 \kern-#2 }
\def\hidevrule#1#2{\kern-#1{\dimen0=#1
    \advance\dimen0 by#2\vrule width\dimen0}\kern-#2 }
\def\makeblankbox#1#2{\hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
    \kern-#1 % overlap the rules at the corners
    \hbox to \wd0{\hidevrule{#1}{#2}%
      \raise\ht0\vbox to #1{}% set the vrule height
      \lower\dp0\vtop to #1{}% set the vrule depth
      \hfil\hidevrule{#2}{#1}}%
    \kern-#1\hidehrule{#2}{#1}}}}
\def\maketypebox{\makeblankbox{0pt}{.1pt}\llap{\box0}} % <-- Added \llap to show the char
\def\makelightbox{\makeblankbox{.1pt}{.1pt}}
\def\\{\if\space\next\ % assume that \next is unexpandable
 \else \setbox0=\hbox{\next}\maketypebox\fi}
\def\demobox#1{\setbox0=\hbox{\dolist#1\endlist}%
  \leavevmode\copy0\kern-\wd0}%\makelightbox}
% -- End of borrowed code

% This macro is needed to use an endash inside \demobox
% otherwise the -- would be "broken" as -{}-
\def\endash{\char"7B{}}

\begin{document}

61\endash68

\demobox{%
61\endash68
}
\end{document}

答案2

使用 XeTeX,人们可以玩interchartoks(纯 xetex 格式):

\font\test="Minion Pro"
\test
\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\Tight
\newXeTeXintercharclass\Dashes
\XeTeXcharclass`1=\Tight
\XeTeXcharclass`b=\Tight
\XeTeXcharclass`–=\Dashes
\XeTeXcharclass`—=\Dashes
\XeTeXinterchartoks\Tight\Dashes={\kern1em }
\XeTeXinterchartoks\Dashes\Tight={\kern-1em }

61–68\par
49–81\par
58–44\par
bib—thing\par
2–18
\bye

在此处输入图片描述

请注意,上面使用的是 OTF 字体,其 Unicode 位置上有 en-dash 和 em-dash。

答案3

你是对的。我建议这样解决:

    \documentclass[11pt]{amsart}
\begin{document}

61--\,68
49--81
58--44
bib---thing

\end{document}

我同意,需要一个小空间:\,

相关内容