使用下划线作为字母时使用连字符

使用下划线作为字母时使用连字符

在我当前文本的许多地方,我必须插入类似这样的内容Name_of_model。我在这个答案非常有帮助。但是,我在宏的参数连字符方面遇到了问题\escapeus。我该如何改进\escapeus才能启用参数的连字符。具体来说,如果需要连字符,应该将其放在下划线后面,例如:Name_of_-model

灵感来自这个,我试图修改@egreg给出的定义多于如下:

\DeclareRobustCommand*{\escapeus}[1]{%
  \begingroup\@activeus\scantokens{#1\endinput}\endgroup}
\begingroup\lccode`\~=`\_\relax
\lowercase{\endgroup\def\@activeus{\catcode`\_=\active \let~\_\discretionary{-}{}{}}}

我的所有尝试(包括移动_)都失败了。

我怎样才能改进上述代码,以便能够对 参数进行连字符连接\escapeus

答案1

\let~\_\discretionary{-}{}{}

定义_为然后\_插入自由裁量权在定义点你的意图

\def~{\_\discretionary{-}{}{}}

这修复了你原来的定义,另一种机制在原始的 OT1 编码中不起作用,就是把 _ 变成一个普通字符,然后你会得到一些自动连字(如果你使用特殊模式,则会更多),并且可以_使用\hyphenation

在此处输入图片描述

\documentclass{article}

\usepackage[T1]{fontenc}
\textwidth3cm

\catcode`\_=12
\lccode`\_`\_

\hyphenation{four_-fifty-five_-six one_-two_-three}

\begin{document}


one two thee four one_two_three four_fiftyfive_six
one two thee four one_two_three four_fiftyfive_six


\end{document}

相关内容