以下 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}
,没有下划线用它。