Macro aceita argumento sem colocar colchetes?

Macro aceita argumento sem colocar colchetes?

Quero fazer uma macro que não exija colchetes para aceitar um argumento. Vamos inventar um exemplo. Digamos que eu queira uma macro que aceite um argumento opcional fe um argumento x:

\dd[f]{x}

E o que equivale a escrever:

\frac{\mathrm{d} f }{\mathrm{d} x }

A questão é: posso fazer uma macro tal que não precise escrever os colchetes, mas que ainda aceitará o argumento?

Seria muito conveniente se eu pudesse evitar o uso dos colchetes. Algo assim seria excelente:

\dd f,x

Existe alguma maneira de evitar escrever os colchetes?

Responder1

esse tipo de macro é uma construção de texto simples e é chamada de "macro delimitada". é desencorajado no látex, pelo menos em parte porque é fácil cometer erros.

aqui está um exemplo que faz o que você pede:

\documentclass{article}
\def\dd #1,#2 {\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\thispagestyle{empty}
$\dd f,x $
\end{document}

saída do código de exemplo

observe que se você omitir o espaço após o segundo argumento na entrada

$\dd f,x$

você receberá um erro:

! Missing } inserted.
<inserted text> 
                }
l.5 $\dd f,x$

entretanto, não ter um "mais próximo" definitivo limita o reconhecimento do argumento a um único token de entrada, o que poderia ser muito limitante, embora não para este exemplo.

editar: em resposta a uma solicitação de uma macro delimitada semelhante em que os argumentos podem ser opcionais, aqui está a mesma, modificada para esse fim. neste caso particular, basta que todos os argumentos sejam claramente delimitados.

\documentclass{article}
\def\dd #1,#2;{\frac{\mathrm{d} #1 }{\mathrm{d} #2 }}
\begin{document}
\[\dd f,x; \quad \dd ,x; \quad \dd ,; \]
\end{document}

saída do código de exemplo

neste caso, onde cada argumento provavelmente será apenas uma letra ou sequência de controle (por exemplo, \phi), a omissão de um argumento simplesmente o omite da saída. (apenas não digite um ponto final em vez de uma vírgula, como fiz ao configurar o exemplo.)

em situações mais complicadas, onde cadeias de múltiplos caracteres seriam os argumentos, a possível presença de pontuação em um argumento significa que a escolha dos delimitadores deve ser feita com muito mais cuidado; nesses casos, também é possível colocar os argumentos afetados entre colchetes para fazê-los aparecer como um único tokan para (la)tex, conforme sugerido em um comentário de @SeanAllred.

e, se esta macro for usada em texto, em vez de matemática, sejamuitocuidado com os espaços na expansão.

informação relacionada