Eu tenho a seguinte definição de comando (é a entrada de uma lista de entradas) que funciona bem:
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\\#4%
}\\}
Agora tenho um caso de teste em que o quarto parâmetro pode estar vazio. Nesse caso, não quero exibir a nova linha definida antes dela. Eu tentei a seguinte abordagem:
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\ifthenelse{\isempty{#4}}{}{\\#4}%
}\\}
mas me dá um erro:
Undefined control sequence. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
Missing = inserted for \ifnum. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
Poderia ajudar por favor?
Responder1
O problema parece ter sido resolvido nos comentários, mas quero sugerir duas abordagens diferentes.
Primeiro, \newcommand
facilita a definição de comandos que possuem um argumento opcional, desde que seja o primeiro argumento. Usando este recurso você pode reescrever sua macro como:
\newcommand{\entry}[4][]{%
#2&\parbox[t]{11.2cm}{%
#3%
\hfill%
#4%
\if\relax\detokenize{#1}\relax\else\\#1\fi
}\\}
O []
diz que por padrão #1
está vazio. Esta macro é essencialmente igual à sua, exceto que permutei os números dos parâmetros. A principal diferença está em como você usa a macro:
\entry{second}{third}{fourth}
sem o parâmetro opcional ou, se quiser fornecer o parâmetro opcional:
\entry[first]{second}{third}{fourth}
A segunda alternativa é usar \NewDocumentCommand
a partir doxparsepacote. A vantagem \NewDocumentCommand
é que permite colocar o argumento opcional onde quiser, inclusive no final:
\NewDocumentCommand{\entry}{ mmmo }{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\IfNoValueF{#4}{\\#4}% print #4 when it is given
}\\}
O mmmo
diz que há trêseuargumentos anadtórios e umóargumento opcional. Novamente, a única diferença real no seu código está na forma como a macro é usada:
\entry{first}{second}{third}% without optional argument
\entry{first}{second}{third}[fourth]% with optional argument