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 f
e 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}
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}
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.