Argument of \someCustomCommand has an extra } encountered when command is put in \ul. How to fix this?

1,624

Have a look at section 5.2 of the soul manual:

To convince soul not to feed font switching (or other) commands to the analyzer, but rather to execute them immediately, they have to be registered, too. The \soulregister macro takes the \soulregister name of a command name and either 0 or 1 for the number of arguments:

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

That means even though \code is essentially \texttt, you have to make sure that soul treats it appropriately by using \soulregister{\code}{1}.

Minimal working example:

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

Related videos on Youtube

Shahbaz
Author by

Shahbaz

Updated on March 06, 2020

Comments

  • Shahbaz
    Shahbaz over 3 years

    Possible Duplicate:
    Custom command inside soul package's \hl

    To make the document easier to understand (and easier to write), I have defined:

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

    I have used \code{some code} in hyperref and many many other places and everything has been fine.

    However, now I used it with \ul (from soul package), like this:

    \ul{\code{Hello}} world
    

    and I get this warning:

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

    Is theresomething wrong with the way I am defining my command? If I use \ul{\texttt{Hello}} there is no problem. Shouldn't my code be effectively reduced to that?!

    Note: I'm not looking for \code{\ul{Hello}} as an answer or similar things that change the text. The main reason is that I generate the text from another file that may decide to put the underline around the code. It would be much more difficult for me to change that order in text, than to fix the definition, or even replace all \codes with \texttts and forget about the macro altogether!

    • Shahbaz
      Shahbaz over 11 years
      Funny how I didn't find that question! :-/
  • Shahbaz
    Shahbaz over 11 years
    Great thanks! Could I ask a side question that is probably related? I see in section 6.4 of the manual how to use soul in section headings. It is very vague, but fine. However, it says how to apply a soul command to the whole section, while I need to write something like \section{Only \ul{this} is underlined}. Is such a thing possible?
  • diabonas
    diabonas over 11 years
    @Shahbaz Using \ul and friends in sectioning commands should work fine (at least in the standard classes like article etc.). You have to watch out, however, when using this in combination with hyperref: In this case, you'll need to use something like \section{Only \texorpdfstring{\ul{this}}{this} is underlined}.
  • Shahbaz
    Shahbaz over 11 years
    You are awesome!