每当我在命令中的冒号(:) 后输入空格时,\texttt{}
就会出现多余的空格——这是一个简单的例子:
\documentclass[12pt]{article}
\thispagestyle{empty}
\begin{document}
\section*{Test Space after Colon}
\texttt{1234 : 8901}\\
\texttt{12345678901}
\vspace{\baselineskip}
\noindent
The above was produced by
\begin{verbatim}
\texttt{1234 : 8901}\\
\texttt{12345678901}
\end{verbatim}
and has extra space after
the colon (:)
\vspace{\baselineskip}
\noindent
\textsf{1234 : 8901}\\
\textsf{12345678901}
\noindent
The above was produced by
\begin{verbatim}
\textsf{1234 : 8901}\\
\textsf{12345678901}
\end{verbatim}
and has no extra space after
the colon (:)
\end{document}
上述代码生成
正如您在示例中看到的,\textsf{}
例如,命令中没有出现额外的空格。
知道这里发生什么事吗?
答案1
这是默认设置的效果\nonfrenchspacing
,即在句子/从句结束标点后添加额外空格。等宽字体突出\texttt
显示了该效果。
\texttt{\frenchspacing1234 : 8901}\\
产生均匀的间距
\verb|1234 : 8901|\\
答案2
中冒号后的空间也较大\textsf
,但比中小得多\texttt
。如果我尝试
\sbox0{\textsf{1234 : 8901}}\showthe\wd0
\sbox0{\frenchspacing\textsf{1234 : 8901}}\showthe\wd0
我明白了
> 59.40216pt.
l.28 \sbox0{\textsf{1234 : 8901}}\showthe\wd0
?
> 58.09662pt.
l.29 ...chspacing\textsf{1234 : 8901}}\showthe\wd0
因此添加了额外的 1.3pt,没有使用法式间距。中的异常间距\texttt
是由于字体间距参数造成的;这些是cmtt10
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.524996)
(STRETCH R 0.0)
(SHRINK R 0.0)
(XHEIGHT R 0.430555)
(QUAD R 1.049991)
(EXTRASPACE R 0.524996)
)
虽然cmss10
有
(FONTDIMEN
(SLANT R 0.0)
(SPACE R 0.333334)
(STRETCH R 0.166667)
(SHRINK R 0.111112)
(XHEIGHT R 0.444445)
(QUAD R 1.000003)
(EXTRASPACE R 0.111112)
)
和EXTRASPACE
是这里的罪魁祸首,加上与冒号相关的空间因子代码,即 2000。
现在,\ttfamily
可以用来模拟打字机和空间因子的工作,就像打字员过去所做的那样(至少在美国),在句子结尾的句号和冒号后留出额外的空间。
您可以\ttfamily
通过将以下代码添加到序言中来重新定义为“非空间扩展”
\makeatletter
\let\ttfamily\relax % avoid a spurious warning
\DeclareRobustCommand\ttfamily
{\not@math@alphabet\ttfamily\mathtt
\fontfamily\ttdefault\selectfont\frenchspacing}
\makeatother
该命令\texttt
在内部使用 的当前定义\ttfamily
,因此您不需要重新定义它。
这只是 的核定义\ttfamily
,\frenchspacing
加上 。更简单地说,
\usepackage{xpatch}
\xapptocmd{\ttfamily}{\frenchspacing}{}{}
2022 年更新
LaTeX 的较新版本提供了钩子,因此可以更轻松地完成任务。
\documentclass{article}
\AddToHook{cmd/ttfamily/after}{\frenchspacing}
\begin{document}
\texttt{Look ma: no extra space!}
\texttt{\nonfrenchspacing Look ma: extra space!} % for comparison
\end{document}
在第二个例子中,\nonfrenchspacing
撤消了的效果\frenchspacing
。