\ul 命令中的计数器存在问题

\ul 命令中的计数器存在问题

以下 MWE 给出编译错误。如果我\arabic{count}\ul命令中移动外部,它就会起作用

\documentclass{article}
\usepackage{soul}
\begin{document}

\newcounter{count}%
\setul{0.5ex}{0.3ex}%
\ul{text \arabic{count}}

\end{document}

答案1

如果你定义一个宏\arabic{count}并使用它,它就会起作用:

\documentclass{article}
\usepackage{soul}
\newcommand{\arabcount}{\arabic{count}}
\begin{document}
\newcounter{count}%
\setul{0.5ex}{0.3ex}%
\ul{text \arabcount}
\end{document}

带有灵魂的阿拉伯计数器

通常,通过以下方式注册灵魂命令会有所帮助

\soulregister{command name}{number of arguments}

所以它不会被分析soul而是被执行。但是在这种情况下\arabic它仍然会出错,所以我建议使用宏解决方案。

答案2

也可以简单地在 周围添加额外的 {} \arabic{count}

\ul{text {\arabic{count}}}

答案3

与 Stefan 的解决方案略有不同,也使用宏,可能节省一些输入。我们定义一个宏\ull来替换\ul

\documentclass{article}
\usepackage{soul}
\begin{document}

\newcounter{count}%
\setul{0.5ex}{0.3ex}%
\def\ull#1{\def\acount{\arabic{count}} \ul{#1 \acount}}
\ull{text}
\end{document}   

如果您想要增加宏中的计数器,请按如下方式使用:

\documentclass{article}
\usepackage{soul}
\begin{document}
\newcounter{count}%
\setcounter{count}{0}
\setul{0.5ex}{0.3ex}%
\def\ull#1{\def\acount{\arabic{count}} \ul{#1 \acount}\stepcounter{count}}
\ull{text}
\ull{text}
\end{document}

答案4

\ul只要命令完全扩展为字符,就可以在里面使用;所以

\ul{Some text \thecount}

有效。除了字体切换和重音设置命令外,实际上不可能使用其他命令;此类预注册命令列表已包含在 中soul,但其他命令可以注册

\soulregister{\myfontswitch}{1}

例如,如果你有

\newcommand{\myfontswitch}[1]{\textbf{\scshape\small #1}}

(只是举个愚蠢的例子)。但是,例如,

\newcommand{\mytext}{\mbox{xyz}}

Reconstruction failed给予\soulregister{\mytext}{0}没有下划线用它。

相关内容