- Questo topic ha 8 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 8 anni fa da
marcopisto.
-
CreatoreTopic
-
5 Dicembre 2011 alle 12:11 #67317::
Ciao a tutti,vorrei realizzare un nuovo comando che implementa al suo interno un ciclo. Vi scrivo in “pseudocodice” come vorrei che funzionasse (il maiuscoletto non indica voce alta):
`\newcommand{\comando}{
PER i CHE VA DA 1 AL VALORE DEL CONTATORE “contatore”
\stampa{i}
FINE CICLO
}`
Come posso farlo?Grazie mille e buona giornata,
Marco.P.S. C’è qualche documentazione dove si possono imparare queste nozioni?
-
CreatoreTopic
-
AutoreRisposte
-
-
5 Dicembre 2011 alle 12:29 #67318
-
5 Dicembre 2011 alle 13:06 #67319::
Ciao Claudio,grazie della risposta.
Senza consultare la documentazione del pacchetto ifthen (andando a intuito) credo di essere riuscito a implementare il condizionale “if” come mi serve. Poi, quando ho letto la tua risposta, ho consultato la documentazione di ifthen per quanto riguarda il ciclo “for”. Siccome non ho trovato niente che avesse a che fare con un ciclo “for” (potrebbe essere colpa del mio inglese), ho provato a implementare lo stesso ciclo, ma usando un ciclo “while” in questo modo:
`\newcommand{\stampaTutto}{%
\newcounter{contatoreTemporaneo}%
\addtocounter{contatoreTemporaneo}{1}%
\whiledo{\value{contatoreTemporaneo}<\value{contatore1}}{\stampa{\thecontatoreTemporaneo}\addtocounter{contatoreTemporaneo}{1}}% }` Se quello che ho fatto è poco elegante, o c'è un modo migliore di farlo (o, ancora, c'è effettivamente la possibilità di implementare un ciclo "for"), invito chiunque voglia farlo a darmi qualche consiglio. Intanto ciao e grazie mille, Marco. -
5 Dicembre 2011 alle 13:30 #67320::
Marco87″ post=66255Ciao Claudio,
grazie della risposta.
Senza consultare la documentazione del pacchetto ifthen (andando a intuito) credo di essere riuscito a implementare il condizionale “if” come mi serve. Poi, quando ho letto la tua risposta, ho consultato la documentazione di ifthen per quanto riguarda il ciclo “for”. Siccome non ho trovato niente che avesse a che fare con un ciclo “for” (potrebbe essere colpa del mio inglese), ho provato a implementare lo stesso ciclo, ma usando un ciclo “while” in questo modo:
`\newcommand{\stampaTutto}{%
\newcounter{contatoreTemporaneo}%
\addtocounter{contatoreTemporaneo}{1}%
\whiledo{\value{contatoreTemporaneo}<\value{contatore1}}{\stampa{\thecontatoreTemporaneo}\addtocounter{contatoreTemporaneo}{1}}% }` Se quello che ho fatto è poco elegante, o c'è un modo migliore di farlo (o, ancora, c'è effettivamente la possibilità di implementare un ciclo "for"), invito chiunque voglia farlo a darmi qualche consiglio. Intanto ciao e grazie mille, Marco.Mai inserire \newcounter in una macro (eccetto casi particolari che non hanno nulla a che fare con questo): stai allocando un nuovo contatore a ogni chiamata di \stampaTutto, sprecando risorse.
`\newcounter{contatoreTemporaneo}
\newcommand{\stampaTutto}{%
\setcounter{contatoreTemporaneo}{1}%
\whiledo{\value{contatoreTemporaneo}<\value{contatore1}}{\stampa{\thecontatoreTemporaneo}\addtocounter{contatoreTemporaneo}{1}}% }` Ciao Enrico -
5 Dicembre 2011 alle 13:31 #67321
-
5 Dicembre 2011 alle 21:00 #67322::
Il ciclo for è implementato dentro il nucleo di plain TeX, anzi plain TeX è quasi tutto contenuto nel nucleo di LaTeX; Ogni cosa è descritta nel TeXbook.Ma a parte questo il ciclo for e il ciclo while sono sostanzialmente la stessa cosa, ecco perché il pacchetto ifthen definisce solo while.
Un informatico mi darebbe dell’ignorante se prendesse alla lettera la mia affermazione di prima; for a while sono due cicli sostanzialmente diversi, ma differiscono solo per il momento in cui viene verificata la condizione, dopo o prima del corpo del ciclo; di fatto tutto sta a definire il test in modo adeguato e poi tutti e due i cicli portano allo stesso risultato.se poi ne test e nel ciclo usi dei contatori TeX scratch, non hai bisogno di definire niente, e quando hai finito il ciclo abbandoni lì i contatori scratch e se vengono usati da altri brani di testo non ha più importanza. Sarebbe diverso se volessi dei cicli ricorsivi,[erché allora dovresti proteggere i tuoi contatori dentro dei gruppi, perché non vengano sovrascritti da altri pezzi di programma. Ma qui, me ne rendo conto, vuol dire scendere a dettagli di programmazione in linguaggio primitivo, che certamente possono essere ottenuti anche con comandi di livello superiore, meno efficaci, ma più comprensibili.
-
6 Settembre 2018 alle 7:12 #67323::
Buongiorno, sto leggendo tutta la documentazione ma non riesco proprio a risolvere il problema:
Ho bisogno di creare un file che mi automatizzi la produzione di relazioni, facciamo l’esempio che debba inserire una serie di immagini chiamate c1 c2 c3 c4 … c24
Esiste un modo di implementare un ciclo per cui
for i=1:25
\includegraphics{c”i”.png}
end for
chiedo gentilmente aiuto, non sono riuscito a farlo in alcun modo.
-
6 Settembre 2018 alle 11:07 #67324::
Il pacchetto ifthen (fa parte dei pacchetti essenziali) definisce il comando \whiledo con la sintassi \whiledo(espressione booleana}{cose da fare}; leggine la documentazione con texdoc ifthen cercando nella pagina 2)Il pacchetto etoolbox definisce invece una macro \whielboolexpression che ha la sintassi \whileboolexprassion{espressione booleana}{cose da fare}
Tutto sommato molto simile al caso precedente. Però l’espressione booleana ha una forma diversa e forse permette una maggiore versatilità.Il cuore di LaTeX contiene invece il comando \@wilenum verifica numerica\do{cose da fare}; mi pare decisamente più comodo solo che c’è di mezzo il carattere @ che non è valido se non nei file di classe e nei moduli di estensione; aggiri il problema in questo modo`\newcommand\wilenum[2]{\csname @whilenum#1\endcsname\do{#2}}` In modo che la sintassi del tuo nuovo comando diventa \whilenum{verificanumerica}{cose da fare}.
In tutti i casi (esemplificherò solo con l’ultimo) devi procedere con questo codice`\documentclass[…]{…]
…
\newcount \MYcontat
\newcommand\whilenum[1]{\unless\ifnum \MYcontat>#1}{\includegraphics[…]{\expandafter c\the\MYcontat}\advance\MYcontat by 1}
…
\begin{document}
…
\MYcontat=1
\whilenum{24}
…
\end{document}`Ovviamante questo è solo un esempio che va adattato alle circostanze; Supponi infatti di avere figure che si chimano c1, c2, c3, …,c24; d1, d2, d3,…,d15; e1, e2, e3, e4; e vie di questo passo; La lettera iniziale di numeri è diversa a secodna dei gruppi, quinaid devi prevedere nell’uso di \whilenum delle cose in più in modo da poter adattare la definizione di whilenum in modo che consenta un maggior numero di parametri; per esempio`\newcommand\whilenum[2]{\unless\ifnum\MYcontat>1}{\includegraphics[…]{\expandafter#2\the\MYcontat}\advance \Mycontat by 1}}`
In sostanza aggiusta le tue definizione a qual che ti pare.
-
6 Settembre 2018 alle 11:34 #67325::
Ringrazio tanto per la risposta celere e precisa. Ad ogni modo per ispirazione divina sono riuscito a compilare un codice che fa il suo lavoro, come esempio ulteriore lo posto:
`\newcounter{icount}
\makeatletter
\newcommand\curvec[1]{%
\setcounter{icount}{0}%
\@whilenum{\value{icount}<#1}\do{% \stepcounter{icount} \section*{Risultato analisi \theicount} \begin{figure}[h!tb] \centering \includegraphics[width=\textwidth,clip]{c\theicount.png} \caption{Curva di capacità analisi \theicount} \label{fig:cc\theicount} \end{figure} \newpage }} \makeatother` e poi dentro il documento: `\curvec{24}`
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.