Tenho perguntas bastante básicas (eu acho), mas não consigo encontrar uma resposta clara.
Eu tenho um comando existente \ox{#1,#2}
de um pacote (chemmacros) que possui dois argumentos separados por vírgulas. Quero alterar o comando (ou seja \renewcommand
), mas não sei como lidar com os argumentos separados por vírgula.
Por ideia básica seria:
\renewcommand{\ox}[2]{#1($\mathrm{#2}$)}
Mas isso não funciona.
Alguém tem alguma sugestão de como separar os argumentos?
Responder1
Aqui está uma versão simples:
\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}
Responder2
Aqui estão três maneiras de fazer isso:
\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}