- Questo topic ha 11 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 16 anni, 4 mesi fa da
strolego.
-
CreatoreTopic
-
26 Aprile 2010 alle 15:08 #44709
-
CreatoreTopic
-
AutoreRisposte
-
-
26 Aprile 2010 alle 15:48 #44710::
Supponiamo di avere un comando con un argomento
`\newcommand{\cmd}[1]{qualcosa #1}`
Vorrei definire un nuovo comando `\newcommand{\foo}[1]{
se #1 è \cmd{arg} esegui \bar{arg}
altrimenti esegui \bar{#1}
}`E’ possibile? (sempre che sia stato sufficientemente chiaro)
Grazie
FlavioDi base dovresti chiarire se l’argomento è un numero od una stringa qualsiasi. Se è un numero è abbastanza semplice memorizzarlo in un contatore TeX ed utilizzare il condizionale \ifnum nel secondo comando.
Se invece è una stringa di caratteri potresti memorizzare in una macro il valore dell’argomento e confrontarlo poi con una funzione del pacchetto xstring che offre comandi per il confronto di stringhe.Dovresti essere un po’ più esplicito sulla tua idea.
Bye
-
26 Aprile 2010 alle 16:27 #44711::
Supponiamo di avere un comando con un argomento
`\newcommand{\cmd}[1]{qualcosa #1}`
Vorrei definire un nuovo comando `\newcommand{\foo}[1]{
se #1 è \cmd{arg} esegui \bar{arg}
altrimenti esegui \bar{#1}
}`E’ possibile? (sempre che sia stato sufficientemente chiaro)
`\newcommand{\foo}[1][arg]{\bar{#1}}`
In questo caso \foo ti dà \bar{arg}, mentre \foo[xyz] dà \bar{xyz}.Ma forse non è quello che chiedi; solo che, come dice robitex, non si capisce molto bene.
Ciao
Enrico
-
26 Aprile 2010 alle 19:52 #44712
-
26 Aprile 2010 alle 19:55 #44713
-
27 Aprile 2010 alle 9:54 #44714::
La soluzione non è generale ma si riferisce esclusivamente al mio problema.Il mio problema era quello di formattare delle espressioni valutate usando fp in modo appropriato se queste si presentano come esponenti o come coefficienti (sullo stile dei comandi efmt e cfmt del pacchetto rangen)
Io ho un comando (\FPsv{arg}) che calcola con fp l’argomento e stampa il risultato
`\FPsv{#1} è definito come \FPeval\tmp{round(#1:0)}\tmp` e volevo applicare la formattazione sia a stringhe con questo comando sia a stringhe più semplici (contenenti un solo valore)Inoltre ho altri comandi che permettono di semplificare frazioni numeriche che hanno a numeratore e a denominatore espressioni valutabili con fp; questi comandi permettono la formattazione per coefficienti ed esponenti.
I comandi sono \sempli{#1}{#2} che fornisce la frazione semplificata, \semplix{#1}{#2} che fornisce òa razione semplificata, la stringa vuota se il risultato è 1, il segno meno se il risultato è -1 e \esempli{#1}{#2} analogo per gli esponenti.La mia soluzione consiste nell’usare questi comandi con denominatore 1: volevo farla automatizzata, ma non ci sono riuscito.
La mia idea era: creo un comando \coef per formattare i coefficienti con un argomento: se l’argomento è un’espressione \semplix il comando non fa nulla, se l’argomento è un’espressione valutabile da fp (ad esempio \a dove \a è un valore numerico assegnato) il comando restituisce \semplix{a}{1}, se l’espressione è \FPv{arg} il comando doveva estrarre arg e calcolare \semplix{arg}{1}.
Spero che si capisca tutto perché ho la tendenza a dare per scontate troppe cose del codice che scrivo.
Grazie
Flavio
-
27 Aprile 2010 alle 10:09 #44715::
La soluzione non è generale ma si riferisce esclusivamente al mio problema.
Il mio problema era quello di formattare delle espressioni valutate usando fp in modo appropriato se queste si presentano come esponenti o come coefficienti (sullo stile dei comandi efmt e cfmt del pacchetto rangen)
Io ho un comando (\FPsv{arg}) che calcola con fp l’argomento e stampa il risultato
`\FPsv{#1} è definito come \FPeval\tmp{round(#1:0)}\tmp` e volevo applicare la formattazione sia a stringhe con questo comando sia a stringhe più semplici (contenenti un solo valore)Inoltre ho altri comandi che permettono di semplificare frazioni numeriche che hanno a numeratore e a denominatore espressioni valutabili con fp; questi comandi permettono la formattazione per coefficienti ed esponenti.
I comandi sono \sempli{#1}{#2} che fornisce la frazione semplificata, \semplix{#1}{#2} che fornisce òa razione semplificata, la stringa vuota se il risultato è 1, il segno meno se il risultato è -1 e \esempli{#1}{#2} analogo per gli esponenti.La mia soluzione consiste nell’usare questi comandi con denominatore 1: volevo farla automatizzata, ma non ci sono riuscito.
La mia idea era: creo un comando \coef per formattare i coefficienti con un argomento: se l’argomento è un’espressione \semplix il comando non fa nulla, se l’argomento è un’espressione valutabile da fp (ad esempio \a dove \a è un valore numerico assegnato) il comando restituisce \semplix{a}{1}, se l’espressione è \FPv{arg} il comando doveva estrarre arg e calcolare \semplix{arg}{1}.
Spero che si capisca tutto perché ho la tendenza a dare per scontate troppe cose del codice che scrivo.
Sì, dai troppo per scontato. Nemmeno un esempietto d’uso? Non è che scrivendo “arg” si capisca che cosa intendi metterci.
Ciao
Enrico
-
27 Aprile 2010 alle 10:20 #44716::
Scusa. 😳 😳 😳`\FPsv[5+2] -> 7
\FPeval\a{6*5} \a -> 30.00000
\FPeval{a-6+a/10} -> 27
\sempli{a-10}{40} ->1/2
\sempli{a-10}{5} -> 4
\semplix{a-10}{20} ->
\semplix{10-a}{20} -> –
\esempli{a-10}{20} ->
\esempli{10-a}{20} -> -1
`
così che
`\semplix{a-10}{20} x ->x
x^{\esempli{a-10}{20}} -> x
\semplix{10-a}{20} x -> -x
x^{\esempli{10-a}{20}} -> x^{-1}
`\FPsv \sempli, ecc. accettano come argomento(i) qualsiasi espressione che fp può calcolare (numerica o con parametri)
Se vuoi il codice di \sempli, \semplix, posso postarlo.
Spero di essere stato più chiaro ora
-
27 Aprile 2010 alle 14:46 #44717::
Scusa. 😳 😳 😳
`\FPsv[5+2] -> 7
\FPeval\a{6*5} \a -> 30.00000
\FPeval{a-6+a/10} -> 27
\sempli{a-10}{40} ->1/2
\sempli{a-10}{5} -> 4
\semplix{a-10}{20} ->
\semplix{10-a}{20} -> –
\esempli{a-10}{20} ->
\esempli{10-a}{20} -> -1
`
così che
`\semplix{a-10}{20} x ->x
x^{\esempli{a-10}{20}} -> x
\semplix{10-a}{20} x -> -x
x^{\esempli{10-a}{20}} -> x^{-1}
`\FPsv \sempli, ecc. accettano come argomento(i) qualsiasi espressione che fp può calcolare (numerica o con parametri)
Se vuoi il codice di \sempli, \semplix, posso postarlo.
Spero di essere stato più chiaro ora
Continuo a non capire. I tuoi numeri sono interi? Che intendi con “frazione semplificata”? Che trovi il massimo comun divisore tra numeratore e denominatore?
Ciao
Enrico
-
27 Aprile 2010 alle 21:21 #44718::
Continuo a non capire. I tuoi numeri sono interi? Che intendi con “frazione semplificata”? Che trovi il massimo comun divisore tra numeratore e denominatore?
In questo contesto i numeri sono tutti interi (ho un altra versione in cui si possono aggiungere cifre decimali)
Con “frazione semplificata” intendo proprio l’operazione di semplificazione da scuola primaria per cui calcolo il massimo comun divisore e divido
\sempli{24}{36}->\frac{2}{3} ecc.
Grazie
-
27 Aprile 2010 alle 21:22 #44719::
Continuo a non capire. I tuoi numeri sono interi? Che intendi con “frazione semplificata”? Che trovi il massimo comun divisore tra numeratore e denominatore?
In questo contesto i numeri sono tutti interi (ho un altra versione in cui si possono aggiungere cifre decimali)
Con “frazione semplificata” intendo proprio l’operazione di semplificazione da scuola primaria per cui calcolo il massimo comun divisore e divido
\sempli{24}{36}->\frac{2}{3} ecc.
Grazie
A questo punto dovrei vedere le macro che usi, ma ho una certa paura. 🙂 Si può sapere che ci vuoi fare?
Ciao
Enrico
-
27 Aprile 2010 alle 22:22 #44720::
Le macro mi servono per la formattazione di esercizi e risposte nei temi d’esame.Le macro sono queste (tremo al pensiero del giudizio)
`%% Comando di base
\newcommand{\@sempli}[2]{\FPeval\segnofrac{round(#1:0)*round(#2:0)}%%
\FPeval\zott{round(abs(#1):0)}\FPset\pra{\zott}\FPeval\zott{round(abs(#2):0)}\FPset\prb{\zott}%%
\FPeval\num{max(\pra,\prb)}\FPeval\den{min(\pra,\prb)}\FPset\resto{\den}\whiledo{\resto>0}
{\FPset\restoold{\resto}\FPeval\resto{round((\num-trunc((\num)/\den:0)*(\den)):0)}
\FPset\num{\den}\FPset\den{\resto}}\FPeval\num{round((\pra/\restoold):0)}\FPeval\den{round((\prb/\restoold):0)}
\FPifneg\segnofrac{-}\else{}\fi\ifthenelse{\den=1}{\ifthenelse{\num=1}{1}{\num}}{\frac{\num}{\den}}}%% il comando \sempli
\newcommand{\sempli}{\@sempli}%% il comando \semplix (per i coefficienti)
\newcommand{\semplix}[2]{
\FPeval\t@mpa{round(#1:0)}\FPeval\t@mpb{round(#2:0)}
\ifthenelse{\t@mpa=\t@mpb}{}
{\ifthenelse{\t@mpa=-\t@mpb}{-}
{\@sempli{#1}{#2}}
}
}%%% comando \esempli (per gli esponenti)
\newcommand{\esempli}[2]{
\FPeval\t@mpa{round(#1:0)}\FPeval\t@mpb{round(#2:0)}
\ifthenelse{\t@mpa=\t@mpb}{}
{\ifthenelse{\t@mpa=-\t@mpb}{-1}
{\@sempli{#1}{#2}}
}
}
`Grazie della collaborazione
Flavio
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.