2

I am trying to define a new command in my Latex file like this

\newcommand{\newchunk}[1][2]{\section{#2}\label{sec:#1}\quad}

But I get the following error after Latex compilation

ERROR: Illegal parameter number in definition of \\newchunk.

--- TeX said ---
<to be read again> 
                   2
l.58 ...nk}[1][2]{\section{#2}\label{sec:#1}\quad}

--- HELP ---
This is probably caused by a \newcommand, \renewcommand,
\newenvironment, or \renewenvironment command in which a # is used
incorrectly.  A # character, except as part of the command name \#,
can be used only to indicate an argument parameter, as in #2, which
denotes the second argument. This error is also caused by nesting one
of the above four commands inside another, or by putting a parameter
like #2 in the last argument of a \newenvironment or \renewenvironment
command.

Don't we use #2 to refer to the second argument? Where am I going wrong?

  • Where's the advantage of \newchunk{label}{Title} over the clearer \section{Title}\label{label}? – egreg Nov 6 '18 at 0:14
  • As egreg mention, this is not the greatest idea. Here's another reason: a lot of editors can help with cross references, they do this by looking at the \label commands in the source. Here you're hiding them so chances are your editor will not see these labels and include them in the choose reference interface. – daleif Nov 6 '18 at 7:03
3
\newcommand{\newchunk}[1][2]{\section{#2}\label{sec:#1}\quad}

defines a command \newchunk to have a one, optional argument that has a default value of 2. It seems like you're after defining a command that can take an optional argument containing the \label. Here's a suggestion:

\documentclass{article}

\newcommand{\newchunk}[2][]{%
  \section{#2}%
  % https://tex.stackexchange.com/q/53068/5764
  \if\relax\detokenize{#1}\relax\else
    \label{sec:#1}%
  \fi
}

\begin{document}

\newchunk{First}

See section~\ref{sec:second}.

\newchunk[second]{Second}

\end{document}

The above \newchunk takes two arguments, the first of which is an optional label string, used in \label. A check is performed to see whether the user supplied anything or not. If something is supplied, it's used as a \label, otherwise no \label is issued. The second argument is mandatory and is used as the \section title.

1

\newcommand{<command>}[<number of arguments>]{<what the command does>}

The second argument of \newcommand expects the number of arguments that the command takes. So you would want to do

\newcommand{\newchunk}[2]{\section{#2}\label{sec:#1}\quad}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.