Problema con un comando con numero variabile di argomenti

  • Creatore
    Topic
  • #84636
    Up
    0
    Down
    ::


    Buon pomeriggio a tutti, raccogliendo spunti da diversi contributi in rete ho composto un comando che accetta un numero variabile di argomenti per comporre una tabella di dati:

    `\documentclass{book}
    \begin{document}
    \makeatletter
    \newcommand{\McsAggiornamenti}{%
    \chapter*{Aggiornamenti\markboth{Aggiornamenti}{}}
    \begin{center}
    \begin{tabular}{|p{0.2\textwidth}|p{0.5\textwidth}|p{0.2\textwidth}|}
    \hline
    \rule{0pt}{12pt}%
    Data & Descrizione intervento & Autore\\
    \hline
    \@McsAggiornamentii % inizia la ricorsione
    }
    \newcommand\@McsAggiornamentii{\@ifnextchar\stopaggiornamenti{\@McsFineAggiornamenti}{\@McsAggiornamentiii}}
    \newcommand\@McsAggiornamentiii[3]{%
    \rule{0pt}{12pt}%
    {#1} & {#2} & {#3}\\
    \hline
    \@McsAggiornamentii % reinizia la ricorsione
    }
    \newcommand\@McsFineAggiornamenti[1]{% l'argomento è \stopaggiornamenti
    \end{tabular}
    \end{center}
    }
    \makeatother

    \McsAggiornamenti
    {Gennaio 2013}{Bla bla bla bla}{A. Verdi}
    {Febbraio 2013}{Bla bla bla bla Bla bla bla bla}{A. Rossi}
    \stopaggiornamenti

    \end{document}`

    Il problema è che alla chiusura della tabella viene prodotta una riga extra vuota dovuta, ho pensato, alla presenza dell’argomento \stopaggiornamenti che non viene “consumato”.

    C’è modo di consumare l’argomento oppure un modo migliore di gestire l’esigenza?

    Grazie

    gA

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 26 filoni di risposte
  • Autore
    Risposte
    • #84637
      robitex
      Amministratore del forum
        Up
        0
        Down
        ::


        Bizzarra richiesta.
        Comunque toglierei subito \chapter dalla definizione del comando…
        Non è meglio definire un ambiente?
        `\documentclass{book}

        \newenvironment{aggiornamenti}{%
        \begin{center}
        \begin{tabular}{|p{0.2\textwidth}|p{0.5\textwidth}|p{0.2\textwidth}|}
        \hline
        Data & Descrizione intervento & Autore\\
        \hline
        }{%
        \hline
        \end{tabular}
        \end{center}
        }

        \begin{document}

        \chapter*{Aggiornamenti}

        \begin{aggiornamenti}
        Gennaio 2013 & Bla bla bla bla & A. Verdi\\
        \hline
        Febbraio 2013 & Bla bla bla bla Bla bla bla bla & A. Rossi\\
        \hline
        Marzo 2013 & Bla bla bla bla Bla bla & B. Gialli\\
        \end{aggiornamenti}

        \end{document}`
        R.

      • #84638
        Up
        0
        Down
        ::


        Perfetto. Grazie mille.

        PS: il richiamo a “chapter” è puramente incidentale

      • #84639
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          Amedeo” post=84061Perfetto. Grazie mille.

          PS: il richiamo a “chapter” è puramente incidentale

          No, non è perfetto…
          Questo è un codice un po’ più vicino a quello che immaginavi:
          `\documentclass{book}

          % altezza minima della riga nella tabella
          \newdimen\hr
          \hr=12pt

          % nuovo ambiente personalizzato
          \newenvironment{aggiornamenti}{%
          \newcommand{\agg}[3]{\rule{0pt}{\hr}##1 & ##2 & ##3\\\hline}
          \begin{center}
          \begin{tabular}{|p{0.2\textwidth}|p{0.5\textwidth}|p{0.2\textwidth}|}
          \hline
          \rule{0pt}{\hr} Data & Descrizione intervento & Autore\\
          \hline
          }{%
          \end{tabular}
          \end{center}
          }

          % test
          \begin{document}

          \chapter*{Aggiornamenti}

          \begin{aggiornamenti}
          \agg{Gennaio 2013}{Bla bla bla bla}{A. Verdi}
          \agg{Febbraio 2013}{Bla bla bla bla Bla bla bla bla}{A. Rossi}
          \agg{Marzo 2013}{Bla bla bla bla Bla bla}{B. Gialli}
          \end{aggiornamenti}

          \end{document}
          `

          R.

        • #84640
          Up
          0
          Down
          ::


          Infatti avevo optato anche io per un comando dedicato ad aggiungere le righe ma non nella modalità suggerita. Grazie mille.

        • #84641
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::

            No, non è perfetto…
            Questo è un codice un po’ più vicino a quello che immaginavi:

            Bravo Roberto, si tratta di senso pratico, anche perché lavorare con al ricorsione dentro una tabella è virtualmente impossibile; ogni cella costituisce ua specie di grupp a se stante; quindi qualunque ricorsione che tu faccia a tabella cominciata si esaurisce dentro al cella dentro al quale è fatta, quindi non c’è prricolo che si riesca a raggiungere la fine in modo corretto.

            Tuttavia vorrei far notare che esiste un comando poco sfruttato che si chiama \arraystretch il cui valore serve per scalare lo \strutt che viene inserito nella prima cella di ogni riga di una tabella, quindi è in grado di spaziare la tabella di quel che si desidera in modo uniforme, senza bisogno i di ricorrere a una misura fissa, come \rule{0pt}{12pt} oppure a \newdimen\hr \hr=12pt; basta dare la ridefinizione, per esempio`\renewcommand\arraystretch{1.5}` e le varie righe risultano distanziate di quel che occorre (di più o di meno a seconda del fattore introdotto); tieni presente che lo \strut (pilastrino) predefinito, componendo a 10pt, è alto 8.4pt e profondo 3.6pt (circa) per u totale di 12pt; moltiplicare queste misure per 1.5 porta le due misure a circa 12.6pt e 5.4pt. Ovviamente si potrebbe scegliere un fattore di 1.4 per la definizione di \arraystretch, ma non è quello il vantaggio; il vantaggio è che si cambia anche la profondità, in modo che i filetti orizzontali non battano contro i discendenti dei caratteri contenuti nella cella; per fare le cose bene con le colonne di tipo p bisognerebbe mettere qualcosa anche alla fine del testo di ciascuna cella di tipo p, perché per impostazione predefinita lo il pilastrino che rende omogenee le altezze delle righe è pensato per tabelle le cui celle contengono una sola riga.

          • #84642
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::


              Avevo intravisto il comando \arraystretch ma non avevo approfondito perché le tabelle le compongo di solito con i filetti orizzontali di booktabs.
              Grazie Claudio.
              R.

            • #84643
              Up
              0
              Down
              ::

              Amedeo” post=84057Buon pomeriggio a tutti, raccogliendo spunti da diversi contributi in rete ho composto un comando che accetta un numero variabile di argomenti per comporre una tabella di dati:

              `\documentclass{book}
              \begin{document}
              \makeatletter
              \newcommand{\McsAggiornamenti}{%
              \chapter*{Aggiornamenti\markboth{Aggiornamenti}{}}
              \begin{center}
              \begin{tabular}{|p{0.2\textwidth}|p{0.5\textwidth}|p{0.2\textwidth}|}
              \hline
              \rule{0pt}{12pt}%
              Data & Descrizione intervento & Autore\\
              \hline
              \@McsAggiornamentii % inizia la ricorsione
              }
              \newcommand\@McsAggiornamentii{\@ifnextchar\stopaggiornamenti{\@McsFineAggiornamenti}{\@McsAggiornamentiii}}
              \newcommand\@McsAggiornamentiii[3]{%
              \rule{0pt}{12pt}%
              {#1} & {#2} & {#3}\\
              \hline
              \@McsAggiornamentii % reinizia la ricorsione
              }
              \newcommand\@McsFineAggiornamenti[1]{% l'argomento è \stopaggiornamenti
              \end{tabular}
              \end{center}
              }
              \makeatother

              \McsAggiornamenti
              {Gennaio 2013}{Bla bla bla bla}{A. Verdi}
              {Febbraio 2013}{Bla bla bla bla Bla bla bla bla}{A. Rossi}
              \stopaggiornamenti

              \end{document}`

              Il problema è che alla chiusura della tabella viene prodotta una riga extra vuota dovuta, ho pensato, alla presenza dell’argomento \stopaggiornamenti che non viene “consumato”.

              C’è modo di consumare l’argomento oppure un modo migliore di gestire l’esigenza?

              Grazie

              gA

              Eviterei questo tipo di approccio. Meglio costruirsi la tabella un pezzo alla volta.
              `\documentclass{book}
              \usepackage{xparse,booktabs,calc,tabularx}

              \ExplSyntaxOn
              \NewDocumentCommand{\McsAggiornamento}{m}
              {
              \keys_set:nn {mcsaggiornamenti} { #1 }
              \amedeo_aggiorna:
              }
              \NewDocumentCommand{\StampaAggiornamenti}{ }
              {
              \begin{center}
              \begin{tabular}{
              p{.3\textwidth-2\tabcolsep}
              p{.5\textwidth-2\tabcolsep}
              p{.2\textwidth-2\tabcolsep}
              }
              \toprule
              Data & Descrizione~intervento & Autore\\
              \midrule
              \tl_use:N \l_amedeo_aggiornamenti_tl
              \bottomrule
              \end{tabular}
              \end{center}
              \tl_clear:N \l_amedeo_aggiornamenti_tl
              }

              \tl_new:N \l_amedeo_aggiornamenti_tl
              \keys_define:nn {mcsaggiornamenti}
              {
              data .tl_set:N = \l__amedeo_data_tl,
              descr .tl_set:N = \l__amedeo_descr_tl,
              autore .tl_set:N = \l__amedeo_autore_tl,
              }
              \cs_new_protected:Npn \amedeo_aggiorna:
              {
              \tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_data_tl
              \tl_put_right:Nn \l_amedeo_aggiornamenti_tl {&}
              \tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_descr_tl
              \tl_put_right:Nn \l_amedeo_aggiornamenti_tl {&}
              \tl_put_right:NV \l_amedeo_aggiornamenti_tl \l__amedeo_autore_tl
              \tl_put_right:Nn \l_amedeo_aggiornamenti_tl {\\}
              }
              \ExplSyntaxOff

              \begin{document}
              \chapter*{Aggiornamenti\markboth{Aggiornamenti}{}}

              \McsAggiornamento{
              data =Gennaio 2013,
              autore=A. Verdi,
              descr =Bla bla bla bla,
              }
              \McsAggiornamento{
              autore=A. Rossi,
              data =Febbraio 2013,
              descr =Bla bla bla bla Bla bla bla bla,
              }

              \StampaAggiornamenti

              \end{document}`
              Ogni aggiornamento ha il suo posto ed è più facile maneggiarli. Non occorre nemmeno un ordine preciso nei dati, visto che si usa una coppia “chiave-valore”.

              Ciao
              Enrico

            • #84644
              robitex
              Amministratore del forum
                Up
                0
                Down
                ::


                …mi ricorda vagamente qualcosa.
                R.

              • #84645
                robitex
                Amministratore del forum
                  Up
                  0
                  Down
                  ::



                  @Enrico
                  ,
                  perché svuotare la variabile tl dove risiede il corpo della tabella?
                  Potrei voler riutilizzare le informazioni delle righe, magari con uno stile di tabella diverso.
                  Comunque sia il codice L3 è molto più leggibile ed elegante di quello a cui siamo abituati.
                  Grazie.
                  R.

                • #84646
                  Up
                  0
                  Down
                  ::

                  robitex” post=84079 @Enrico,
                  perché svuotare la variabile tl dove risiede il corpo della tabella?
                  Potrei voler riutilizzare le informazioni delle righe, magari con uno stile di tabella diverso.
                  Comunque sia il codice L3 è molto più leggibile ed elegante di quello a cui siamo abituati.

                  Perché? Ho pensato che si tratti di informazioni riguardanti una certa parte del documento. Se si dovesse mantenere più di un gruppo di informazioni simili, sarebbe semplice aggiungere un argomanto facoltativo a [tt]\McsAggiornamento[/tt] in modo che si agisca su una particolare token list appropriata.

                  Ciao
                  Enrico

                • #84647
                  Up
                  0
                  Down
                  ::


                  Grazie a tutti per la profusione di proposte.

                  Mi piace molto la soluzione proposta da egreg9 [schema di composizione della tabella con chiavi]; penso, però, che nel caso di utilizzo del medesimo approccio per più tipi di tabelle (es. Aggiornamenti, Allegati, Approvazioni, etc.), occorrerebbe scrivere molto codice, in gran parte simile.

                  Un ultimo commento: ho letto che il package “tabu” supera tutti gli altri precedenti packages. Cambia molto la sintassi? E nel caso la lista degli aggiornamenti fosse molto lunga e andasse oltre la pagina, immagino non sia più utilizzabile la stessa sintassi, giusto?

                • #84648
                  Up
                  0
                  Down
                  ::


                  Dubbio: la ridefinizione del comando \arraystretch così impostata varrebbe, però, per tutte le tabelle, no?

                • #84649
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Sì e no; se la imposti dentro l’ambiente table vale solo per la tabella contenuta in quell’ambiente.

                  • #84650
                    Up
                    0
                    Down
                    ::

                    Amedeo” post=84097Grazie a tutti per la profusione di proposte.

                    Mi piace molto la soluzione proposta da egreg9 [schema di composizione della tabella con chiavi]; penso, però, che nel caso di utilizzo del medesimo approccio per più tipi di tabelle (es. Aggiornamenti, Allegati, Approvazioni, etc.), occorrerebbe scrivere molto codice, in gran parte simile.

                    Un ultimo commento: ho letto che il package “tabu” supera tutti gli altri precedenti packages. Cambia molto la sintassi? E nel caso la lista degli aggiornamenti fosse molto lunga e andasse oltre la pagina, immagino non sia più utilizzabile la stessa sintassi, giusto?

                    Non ti consiglio tabu, per vari motivi.

                    1. La documentazione è illeggibile
                    2. I bachi sono molti
                    3. Dovrebbe uscire una nuova versione (non si sa quando)
                    3. L’autore ha detto esplicitamente, in risposta a una mia domanda riguardo alla compatibilità con la versione precedente, “I don’t care”.

                    Ciò significa che ogni documento che usa ora tabu potrebbe non funzionare più (o dare risultati inaspettati) con la prossima versione.

                    Ciao
                    Enrico

                  • #84651
                    Up
                    0
                    Down
                    ::


                    Ciao a tutti, riprendendo il tema in oggetto e volendo definire un con un numero di parametri superiore a 9 e noto a priori (es. 11), quale è la strada migliore? Alcuni esempi che ho trovato sfruttano la definizione di “variabili” di comodo in cui parcheggiare i valori dei primi 9 argomenti, chiamando quindi un comando a cascata che interpreta i rimenenti parametri ed utilizza le variabili di comodo precedentemente definite. Di seguito la prova che ho fatto:
                    `
                    \documentclass{article}
                    \usepackage[utf8]{inputenc}
                    \usepackage[italian]{babel}
                    \usepackage{calc}
                    \usepackage{tabularx}
                    \usepackage{booktabs}

                    \newcommand\McsTcw[1]{#1\textwidth-2\tabcolsep}

                    \newenvironment{McsTabFive}[9]{%
                    \def\McsTabFiveA{#1}
                    \def\McsTabFiveB{#2}
                    \def\McsTabFiveC{#3}
                    \def\McsTabFiveD{#4}
                    \def\McsTabFiveE{#5}
                    \def\McsTabFiveF{#6}
                    \def\McsTabFiveG{#7}
                    \def\McsTabFiveH{#8}
                    \def\McsTabFiveI{#9}
                    \begin{McsTabFiveP}
                    }{
                    \end{McsTabFiveP}
                    }
                    \newenvironment{McsTabFiveP}[1]{%
                    \begin{small}
                    \begin{center}
                    \begin{tabular}{
                    p{\McsTabFiveB}
                    p{\McsTabFiveD}
                    p{\McsTabFiveF}
                    p{\McsTabFiveH}
                    p{#1}}
                    \toprule
                    {\McsTabFiveA} & {\McsTabFiveC} & {\McsTabFiveE} & {\McsTabFiveG} & {\McsTabFiveI} \\
                    }{%
                    \bottomrule
                    \end{tabular}
                    \end{center}
                    \end{small}
                    }
                    \newcommand\McsRigaTabFive[5]{%
                    \midrule
                    {#1} & {#2} & {#3} & {#4} & {#5} \\
                    }

                    \begin{document}
                    \begin{McsTabFive}{Col1}{\McsTcw{.2}}{Col2}{\McsTcw{.2}}{Col3}{\McsTcw{.2}}{Col4}{\McsTcw{.2}}{Col5}{\McsTcw{.2}}
                    \McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
                    \McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
                    \end{McsTabFive}
                    \end{document}
                    `
                    Di funzionare funziona, ma forse vi sono modi più eleganti che non implichino una programmazione spinta.

                    Grazie come sempre per ogni contributo.

                    a

                  • #84652
                    Up
                    0
                    Down
                    ::

                    Amedeo” post=84860Ciao a tutti, riprendendo il tema in oggetto e volendo definire un con un numero di parametri superiore a 9 e noto a priori (es. 11), quale è la strada migliore? Alcuni esempi che ho trovato sfruttano la definizione di “variabili” di comodo in cui parcheggiare i valori dei primi 9 argomenti, chiamando quindi un comando a cascata che interpreta i rimenenti parametri ed utilizza le variabili di comodo precedentemente definite. Di seguito la prova che ho fatto:
                    `
                    \documentclass{article}
                    \usepackage[utf8]{inputenc}
                    \usepackage[italian]{babel}
                    \usepackage{calc}
                    \usepackage{tabularx}
                    \usepackage{booktabs}

                    \newcommand\McsTcw[1]{#1\textwidth-2\tabcolsep}

                    \newenvironment{McsTabFive}[9]{%
                    \def\McsTabFiveA{#1}
                    \def\McsTabFiveB{#2}
                    \def\McsTabFiveC{#3}
                    \def\McsTabFiveD{#4}
                    \def\McsTabFiveE{#5}
                    \def\McsTabFiveF{#6}
                    \def\McsTabFiveG{#7}
                    \def\McsTabFiveH{#8}
                    \def\McsTabFiveI{#9}
                    \begin{McsTabFiveP}
                    }{
                    \end{McsTabFiveP}
                    }
                    \newenvironment{McsTabFiveP}[1]{%
                    \begin{small}
                    \begin{center}
                    \begin{tabular}{
                    p{\McsTabFiveB}
                    p{\McsTabFiveD}
                    p{\McsTabFiveF}
                    p{\McsTabFiveH}
                    p{#1}}
                    \toprule
                    {\McsTabFiveA} & {\McsTabFiveC} & {\McsTabFiveE} & {\McsTabFiveG} & {\McsTabFiveI} \\
                    }{%
                    \bottomrule
                    \end{tabular}
                    \end{center}
                    \end{small}
                    }
                    \newcommand\McsRigaTabFive[5]{%
                    \midrule
                    {#1} & {#2} & {#3} & {#4} & {#5} \\
                    }

                    \begin{document}
                    \begin{McsTabFive}{Col1}{\McsTcw{.2}}{Col2}{\McsTcw{.2}}{Col3}{\McsTcw{.2}}{Col4}{\McsTcw{.2}}{Col5}{\McsTcw{.2}}
                    \McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
                    \McsRigaTabFive {aaa}{bbb}{ccc}{ddd}{eee}
                    \end{McsTabFive}
                    \end{document}
                    `
                    Di funzionare funziona, ma forse vi sono modi più eleganti che non implichino una programmazione spinta.

                    Grazie come sempre per ogni contributo.

                    a

                    Undici argomenti? Devi contarli e ti ci perdi. Molto meglio una sintassi “chiave-valore”:
                    `\documentclass{article}
                    \usepackage[utf8]{inputenc}
                    \usepackage[italian]{babel}
                    \usepackage{calc}
                    \usepackage{tabularx}
                    \usepackage{booktabs}
                    \usepackage{xparse}

                    \ExplSyntaxOn
                    \keys_define:nn { amedeotab }
                    {
                    col1 .tl_set:N = \l_amedeo_col_i_tl,
                    col2 .tl_set:N = \l_amedeo_col_ii_tl,
                    col3 .tl_set:N = \l_amedeo_col_iii_tl,
                    col4 .tl_set:N = \l_amedeo_col_iv_tl,
                    col5 .tl_set:N = \l_amedeo_col_v_tl,
                    dim1 .tl_set:N = \l_amedeo_colwd_i_tl,
                    dim2 .tl_set:N = \l_amedeo_colwd_ii_tl,
                    dim3 .tl_set:N = \l_amedeo_colwd_iii_tl,
                    dim4 .tl_set:N = \l_amedeo_colwd_iv_tl,
                    dim5 .tl_set:N = \l_amedeo_colwd_v_tl,
                    }
                    \tl_new:N \l_amedeo_tab_contents_tl

                    \NewDocumentEnvironment{ McsTabFive } { m }
                    {
                    \keys_set:nn { amedeotab } { #1 }
                    \begin{center}\small
                    \tl_put_right:Nx \l_amedeo_tab_contents_tl
                    {
                    \exp_not:n { \begin{tabular} }
                    {
                    p{ \dim_eval:n { \l_amedeo_colwd_i_tl \textwidth – 2\tabcolsep } }
                    p{ \dim_eval:n { \l_amedeo_colwd_ii_tl \textwidth – 2\tabcolsep } }
                    p{ \dim_eval:n { \l_amedeo_colwd_iii_tl \textwidth – 2\tabcolsep } }
                    p{ \dim_eval:n { \l_amedeo_colwd_iv_tl \textwidth – 2\tabcolsep } }
                    p{ \dim_eval:n { \l_amedeo_colwd_v_tl \textwidth – 2\tabcolsep } }
                    }
                    }
                    \tl_put_right:Nn \l_amedeo_tab_contents_tl
                    {
                    \toprule
                    \l_amedeo_col_i_tl &
                    \l_amedeo_col_ii_tl &
                    \l_amedeo_col_iii_tl &
                    \l_amedeo_col_iv_tl &
                    \l_amedeo_col_v_tl \\
                    }
                    }
                    {
                    \tl_use:N \l_amedeo_tab_contents_tl
                    \bottomrule
                    \end{tabular}
                    \end{center}
                    }

                    \NewDocumentCommand{\McsRiga}{ mmmmm }
                    {
                    \tl_put_right:Nn \l_amedeo_tab_contents_tl
                    {\midrule #1 & #2 & #3 & #4 & #5 \\}
                    }
                    \ExplSyntaxOff

                    \begin{document}
                    \begin{McsTabFive}{
                    col1=Col1, dim1=.2,
                    col2=Col2, dim2=.2,
                    col3=Col3, dim3=.2,
                    col4=Col4, dim4=.2,
                    col5=Col5, dim5=.2
                    }
                    \McsRiga{aaa}{bbb}{ccc}{ddd}{eee}
                    \McsRiga{aaa}{bbb}{ccc}{ddd}{eee}
                    \end{McsTabFive}
                    \end{document}`
                    Non è poi così difficile, te l’assicuro. La tabella è costruita un pezzo alla volta (le tabelle sono sempre un po’ ostiche) e poi composta tutta alla fine.

                    Ciao
                    Enrico

                  • #84653
                    Up
                    0
                    Down
                    ::


                    Grazie Claudio. Non conosco per niente il package xparse e mi piacerebe approfondire (mi avevi già dato un suggerimento in tal senso per la tabella Aggiornamenti). Ho scaricato xparse.pdf ma è davvero molto tecnico. Sai se c’è una guida più umana che spieghi la sintassi d’uso?

                    Per inciso, ho tagliato e incollato il tuo esempio in un file di prova. Alla compilazione mi segnala un errore alla riga di chiusura della tabella (\end{McsTabFive}): illegal parameter number in definition of \l_exp_tl.1 \end{McsTabFive}

                    a

                  • #84654
                    Up
                    0
                    Down
                    ::

                    Amedeo” post=84896Grazie Claudio. Non conosco per niente il package xparse e mi piacerebe approfondire (mi avevi già dato un suggerimento in tal senso per la tabella Aggiornamenti). Ho scaricato xparse.pdf ma è davvero molto tecnico. Sai se c’è una guida più umana che spieghi la sintassi d’uso?

                    Per inciso, ho tagliato e incollato il tuo esempio in un file di prova. Alla compilazione mi segnala un errore alla riga di chiusura della tabella (\end{McsTabFive}): illegal parameter number in definition of \l_exp_tl.1 \end{McsTabFive}

                    a

                    Claudio?

                    Non ricevo alcun errore. Aggiorna la tua distribuzione TeX e poi riprova.

                    Ciao
                    Enrico

                  • #84655
                    Up
                    0
                    Down
                    ::


                    Scusa Enrico, ho sbagliato nome. La distribuzione Latex sul mio Ubuntu è quella del 2009. Questa serà proverò ad aggiornarla e saprò dire.

                    Come documentazione ho trovato un “paper” piuttosto corposo intitolato LaTeX3 Sources prodotto dal gruppo di progetto LaTeX3. Certo, è un pò avaro di esempi ma vi ho trovato le spiegazioni che cercavo, almeno per orientarmi nel codice che hai suggerito.

                    Grazie

                    a

                  • #84656
                    Up
                    0
                    Down
                    ::

                    Amedeo” post=84899Scusa Enrico, ho sbagliato nome. La distribuzione Latex sul mio Ubuntu è quella del 2009. Questa serà proverò ad aggiornarla e saprò dire.

                    Come documentazione ho trovato un “paper” piuttosto corposo intitolato LaTeX3 Sources prodotto dal gruppo di progetto LaTeX3. Certo, è un pò avaro di esempi ma vi ho trovato le spiegazioni che cercavo, almeno per orientarmi nel codice che hai suggerito.

                    [tt]interface3.pdf[/tt]

                    Ciao
                    Enrico

                  • #84657
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::

                      Amedeo” post=84899Scusa Enrico, ho sbagliato nome. La distribuzione Latex sul mio Ubuntu è quella del 2009. Questa serà proverò ad aggiornarla e saprò dire.


                      @Amedeo
                      , quante vole abbiamo scritto qui sul forum che la distribuzione TeXLive/Debian montata da Ubuntu è normalmente indietro di 2 o 3 anni.

                      Installa una TeX Live vera seguendo le istruzioni del documento texlive-ubuntu.pdf che trovi in rete; non importa se la distribuzione che puoi installare ora è la TeX Live 2012; ma dal 31 marzo scorso è cominciato il periodo di congelamento della distribuzione, per dare il tempo al Team TeX Live di confezionare/impacchettare la versione 2013.

                      Per te la 2012 è già un aggiornamento di 3 anni; poi a luglio ricordati di installare la 2013.

                      La distribuzione TeX Live vera, quella scaricata da CTAN o dai suoi mirro dispone del TeX Live Manager (tlmgr) che permette di eseguire l’upgrade, volendo, tutti i giorni; una volta ogni settimana o ogni 10 giorni è più che sufficiente, e ti accorgerai che ci sono ogni volta una cinquantina di pacchetti di cui eseguire l’upgrade 😯

                      TeX Live sta subendo un rinnovamento così tumultuoso in questi ulti anni che restare indietro di 2 o tre anni vuol dire restare moooolto indietro. Quindi, coraggio; installa la TeX Live vera; sul tuo Linux possono starci entrambe; quella vera per lavorare; quella Debian per soddisfare le dipendneze degli altri pacchetti Debian.

                    • #84658
                      samiel
                      Partecipante
                        Up
                        0
                        Down
                        ::

                        OldClaudio” post=84901 sul tuo Linux possono starci entrambe; quella vera per lavorare; quella Debian per soddisfare le dipendneze degli altri pacchetti Debian.

                        Com’è stato detto più volte anche in questo forum,
                        basta ricorrere ad equivs per non installare la versione Debian
                        e soddisfare comunque le dipendenze senza occupare spazio

                        m

                      • #84659
                        OldClaudio
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          È vero, ma siccome non è scritto nel documento texlive-ubuntu.pdf, che comunque bisogna seguire con cura anche per avere a bordo una sola versione di TeX Live il cui albero sarebbe opportuno che non fosse lo stesso in cui si trova la versione Debian, non aggiungo mai nelle raccomandazioni di usare equivs, perché richiede comunque un utente Linux molto esperto; certo se è molto esperto, lo sa da solo che per le equivalenze puù usare equivs.

                          Ricorda anche che io non sono un utente Linux da quasi 7 anni; quindi quel che conoscevo allora, oggi l’ho dimenticato per mancanza d’esercizio, anche se tengo in piedi una versione Ubuntu virtuale, giusto per averne una sottomano; in realtà la uso solo per aggiornarla, perché preferisco lavorare sui miei due Mac (fisso + portatile) 😉

                        • #84660
                          Up
                          0
                          Down
                          ::


                          Ringrazio tutti per i preziosi consigli e rimbrotti 😀 . Ho installato texlive 2012 ed ora funziona tutto. Per chiudere il topic, con riferimento al codice suggerito da Enrico, i nomi delle diverse variabili utilizzate seguono una certa convenzione che richiama quella utilizzata dal package xparse (e più in generale, credo, da expl3). Ho però notato che questo non è necessario, ovvero posso utilizzare qualunque nome, purchè sintatticamente accettabile (es. \tl_new:N \McsTabFiveCanvas al posto di \tl_new:N \l_amedeo_tab_contents_tl). Vi sono ragioni filologiche per mantenere le convenzioni di expl3 nella nomenclatura di nuove funzioni e variabili?

                          Grazie ancora

                          a

                        • #84661
                          Up
                          0
                          Down
                          ::

                          Amedeo” post=84938Ringrazio tutti per i preziosi consigli e rimbrotti 😀 . Ho installato texlive 2012 ed ora funziona tutto. Per chiudere il topic, con riferimento al codice suggerito da Enrico, i nomi delle diverse variabili utilizzate seguono una certa convenzione che richiama quella utilizzata dal package xparse (e più in generale, credo, da expl3). Ho però notato che questo non è necessario, ovvero posso utilizzare qualunque nome, purchè sintatticamente accettabile (es. \tl_new:N \McsTabFiveCanvas al posto di \tl_new:N \l_amedeo_tab_contents_tl). Vi sono ragioni filologiche per mantenere le convenzioni di expl3 nella nomenclatura di nuove funzioni e variabili?

                          Puoi usare i nomi che vuoi, ma poi non lamentarti che le cose non funzionano. 🙂

                          Nell’ambiente di programmazione è raccomandato di seguire le convenzioni. Il seguito non è tutta la verità, ma una sua buona approssimazione.

                          • Le funzioni (i comandi, detto in altro modo) hanno un prefisso e un nome separati da [tt]_[/tt]; il nome può essere diviso in più parti, sempre separate da [tt]_[/tt]; segue [tt]:[/tt] e la segnatura, cioè una successione di lettere che dicono il genere di argomenti che la funzione si attende.

                          • Le variabili cominciano con [tt]l_[/tt] o con [tt]g_[/tt], seguiti da prefisso e nome e, per finire, il tipo di variabile ([tt]_tl[/tt] per le “token list”, [tt]_bool[/tt] per le variabili booleane, …)

                          • Le costanti hanno la stessa convenzione delle variabili, ma cominciano con [tt]c_[/tt].

                          Le variabili del tipo [tt]l_[/tt] vanno sempre maneggiate con assegnazioni locali, quelle con [tt]g_[/tt] con assegnazioni globali.

                          Segui queste convenzioni.

                          Ciao
                          Enrico

                        • #84662
                          Up
                          0
                          Down
                          ::


                          Ottimo. E’ quello che mi serviva. Grazie

                        • #84663
                          Up
                          0
                          Down
                          ::


                          Curiosità: perchè il \begin{tabular} è inserito in \exp_not:n? Ho visto che funziona anche senza

                      Visualizzazione 26 filoni di risposte
                      • Devi essere connesso per rispondere a questo topic.

                      Go to top