Tengo preguntas bastante básicas (supongo), pero no puedo encontrar una respuesta clara.
Tengo un comando existente \ox{#1,#2}
de un paquete (chemmacros) que tiene dos argumentos separados por comas. Quiero cambiar el comando (es decir \renewcommand
), pero no sé cómo manejar los argumentos separados por comas.
Por idea básica sería:
\renewcommand{\ox}[2]{#1($\mathrm{#2}$)}
Pero esto no funciona.
¿Alguien tiene alguna sugerencia sobre cómo separar los argumentos?
Respuesta1
Aquí hay una versión simple:
\documentclass{article}
\usepackage{expl3,xparse}
\ExplSyntaxOn
\DeclareDocumentCommand { \ox } { m }
{
\clist_set:Nn \l_tmpa_clist { #1 }
\clist_item:Nn \l_tmpa_clist { 1 }
($\mathrm{\clist_item:Nn \l_tmpa_clist {2}}$)
}
\ExplSyntaxOff
\begin{document}
\ox{1,2}
\end{document}
Respuesta2
Aquí hay tres formas de hacer esto:
\documentclass{article}
\usepackage{xparse}
\usepackage{pgffor}
\usepackage{etoolbox}
\begin{document}
Using xparse and SplitArgument to extract the values and then
pass them to a second helper macro:
\NewDocumentCommand\oxone{>{ \SplitArgument{1}{,} } m }{\realoxone#1}
\newcommand\realoxone[2]{#1($\mathrm{#2}$)}
\oxone{one,two}
Using a plain def to extract the values using a helper macro:
\newcommand\oxtwo[1]{\realoxtwo#1!}
\def\realoxtwo#1,#2!{#1($\mathrm{#2}$)}
\oxtwo{one,two}
Using a pgf loop to extract the values into ox1, ox2, ...:
\newcommand\oxthree[1]{%
\foreach \x [count=\n] in {#1} {
\csxdef{ox\n}{\x}% save value n as ox<n>
}%
\csuse{ox1}($\mathrm{\csuse{ox2}}$)% use values
}
\oxthree{one,two}
\end{document}