当命令放在 \ul 中时,\someCustomCommand 的参数出现额外的 }。如何修复此问题?

当命令放在 \ul 中时,\someCustomCommand 的参数出现额外的 }。如何修复此问题?

可能重复:
soul 包的 \hl 中的自定义命令

为了使文档更容易理解(并且更容易编写),我定义了:

\newcommand{\code}[1]{\texttt{#1}}

我已经\code{some code}hyperref很多其他地方使用过,一切都很好。

但是,现在我将它与\ul(来自soul包)一起使用,如下所示:

\ul{\code{Hello}} world

我收到此警告:

! Argument of \code has an extra }.
<inserted text>
                \par
l.52 \ul{\code{Hello}}
                       world

我定义命令的方式有问题吗?如果我使用,\ul{\texttt{Hello}}则没有问题。我的代码不应该有效地简化为那样吗?!

笔记:我并不是\code{\ul{Hello}}在寻找答案或类似的东西来改变文本。主要原因是我从另一个文件生成文本,该文件可能会决定在代码周围添加下划线。对我来说,更改文本中的顺序要比修复定义困难得多,甚至用 s 替换所有\codes\texttt并完全忘记宏!

答案1

看一下soul手册第 5.2 节

为了确保soul不要将字体切换(或其他)命令提供给分析器,而是立即执行它们,还必须注册它们。宏 \soulregister采用\soulregister命令名称的名称以及0参数1数量:

\soulregister{<command name>}{<number of arguments>}

这意味着,尽管\code本质上是\texttt,你必须确保soul通过使用 对其进行适当处理\soulregister{\code}{1}

最小工作示例:

\documentclass{article}
\usepackage{soul}
\newcommand{\code}[1]{\texttt{#1}}
\soulregister{\code}{1}
\begin{document}
\ul{\code{Hello}} world
\end{document}

相关内容