renovar comando con argumentos separados por comas

renovar comando con argumentos separados por comas

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}

información relacionada