::
hpo” post=105273Salve a tutti,
ho problemi nella creazione di due nuovi comandi, presi singolarmente funzionano bene, ma se combinati assieme il file non viene compilato.
`\newcommand{\expmon}[2]
{
\ifthenelse{#2=1}
{#1}
{
\ifthenelse{#2=0}
{}
{
#1^{#2}
}}}
`
`\newcommand{\maxtwo}[2]
{\ifthenelse{#1<#2}{#2}{#1}}`
Una scrittura del genere (dove \xi sono lettere casuali e \a numeri casuali) funziona perfettamente:
`$\expmon{\xi}{\a} \expmon{\xii}{\b} \expmon{\xiii}{\c}$ `
Se invece provo a compilare questa viene segnalato un errore:
`$\expmon{\xi}{\maxtwo{\a}{\d}}$`
Si tratta probabilmente di un errore banale che però non riesco a trovare visto che ho poche conoscenze sulla creazione di nuovi comandi, qualcuno con più esperienza è in grado di risolvere il problema?
A quanto capisco il codice serve per stampare una potenza del tipo [tt]x^3[/tt], omettendo tutto se l’esponente è zero, solo la base se l’esponente è uno.
Il tuo codice non può funzionare, perché [tt]\ifthenelse{#1<#2}{#2}{#1}[/tt] non produce un numero, ma le istruzioni per stamparne uno. In gergo TeXnico, [tt]\ifthenelse[/tt] non è espandibile.
Ci sono vari modi per affrontare il problema; il meno doloroso è, una volta che si fa l'abitudine al nuovo ambiente di programmazione, expl3.
`\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\expmon}{mm}
{
\int_case:nnF { #2 } % confrontiamo il secondo argomento
{
{0}{} % 0: nessun output
{1}{#1} % 1: la base
}
{#1^{#2}} % tutti gli altri casi
}
\DeclareExpandableDocumentCommand{\maxtwo}{mm}
{
\int_max:nn { #1 } { #2 } % il massimo dei due
}
\ExplSyntaxOff
\newcommand{\lx}{x}
\newcommand{\ly}{y}
\newcommand{\lz}{z}
\newcommand{\na}{-12}
\newcommand{\nb}{42}
\newcommand{\nc}{0}
\begin{document}
$\expmon{\lx}{\na} \expmon{\ly}{\nb} \expmon{\lz}{\nc}$ % z^0 non appare
$2\expmon{\lx}{\maxtwo{\na}{\nc}}$ % x^0 non appare
$\expmon{\lx}{\maxtwo{\na}{\nb}}$
\end{document}`
[attachment=1545]ScreenShot2016-02-20at16.53.00.png[/attachment]
Codice “classico”:
`
\newcommand{\expmon}[2]{%
\ifcase#2\relax
% 0: nessun output
\or
#1% 1: la base
\else
#1^{#2}% tutti gli altri casi
\fi
}
\newcommand{\maxtwo}[2]{%
\ifnum#1>#2
#1%
\else
#2%
\fi
}
`
Occhio ai [tt]%[/tt]; con expl3 non ci sono di questi problemi.
Ciao
Enrico
(Messaggio numero 13000) 🙂
Attachments:
You must be
logged in to view attached files.