\chardef 和下划线

\chardef 和下划线

你能解释一下为什么吗

a\_b {\ttfamily a\_b} \\
\chardef\_=`\_
a\_b {\ttfamily a\_b}

生产

替代文本

我想在普通文本中使用短下划线,在等宽字体中使用长下划线。我无法更改{\ttfamily a\_b}。其他的a\_b我可以更改。

感谢您的帮助!


编辑:我意识到这a\textunderscore b解决了我在文本中遇到的直接问题。我仍然想知道这个神秘的点是从哪里来的。

在数学模式中,

\chardef\_=`\_
$a\_b$

LaTeX 在我的安装中完全停止编译(没有错误,只是停止)。

答案1

您的\chardef定义\_为位于位置“5F(下划线字符的 ASCII)的字符,而该位置恰好包含神秘的点。至少在 cmr10 中是这样的,显然在您使用的字体中也是如此(运行(pdf)tex testfont以为您感兴趣的任何字体制作字体表)。纯 TeX 中的标准定义\_只是排版一些合适宽度的规则,因为 cmr 字体中没有任何下划线字形。我认为 LaTeX 中也有类似的东西,尽管我还没有费心去挖掘其中的\textunderscore奥秘。

不过,我不太清楚你能做什么。整个 LaTeX 字体选择业务是我的 TeX foo 的弱点。

答案2

在固定宽度字体中,每个符号的宽度都应相同。因此,长下划线有点不寻常。无论如何:在 OT1 编码(您显然正在使用)中\_内部调用\textunderscore,这反过来又定义为宽度为 0.3em 和一些空间的规则。您可以重新定义\_以获得更长的规则并\textunderscore在其他地方使用:

\documentclass{book}
\DeclareTextCommand{\_}{OT1}{%
  \leavevmode \kern.06em\vbox{\hrule width.6em}}

\begin{document}
a\textunderscore b  {\ttfamily a\_b}
\end{document}

例子

相关内容