我认为\ul 8
,\ul8
和\ul{8}
是将参数传递8
给命令的相同方式\ul
。但是,它们产生不同的输出。为什么?
梅威瑟:
\documentclass{article}
\usepackage{soul}
\newcommand\A\ul
\newcommand\B[1]{\ul#1}
\newcommand\C[1]{\ul{#1}}
\begin{document}
Text \ul8 using \verb|\ul8|
Text \A8 using \verb|\A8|
Text \B8 using \verb|\B8|
Text \C8 using \verb|\C8|
Text \ul{8} using \verb|\ul{8}|
Text \A{8} using \verb|\A{8}|
Text \B{8} using \verb|\B{8}|
Text \C{8} using \verb|\C{8}|
\end{document}
答案1
该命令\ul
是 的别名\textul
,但这不是主要内容; 的定义\textul
是
\DeclareRobustCommand*\textul{\SOUL@ulsetup\SOUL@}
这表明不是一个带有参数的命令;反过来\SOUL@
定义为
\def\SOUL@{\futurelet\SOUL@@\SOUL@expand}
文件中对此宏的描述.dtx
是
此宏是 的入口
soul
。只有在设置灵魂驱动程序后,使用它才有意义。命令后的下一个标记soul
将分配给\SOUL@@
。这可以是括号中的一些文本,也可以是包含文本的宏的名称。
用户文档第 2 节开头也对此进行了解释:
该
soul
软件包提供了五个命令,旨在强调文本部分。每个命令都有一个参数,可以是文本本身,也可以是包含文本的宏的名称(例如\so\text
)。请参阅表 1 了解完整的命令调查。
因此\ul8
无法正常工作是预料之中的(并且有记录)。