Re: Copertine con dati variabili

#19734
robitex
Amministratore del forum
    Up
    0
    Down
    ::

    … 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

    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

    Go to top