Re: newcommand

#96007
Up
0
Down
::

claudio” post=95591con il caldo e le ferie quasi finite mi è venuta la balzana idea di l’operatore mcd
in modo che avesse tre comportamenti distinti
a seconda del numero degli argomenti
se ho tre numeri deve scrivere mcd(1,2,3)
se ho due numeri mcd(1,2)
se non ho nessun numero mcd
ho scritto questo codice
che funziona male ed è poco efficiente

`
\documentclass[parskip]{scrartcl}
\usepackage{amsmath}
\usepackage{xifthen}
\DeclareMathOperator{\mcdo}{mcd}

%\newcommand{\mcd}[3]{\ifthenelse{\NOT\isempty{#3}}{\mcdo{(#1,#2,#3)}}{\mcdo(#1,#2)}}
\newcommand{\mcd}[4][]{
\ifthenelse{\NOT\isempty{#4}}{\mcdo(#2,#3,#4)} %
{\ifthenelse{\NOT\isempty{#3}}{then clause}{\mcdo}}}

\begin{document}
$\mcd{1}{2}{3}{4}$

$\mcd{1}{2}{}$

$\mcd{1}{}{}$

\end{document}
`
come scrivere la definizione giusta?

Non è più semplice scrivere
`\mcd(1,2,3)`
e non preoccuparsi troppo?

Se proprio vuoi, ti suggerisco
`\documentclass{article}
\usepackage{amsmath,xparse}
\DeclareMathOperator{\mcdop}{mcd}
\ExplSyntaxOn
\NewDocumentCommand{\mcd}{d()}
{
\mcdop
\IfValueT{#1}{\claudio_mcd_arg:n { #1 } }
}
\cs_new_protected:Npn \claudio_mcd_arg:n #1
{
\seq_set_split:Nnn \l_claudio_mcd_arg_seq { ; } { #1 }
( \seq_use:Nn \l_claudio_mcd_arg_seq { , } )
}
\seq_new:N \l_claudio_mcd_arg_seq
\ExplSyntaxOff

\begin{document}
$\mcd(a;b;c)$
\end{document}`
Ci trovi qualche vantaggio?

Ciao
Enrico

Go to top