- Questo topic ha 15 risposte, 6 partecipanti ed è stato aggiornato l'ultima volta 12 anni, 1 mese fa da
cfiandra.
-
CreatoreTopic
-
23 Luglio 2014 alle 6:43 #95507::
Buongiorno a tutti,
sto modificando un file .sty che ha il compito di creare una pagina usando istruzioni invocate in un file .tex. Avrei bisogno di creare una cosa del genere: vorrei un comando diciamo \affiliazione, che possa essere chiamato un numero di volte arbitrario, tale per cui il risultato finale siabla bla bla affiliazione1, affiliazione2, affiliazione3, …, affiliazione(n-1) ed affiliazioneNIo vorrei che nel file .tex basti scrivere
`\affiliazione{affiliazione1}
\affiliazione{affiliazione2}
…
\affiliazione{affiliazioneN}`
ma non ho la più pallida idea di che cosa io debba mettere nel file .sty affinché questo avvenga! Qualcuno potrebbe aiutarmi o quantomeno indirizzarmi?
Grazie a tutti anticipatamente
-
CreatoreTopic
-
AutoreRisposte
-
-
23 Luglio 2014 alle 7:50 #95508::
Domanda interessante, ma ambigua.
Non si capisce se vuoi u comando \affiliazione per costruire una lista di affiliazioni concatenate, che poi con un unico comando puoi stampare tutte assieme, oppure se vuoi creare un “vettore” di affiliazioni da indicare e stampare con una espressione simile a quella che usi per recuperare l’n-esimo elemento di un matrice di una sola colonna.In ogni caso per creare la lista o per creare gli elementi del vettore, devi usare un comando e per stamprne il contenuto devi usarne un altro; non puoi usare lo stesso comando per scopi diversi.
Se, quindi, spieghi meglio che cosa vuoi fare, forse si può trovare una soluzione.
-
23 Luglio 2014 alle 7:59 #95509::
Ciao, la sintassi di LaTeX non vuole,solitamente, numeri all’interno dei nomi dei comandi, infatti se provi a compilare l’esempio qui sotto ottieni un errore.
`
\documentclass{article}
\newcommand{\affiliazione1}{ciao}
\begin{document}
\affiliazione1
\end{document}`Potresti usare il pacchetto etoolbox:
`
\documentclass{article}
\usepackage{etoolbox}
\csdef{affiliazione1}{ciao}
\begin{document}
\csuse{affiliazione1}
\end{document}`Potrebbero esserci però problemi di fragilità dei comandi.
Nel tuo .sty vuoi definire tutti i vari \affiliazionenn? Quel numero non potrebbe essere usato come argomento del comando \affiliazione? Più ci dici, più è facile aiutarti.Fran
-
23 Luglio 2014 alle 8:35 #95510::
In effetti la tua domanda è decisamente ambigua e necessita di più dettagli.Cosa succede quando hai 2 autori di cui il primo ha 2 affiliazioni e il secondo 3? Come li stampi? Quando si è in fase di progetto devi prima pensare a tutta una serie di casi ed eccezioni per essere il più generale possibili. Poi, quando lo si fatto, in genere si scopre che manca sempre qualcosa 😉
Non so quale sia il tuo scopo, non avendo quei dettagli, ma io cercherei di tenere le cose il più semplici possibile, per esempio un comando [\tt]\affiliazione[/tt] per autore in cui il parametro sia la lista di affiliazioni. Se ce n’è una bene, se ce ne sono di più si itera sulla lista.
Ciao
Claudio
-
23 Luglio 2014 alle 8:36 #95511::
Gero27″ post=95123Buongiorno a tutti,
sto modificando un file .sty che ha il compito di creare una pagina usando istruzioni invocate in un file .tex. Avrei bisogno di creare una cosa del genere: vorrei un comando diciamo \affiliazione, che possa essere chiamato un numero di volte arbitrario, tale per cui il risultato finale siabla bla bla affiliazione1, affiliazione2, affiliazione3, …, affiliazione(n-1) ed affiliazioneNIo vorrei che nel file .tex basti scrivere
`\affiliazione{affiliazione1}
\affiliazione{affiliazione2}
…
\affiliazione{affiliazioneN}`
ma non ho la più pallida idea di che cosa io debba mettere nel file .sty affinché questo avvenga! Qualcuno potrebbe aiutarmi o quantomeno indirizzarmi?
Grazie a tutti anticipatamenteCiao,
si può fare molto meglio di così:
il comando
`
\sequence{affiliazione}
`
potrebbe generare il testo:
`affiliazione1, affiliazione2, affiliazione3, …, affiliazione(n-1) ed affiliazioneN`Una bazzecola con LaTeX3…
R.
-
23 Luglio 2014 alle 13:35 #95512::
Gero27″ post=95123Buongiorno a tutti,
sto modificando un file .sty che ha il compito di creare una pagina usando istruzioni invocate in un file .tex. Avrei bisogno di creare una cosa del genere: vorrei un comando diciamo \affiliazione, che possa essere chiamato un numero di volte arbitrario, tale per cui il risultato finale siabla bla bla affiliazione1, affiliazione2, affiliazione3, …, affiliazione(n-1) ed affiliazioneNIo vorrei che nel file .tex basti scrivere
`\affiliazione{affiliazione1}
\affiliazione{affiliazione2}
…
\affiliazione{affiliazioneN}`
ma non ho la più pallida idea di che cosa io debba mettere nel file .sty affinché questo avvenga! Qualcuno potrebbe aiutarmi o quantomeno indirizzarmi?
Grazie a tutti anticipatamenteBe’, non è molto chiaro come vuoi adoperare il comando. Questa però può essere l’idea:
`
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\affiliazione}{m}
{
\seq_gput_right:Nn \g_gero_affiliations_seq { #1 }
}
\NewDocumentCommand{\stampaaffiliazioni}{ }
{
\seq_use:Nnnn \g_gero_affiliations_seq { ~e~ } { ,~ } { ~e~ }
}
\seq_new:N \g_gero_affiliations_seq
\ExplSyntaxOff
`Ciao
Enrico
-
23 Luglio 2014 alle 16:20 #95513::
Grazie a tutti per le numerose risposte; mi scuso per la poca chiarezza e ci riprovo.OldClaudio” post=95129Non si capisce se vuoi u comando \affiliazione per costruire una lista di affiliazioni concatenate, che poi con un unico comando puoi stampare tutte assieme, oppure se vuoi creare un “vettore” di affiliazioni da indicare e stampare con una espressione simile a quella che usi per recuperare l’n-esimo elemento di un matrice di una sola colonna.
Direi che quello che vorrei è esattamente la seconda opzione, come forse sarà più chiaro tra poco!
franen” post=95133la sintassi di LaTeX non vuole,solitamente, numeri all’interno dei nomi dei comandi
Lo so bene; il comando nel mio esempio era semplicemente \affiliazione, coi numeri indicavo le varie istanze (quello che viene stampato, un modo per non inventarmene alcune).
cfiandra” post=95140Cosa succede quando hai 2 autori di cui il primo ha 2 affiliazioni e il secondo 3? Come li stampi? Quando si è in fase di progetto devi prima pensare a tutta una serie di casi ed eccezioni per essere il più generale possibili. Poi, quando lo si fatto, in genere si scopre che manca sempre qualcosa 😉
Non succede, perché non è fra i miei casi… a dir la verità non ho neanche mai parlato di autore 🙂 l’”autore” è sempre unico, mentre le “affiliazioni” possono essere in numero variabile.
robitex” post=95141si può fare molto meglio di così:
il comando
`
\sequence{affiliazione}
`
potrebbe generare il testo:
`affiliazione1, affiliazione2, affiliazione3, …, affiliazione(n-1) ed affiliazioneN`Una bazzecola con LaTeX3…
R.Grazie perché non conoscevo il comando \sequence, ma a occhio direi che non è quello che fa al caso mio: io non voglio stampare tante volte la parola “affiliazione”, ma tante affiliazioni differenti!
Dunque, innanzitutto si parla di un frontespizio per le tesi di dottorato di un’università. Tra poco toccherà a me, e siccome quand’ho preso in mano quel modello ho avuto i brividi, sto tentando di riscriverlo; ma, ahimè, le mie conoscenze di TeX son (molto) limitate.
Il file che costruisce il frontespizio è, diciamo, Title_page.sty. Il suo interno, ridotto al minimo che può rendere l’idea è del tipo:
`\long\def\specialite#1{\gdef\@specialite{#1}}
\long\def\auteur#1{\gdef\@auteur{#1}}
\long\def\directeur#1{\gdef\@directeur{#1}}Thèse\\
Spécialité~: \@specialite\\
Présentée par \@auteur\\
Thèse dirigée par \@directeur`
Poi ci sarà un file, diciamo Tesi.tex, che conterrà
`\usepackage{Title_page}
\specialite{Controllo di sistemi in rete}
\auteur{un povero dottorando}
\directeur{l'uomo nero}
` Ora, io vorrei aggiungere in Title_page.sty un comando che funzioni come gli altri, ma che possa esser chiamato più volte, diciamo \affiliation; in modo tale che (modificando ovviamente opportunamente anche la seconda parte di tale file, in modo da costruire le righe che voglio aggiungere), aggiungendo in Tesi.tex una serie di comandi tipo
`\affiliazione{istituto di ricerca}
\affiliazione{laboratorio}
\affiliazione{scuola dottorale}`
mi ritrovi ad avere un frontespizio che recita:Thèse
Spécialité : Controllo di sistemi in rete
Présentée par un povero dottorando
Thèse dirigée par l’uomo nero
préparée au sein de l’istituto di ricerca, du laboratorio et de l’école doctorale scuola dottorale.Immagino mi debba costruire un vettore di affiliazioni e tirarle fuori a una a una, ma non ho idea di come possa fare una cosa del genere!
-
23 Luglio 2014 alle 16:44 #95514
-
23 Luglio 2014 alle 18:25 #95515::
franen” post=95166IN questo caso l’idea di Enrico va benissimo: con il comando \affiliazione aggiungi, ogni volta che lo usi, un elemento a una sequence di LaTeX3. Poi metti \stampaaffiliazioni laddove vuoi che le affiliazioni vengano stampate.
Fran
Immaginavo che il suo commento fosse la soluzione 😀 ma a dir la verità non son nemmeno sicuro di aver capito come si usa quindi ho preferito non commentarlo… ci provo, per intanto grazie!
-
24 Luglio 2014 alle 4:41 #95516::
Gero27″ post=95163
Cosa succede quando hai 2 autori di cui il primo ha 2 affiliazioni e il secondo 3? Come li stampi? Quando si è in fase di progetto devi prima pensare a tutta una serie di casi ed eccezioni per essere il più generale possibili. Poi, quando lo si fatto, in genere si scopre che manca sempre qualcosa 😉
Non succede, perché non è fra i miei casi… a dir la verità non ho neanche mai parlato di autore 🙂 l’”autore” è sempre unico, mentre le “affiliazioni” possono essere in numero variabile.
Ok!
Gero27″ post=95163Dunque, innanzitutto si parla di un frontespizio per le tesi di dottorato di un’università. Tra poco toccherà a me, e siccome quand’ho preso in mano quel modello ho avuto i brividi, sto tentando di riscriverlo; ma, ahimè, le mie conoscenze di TeX son (molto) limitate.
Il file che costruisce il frontespizio è, diciamo, Title_page.sty. Il suo interno, ridotto al minimo che può rendere l’idea è del tipo:
`\long\def\specialite#1{\gdef\@specialite{#1}}
\long\def\auteur#1{\gdef\@auteur{#1}}
\long\def\directeur#1{\gdef\@directeur{#1}}Thèse\\
Spécialité~: \@specialite\\
Présentée par \@auteur\\
Thèse dirigée par \@directeur`
Poi ci sarà un file, diciamo Tesi.tex, che conterrà
`\usepackage{Title_page}
\specialite{Controllo di sistemi in rete}
\auteur{un povero dottorando}
\directeur{l'uomo nero}
` Ora, io vorrei aggiungere in Title_page.sty un comando che funzioni come gli altri, ma che possa esser chiamato più volte, diciamo \affiliation; in modo tale che (modificando ovviamente opportunamente anche la seconda parte di tale file, in modo da costruire le righe che voglio aggiungere), aggiungendo in Tesi.tex una serie di comandi tipo
`\affiliazione{istituto di ricerca}
\affiliazione{laboratorio}
\affiliazione{scuola dottorale}`
mi ritrovi ad avere un frontespizio che recita:Thèse
Spécialité : Controllo di sistemi in rete
Présentée par un povero dottorando
Thèse dirigée par l’uomo nero
préparée au sein de l’istituto di ricerca, du laboratorio et de l’école doctorale scuola dottorale.Immagino mi debba costruire un vettore di affiliazioni e tirarle fuori a una a una, ma non ho idea di come possa fare una cosa del genere!
Ecco perché il mio consiglio precedente era sbagliato: per me “affiliazione” è l’università, non il laboratorio o la scuola di dottorato. La mia personalissima opinione è che per passare un argomento ad un comando sotto forma di lista, quella lista deve contenere un’informazione omogenea. Se per affiliazione intendiamo il nome dell’università, sono d’accordo. Una persona può essere affiliata a un numero variabile di università. Se per affiliazione intendiamo università, istituto di ricerca, dipartimento, gruppo, edificio, piano, numero di ufficio e sedia se condividi l’ufficio, allora non sono d’accordo. Se dovessi fare io questo tipo di lavoro, mi definirei un comando per ciascun elemento.
Poi fai tu. Chiaramente, però, affinché tu possa stampare:
préparée au sein de l’istituto di ricerca, du laboratorio et de l’école doctorale scuola dottorale.
non potrai usare semplicemente la macro [tt]\stampaaffiliazioni[/tt], ma dovrai accedere ai vari campi separatamente.
Ciao
Claudio
-
24 Luglio 2014 alle 11:31 #95517::
Sono tecnicamente d’accordo, infatti il tutto è stato incapsulato in comandi opportuni (non entro nei dettagli dei vincoli del caso specifico, come si sa spesso le soluzioni sono imposte anche da questo).In ogni caso, adesso tutto funziona alla perfezione eccetto un piccolo particolare: all’inizio del mio file Title_page.sty ho le righe
`\RequirePackage{ifxetex, xparse}
\ifxetex\RequirePackage{fontspec}\else\RequirePackage[utf8]{inputenc}\fi
\AtBeginDocument{
\ifx\colorbox\undefined\RequirePackage{color}\fi
\ifx\includegraphics\undefined\RequirePackage{graphicx}\fi}`
che funzionavano perfettamente fino all’aggiunta del pacchetto xparse, ma ora mi danno questo errore:
`! Missing number, treated as zero.
c
l.59 \makeTitlePage`
Questo si verifica solo se chiamo il pacchetto xparse e il pacchetto graphicx all’interno del costrutto condizionale! Senza xparse tutto funziona alla meraviglia, e dicendo semplicemente `\RequirePackage{graphicx}` pure! Non è gravissimo, potrei optare per questa seconda soluzione e sapere che graphicx è già chiamato, ma qualcuno sa dirmi perché ciò succede??
-
24 Luglio 2014 alle 12:01 #95518::
Gero27″ post=95178Sono tecnicamente d’accordo, infatti il tutto è stato incapsulato in comandi opportuni (non entro nei dettagli dei vincoli del caso specifico, come si sa spesso le soluzioni sono imposte anche da questo).
In ogni caso, adesso tutto funziona alla perfezione eccetto un piccolo particolare: all’inizio del mio file Title_page.sty ho le righe
`\RequirePackage{ifxetex, xparse}
\ifxetex\RequirePackage{fontspec}\else\RequirePackage[utf8]{inputenc}\fi
\AtBeginDocument{
\ifx\colorbox\undefined\RequirePackage{color}\fi
\ifx\includegraphics\undefined\RequirePackage{graphicx}\fi}`
che funzionavano perfettamente fino all’aggiunta del pacchetto xparse, ma ora mi danno questo errore:
`! Missing number, treated as zero.
c
l.59 \makeTitlePage`
Questo si verifica solo se chiamo il pacchetto xparse e il pacchetto graphicx all’interno del costrutto condizionale! Senza xparse tutto funziona alla meraviglia, e dicendo semplicemente `\RequirePackage{graphicx}` pure! Non è gravissimo, potrei optare per questa seconda soluzione e sapere che graphicx è già chiamato, ma qualcuno sa dirmi perché ciò succede??Un paio di osservazioni.
1) Non capisco l’utilità del test `\ifxetex\RequirePackage{fontspec}\else\RequirePackage[utf8]{inputenc}\fi` Infatti, il pacchetto inputenc funziona benissimo con il motore di compilazione xelatex. Forse quel test ti serve per utilizzare fontspec o babel.
2) Suppondendo che etoolbox sia caricato, non sarebbe meglio fare i test `\AtBeginDocument{
\ifx\colorbox\undefined\RequirePackage{color}\fi
\ifx\includegraphics\undefined\RequirePackage{graphicx}\fi}` [tt]\AtEndPreamble[/tt]? Così, in caso, i pacchetti vengono caricati nel preambolo e non all’interno del documento.Ciao
Claudio
-
24 Luglio 2014 alle 12:09 #95519::
cfiandra” post=951791) Non capisco l’utilità del test `\ifxetex\RequirePackage{fontspec}\else\RequirePackage[utf8]{inputenc}\fi` Infatti, il pacchetto inputenc funziona benissimo con il motore di compilazione xelatex. Forse quel test ti serve per utilizzare fontspec o babel.
2) Suppondendo che etoolbox sia caricato, non sarebbe meglio fare i test `\AtBeginDocument{
\ifx\colorbox\undefined\RequirePackage{color}\fi
\ifx\includegraphics\undefined\RequirePackage{graphicx}\fi}` [tt]\AtEndPreamble[/tt]? Così, in caso, i pacchetti vengono caricati nel preambolo e non all’interno del documento.Ciao
ClaudioCiao, grazie per entrambe perché in effetti toccano dei dubbi che avevo. Riguardo alla prima hai ragione, inputenc funziona con XeLaTeX, ma non il contrario se non sbaglio, quindi in un caso evito di chiamare anche inputenc inutilmente, e nell’altro il test è inevitabile, no?
Riguardo alla seconda, hehe, semplicemente non conoscevo \AtEndPreamble! E necessita di questo etoolbox?
In ogni caso queste osservazioni non son legate all’errore che ottengo, vero?
-
25 Luglio 2014 alle 4:49 #95520::
Gero27″ post=95183Riguardo alla prima hai ragione, inputenc funziona con XeLaTeX, ma non il contrario se non sbaglio, quindi in un caso evito di chiamare anche inputenc inutilmente, e nell’altro il test è inevitabile, no?
Niente di più falso: `\documenclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}\begin{document}
à é ì ò ù
\end{document}
` compila con pdflatex e dimmi se hai errori (ovviamente imposta il tuo editor per lavorare con utf8 se non è la sua impostazione di default).Gero27″ post=95183Riguardo alla seconda, hehe, semplicemente non conoscevo \AtEndPreamble! E necessita di questo etoolbox?
Sì.
Gero27″ post=95183In ogni caso queste osservazioni non son legate all’errore che ottengo, vero?
In qualche modo sono legate: il tuo codice non è corretto, perciò se oltre ad aver caricato xparse, hai tolto graphicx dal documento mi sembra normale che tu ottenga degli errori. Senza avere queste informazioni si può solo tirare ad indovinare. Se crei un esempio minimo magari lo possiamo provare.
Ciao
Claudio
-
25 Luglio 2014 alle 5:24 #95521::
@cfiandra, pdflatex e fontenc sono incompatibili di nascita, e se ci provi tu a compilare quell’esempio lo vedi. La ragione è semplice: pdflatex e tutti i programmi che si basano sui motori tex, etex, pedftex sono solo 8-bit aware, mentre solo quelli basati su xetex e luatex, e altri meno comuni, sono unicodeaware.Invece per quel che riguarda babel e polyglossia, xelatex accetta anche babel oltre a polyglossia, mentre pdflatex accetta solo babel.
Quelo strano \ifXeTeX usato dal nostro @gero27 ha un senso, ma non mette in opposizione le cose per l’uno o l’altro programma di compilazione in modo corrette; nell rame treu deve mettere fontenc, magari qualche impostazione epr i font opentype, e, volendo, polyglossia con l’impostazione er le lingue che vuole usare; nel ramo false deve mettere inputenc, fontenc con qualche opzione per font a 8 bit, e babel con le opzioni per le lingue che vuole usare.
Si dice che sia opportuno usare babel preferibile rispetto a polyglossia, quando l’altrnativa esiste; personalmente ritengo che polyglossia offra qualcosa di più con il suo sistema di specificare le lingue, ognuna con le sue opzioni; sempre personalmente mi rammarico che polyglossia non sia usabile con pdflates o che babel non disponga dello stesso odo per specificare le lingue; recentemente babel è stato molto esteso, a se devi usare una lingua con diverse configurazioni e metodi di sillabazione, babel richided artifizi notevoli per creare gli attributi o i modificatori in modo corretto. Ma questo è OT rispetto al problea di @gero27.
-
25 Luglio 2014 alle 5:30 #95522::
OldClaudio” post=95207 @cfiandra, pdflatex e fontenc sono incompatibili di nascita, e se ci provi tu a compilare quell’esempio lo vedi. La ragione è semplice: pdflatex e tutti i programmi che si basano sui motori tex, etex, pedftex sono solo 8-bit aware, mentre solo quelli basati su xetex e luatex, e altri meno comuni, sono unicodeaware.
😕
Io parlo di [tt]fontenc[/tt], non [tt]fontspec[/tt]. Mi è chiaro che [tt]fontspec[/tt] non può essere utilizzato con pdflatex 😉
Comunque l’assunto, non corretto, di Gero riguardava [tt]inputenc[/tt] che chiaramente funziona con qualsiasi compilatore.😳 Ok ho detto un’idiozia!!
Ciao
Claudio
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.