- Questo topic ha 9 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 17 anni, 9 mesi fa da
egreg9.
-
CreatoreTopic
-
10 Dicembre 2007 alle 11:28 #19726::
Salve,
vorrei abbreviarmi il lavoro di redazione di una cinquantina di “copertine”.In ciascuna di esse vi sono informazioni grafiche e testuali fisse, ed informazioni testuali che cambiano, relative a tre campi testuali indipendenti.
E’ un po come voler fare un mail merge per inviare la stessa lettera a molti destinatari.
Cosa mi suggerireste?
Grazie.
-
CreatoreTopic
-
AutoreRisposte
-
-
10 Dicembre 2007 alle 12:27 #19727::
Salve,
vorrei abbreviarmi il lavoro di redazione di una cinquantina di “copertine”.In ciascuna di esse vi sono informazioni grafiche e testuali fisse, ed informazioni testuali che cambiano, relative a tre campi testuali indipendenti.
E’ un po come voler fare un mail merge per inviare la stessa lettera a molti destinatari.
Cosa mi suggerireste?
Una volta che hai costruito nel modo che ti aggrada la copertina, prendi il codice relativo, al posto degli elementi variabili ci piazzi #1, #2 e #3 e metti tutto nella definizione del comando \copertina:
`\newcommand{\copertina}[3]{%
}`
Dunque i parametri #1, #2 e #3 stanno al posto degli elementi variabili. Comporrai le copertine con il seguente input:
`\copertina{aaa}{bbb}{ccc}
\copertina{ddd}{eee}{fff}
…`
Ciao
Enrico
-
11 Dicembre 2007 alle 13:50 #19728::
Grazie mille.Funziona molto bene.
Ho solo fatto un passo in più mettendo in un file separato i dati sorgenti riportati in esempio quì sotto.
Rimangono così nettamente separati i dati dalla loro vista (le copertine).
Qualora volessi cambiarne l’aspetto dovrei intervenire su questo secondo file tex.`…
\copertina{aaa}{bbb}{ccc}
\copertina{ddd}{eee}{fff}
…`Faccio un’altra domanda:
il numero dei campi utilizzabili nella definizione del comando \copertina è illimitato?Grazie ancora.
-
11 Dicembre 2007 alle 13:58 #19729
-
11 Dicembre 2007 alle 14:35 #19730::
Faccio un’altra domanda:
il numero dei campi utilizzabili nella definizione del comando \copertina è illimitato?Il modo per definire una macro che abbia più di nove parametri, per esempio 16, è il seguente:
`\newcommand{\miocomando}[9]{%
\def\miouno{#1}%
\def\miodue{#2}%
\def\miotre{#3}%
\def\mioquattro{#4}%
\def\miocinque{#5}%
\def\miosei{#6}%
\def\miosette{#7}%
\def\miootto{#8}%
\def\mionove{#1}%
\miocomandobis}
\newcommand{\miocomandobis}[7]{%
}`
Nel codice userai \mioper indicare uno dei primi nove argomenti, #1, #2 e così via per uno dei successivi sette argomenti. Puoi richiamare proprio dando i sedici argomenti:
`\miocomando{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}{13}{14}{15}{16}`
In apparenza sono sedici argomenti a \miocomando, in realtà sono nove argomenti a \miocomando e sette a \miocomandobis. Però è un modo pesante di lavorare, ci si perde a contare gli argomenti e le graffe: più di tre o quattro è sconsigliabile.Un altro modo, allora, è di usare “macro chiave”: scrivi la tua definizione di \copertina senza argomenti; dove prima usavi #1 eccetera, sostituisci con un comando il cui nome richiami la funzione:
`\newcommand{\copertina}{%
\xtitolo
}`
Poi definisci il comando
`\newcommand{\titolo}[1]{\def\xtitolo{#1}}`
e fai in modo analogo per gli altri campi che ti servono, diciamo \autore e \anno. Adesso puoi comporre la copertina scrivendo
`\titolo{Un titolo}
\autore{A. U. Tore}
\anno{2035}
\copertina`
È il modo usato da LaTeX per le intestazioni dei documenti con \maketitle. In questo modo hai il vantaggio che puoi “vedere” meglio i vari campi e anche scriverli in ordine sparso, se preferisci. Potrebbe essere indicato anche un metodo “misto”: \copertina con un certo numero di argomenti (per esempio numerici) e comandi per i campi testuali.Ciao
Enrico
-
4 Gennaio 2008 alle 9:23 #19731::
Sto creando la lista dei documenti corrispondenti alle singole copertine emesse.Ho pensato di utilizzare il file dati.tex in cui vi sono unicamente i comandi \copertina{a}{b}{c} dove a, b, c sono i campi variabili, utilizzando un secondo file (parallelo a quello che genera le copertine), dove ho inserito il comando \input{dati} all’interno di un ambiente supertabular:
Ecco la ridefinizione del comando copertina:
`\newcommand{\copertina}[3]{%
\texttt{#3} & #2 & \textbf{#1}\\
\midrule}`ed ecco il suo utilizzo:
`\begin{supertabular}{cp{8cm}|c}
\input{dati}
\end{supertabular}`nel file dati.tex vi sono le linee:
`…
\copertina{uno}{relazione uno}{originale uno}
\copertina{due}{relazione due}{originale due}
\copertina{tre}{relazione tre}{originale tre}
…
`il problema è che la tabella va oltre il margine inferiore, mentre nella pagina successiva ricompare ma da un numero di riga successivo.
Penso che ciò sia dovuto a difficoltà di calcolo dei punti in cui spezzare la tabella.
Ma l’idea è molto buona perchè con un unico file di dati in cui una riga corrisponde ad un documento, ottengo sia le copertine che un elenco complessivo perfettamente corrispondente.
Grazie.
PS. Colgo l’occasione per ringraziare delle meravigliose risposte.
-
4 Gennaio 2008 alle 10:57 #19732::
Sto creando la lista dei documenti corrispondenti alle singole copertine emesse.
Ho pensato di utilizzare il file dati.tex in cui vi sono unicamente i comandi \copertina{a}{b}{c} dove a, b, c sono i campi variabili, utilizzando un secondo file (parallelo a quello che genera le copertine), dove ho inserito il comando \input{dati} all’interno di un ambiente supertabular:
Ecco la ridefinizione del comando copertina:
`\newcommand{\copertina}[3]{%
\texttt{#3} & #2 & \textbf{#1}\\
\midrule}`ed ecco il suo utilizzo:
`\begin{supertabular}{cp{8cm}|c}
\input{dati}
\end{supertabular}`nel file dati.tex vi sono le linee:
`…
\copertina{uno}{relazione uno}{originale uno}
\copertina{due}{relazione due}{originale due}
\copertina{tre}{relazione tre}{originale tre}
…
`il problema è che la tabella va oltre il margine inferiore, mentre nella pagina successiva ricompare ma da un numero di riga successivo.
Penso che ciò sia dovuto a difficoltà di calcolo dei punti in cui spezzare la tabella.
Ma l’idea è molto buona perchè con un unico file di dati in cui una riga corrisponde ad un documento, ottengo sia le copertine che un elenco complessivo perfettamente corrispondente.
Usa longtable.
Ciao
Enrico
-
4 Gennaio 2008 alle 11:11 #19733
-
19 Novembre 2008 alle 23:12 #19734::
… Un altro modo, allora, è di usare “macro chiave”: scrivi la tua definizione di \copertina senza argomenti; dove prima usavi #1 eccetera, sostituisci con un comando il cui nome richiami la funzione:
`\newcommand{\copertina}{%
\xtitolo
}`
Poi definisci il comando
`\newcommand{\titolo}[1]{\def\xtitolo{#1}}`
e fai in modo analogo per gli altri campi che ti servono, diciamo \autore e \anno. Adesso puoi comporre la copertina scrivendo
`\titolo{Un titolo}
\autore{A. U. Tore}
\anno{2035}
\copertina`
È il modo usato da LaTeX per le intestazioni dei documenti con \maketitle. In questo modo hai il vantaggio che puoi “vedere” meglio i vari campi e anche scriverli in ordine sparso, se preferisci. Potrebbe essere indicato anche un metodo “misto”: \copertina con un certo numero di argomenti (per esempio numerici) e comandi per i campi testuali.Ciao
EnricoBuonasera a tutti.
Ho ripreso questa soluzione per produrre un documento composto da schede con dati testuali variabili.
Bene.Tuttavia i campi che fanno parte della scheda sono molti, veramente molti (… circa una dozzina quindi certamente troppi tasti da digitare), quindi non potevo non pensare a qualcosa che mi abbreviasse il compito: un comando che generi la macro chiave che a sua volta generi il comando interno.
Chiaro. Una volta che la sfida è stata lanciata non ci si può ritirare.
Dunque mi sono messo all’opera, e quando ormai stavo rinunciando sono riuscito nell’intento.Ho consultato la guida del Prof. Gregorio sulla programmazione in LaTeX a pag. 117 (Definizioni dentro definizioni), dove si spiega come TeX legge un doppio #, la pagina 81 sulla modalità con cui vengono determinati gli argomenti di un comando, e la pagina 93 dove si spiega come definire un comando dato il testo del nome.
Ok. Con il codice che segue, un campo può essere costruito con un unico comando (il nome delle macro interne è il nome del campo preceduto dalla lettera x):
`\makecmd{nomecampo}
…
\newcommand{\esempio}{Ecco l'esempio: \xnomecampo}
…
% da usare così:
\nomecampo{valore primo}
\esempio\nomecampo{valore secondo}
\esempio
%ecc
`ecco il codice:`\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}% ditemi se questa non è literate programming… modestamente
\newcommand{\makexcmd}[1]{%
\expandafter\def\csname #1\endcsname##1{%
\expandafter\def\csname x#1\endcsname{##1}}
}\makexcmd{indirizzo}
\makexcmd{citta}
% comodo non è vero?% ecco il comando per generare l'oggetto contenente campi variabili
\newcommand{\esempio}{%
Questo è un esempio di indirizzo: \xindirizzo.E questa è la città corrispondente: \xcitta.
}\begin{document}
\indirizzo{Via Genova, 222}
\citta{Milano}
\esempio\bigskip
\indirizzo{Via Milano, 222}
\citta{Genova}
\esempio\end{document}
`… buon proseguimento.
Ciao.Nota: approfitto dell’ora tarda per permettere al post di sfuggire al prof. eh eh eh
-
19 Novembre 2008 alle 23:32 #19735::
Buonasera a tutti.
Ho ripreso questa soluzione per produrre un documento composto da schede con dati testuali variabili.
Bene.Tuttavia i campi che fanno parte della scheda sono molti, veramente molti (… circa una dozzina quindi certamente troppi tasti da digitare), quindi non potevo non pensare a qualcosa che mi abbreviasse il compito: un comando che generi la macro chiave che a sua volta generi il comando interno.
Chiaro. Una volta che la sfida è stata lanciata non ci si può ritirare.
Dunque mi sono messo all’opera, e quando ormai stavo rinunciando sono riuscito nell’intento.Ho consultato la guida del Prof. Gregorio sulla programmazione in LaTeX a pag. 117 (Definizioni dentro definizioni), dove si spiega come TeX legge un doppio #, la pagina 81 sulla modalità con cui vengono determinati gli argomenti di un comando, e la pagina 93 dove si spiega come definire un comando dato il testo del nome.
Ok. Con il codice che segue, un campo può essere costruito con un unico comando (il nome delle macro interne è il nome del campo preceduto dalla lettera x):
`\makecmd{nomecampo}
…
\newcommand{\esempio}{Ecco l'esempio: \xnomecampo}
…
% da usare così:
\nomecampo{valore primo}
\esempio\nomecampo{valore secondo}
\esempio
%ecc
`ecco il codice:`\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}% ditemi se questa non è literate programming… modestamente
\newcommand{\makexcmd}[1]{%
\expandafter\def\csname #1\endcsname##1{%
\expandafter\def\csname x#1\endcsname{##1}}
}\makexcmd{indirizzo}
\makexcmd{citta}
% comodo non è vero?% ecco il comando per generare l'oggetto contenente campi variabili
\newcommand{\esempio}{%
Questo è un esempio di indirizzo: \xindirizzo.E questa è la città corrispondente: \xcitta.
}\begin{document}
\indirizzo{Via Genova, 222}
\citta{Milano}
\esempio\bigskip
\indirizzo{Via Milano, 222}
\citta{Genova}
\esempio\end{document}
`… buon proseguimento.
Ciao.Nota: approfitto dell’ora tarda per permettere al post di sfuggire al prof. eh eh eh
Ora tarda? 😆
Il codice è interessante. Ma
`\makeatletter
\newcommand{\makexcmd}[1]{\@namedef{#1}##1{\@namedef{x#1}{##1}}}
\makeatother`
è più breve! In effetti \@namedef{#1} si espande in
`\expandafter\def\csname#1\endcsname`
Ciao
Enrico
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.