Mischiare e invertire modo macro e modo ambiente

  • Creatore
    Topic
  • #74141
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Ciao a tutti,
      l’altro giorno mi serviva un modo per rendere una voce di computo metrico composta con una tabella. Ho cominciato a scrivere il codice tutto esplicitamente per poi assemblarlo con i primi comandi.
      Ne è venuto fuori un codice in controtendenza, ovvero una sintassi che prevede di usare macro al posto di ambienti definite tramite ambienti.

      L’apertura è basata su l’ambiente tabular:
      \startvoce{descrizione}{unità di misura}

      Poi ho una macro \voce che compone il testo in una cella della tabella come ambiente minipage
      \voce{descrizione lunga quanto si vuole ma non troppo}

      Poi ho alcune macro per inserire prezzi e misure:
      \misure{descr misure}{numero}
      \prezzo{importo}

      La chiusura è:
      \endvoce

      ecco una traccia dell’implementazione:
      `\def\startvoce#1#2{% l'ambiente tabular verrà chiuso più tardi da \endvoce
      \begin{tabular}{clr}
      \toprule
      N. & #1 & \si{#2}\\% richiede siunitx
      \midrule
      }
      \def\voce#1{\begin{minipage}{110mm}#1\end{minipage}}

      \def\endvoce{\bottomrule\end{tabular}}
      `
      il fatto è che funziona a dimostrazione del fatto che la programmazione TeX è sempre ricca di sorprese.
      `\startvoce{Travi in legno lamellare}{m^3}
      \voce{
      Travi di orditura principale di copertura realizzate in legno lamellare
      GL24 di sezione rettangolare ecc ecc
      }
      \misura{Falda lato strada}{2.120}
      \prezzo{500.00}
      \endvoce`
      Simpatico no?
      R.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #74142
        Up
        0
        Down
        ::

        robitex” post=73032Ciao a tutti,
        l’altro giorno mi serviva un modo per rendere una voce di computo metrico composta con una tabella. Ho cominciato a scrivere il codice tutto esplicitamente per poi assemblarlo con i primi comandi.
        Ne è venuto fuori un codice in controtendenza, ovvero una sintassi che prevede di usare macro al posto di ambienti definite tramite ambienti.

        L’apertura è basata su l’ambiente tabular:
        \startvoce{descrizione}{unità di misura}

        Poi ho una macro \voce che compone il testo in una cella della tabella come ambiente minipage
        \voce{descrizione lunga quanto si vuole ma non troppo}

        Poi ho alcune macro per inserire prezzi e misure:
        \misure{descr misure}{numero}
        \prezzo{importo}

        La chiusura è:
        \endvoce

        ecco una traccia dell’implementazione:
        `\def\startvoce#1#2{% l'ambiente tabular verrà chiuso più tardi da \endvoce
        \begin{tabular}{clr}
        \toprule
        N. & #1 & \si{#2}\\% richiede siunitx
        \midrule
        }
        \def\voce#1{\begin{minipage}{110mm}#1\end{minipage}}

        \def\endvoce{\bottomrule\end{tabular}}
        `
        il fatto è che funziona a dimostrazione del fatto che la programmazione TeX è sempre ricca di sorprese.
        `\startvoce{Travi in legno lamellare}{m^3}
        \voce{
        Travi di orditura principale di copertura realizzate in legno lamellare
        GL24 di sezione rettangolare ecc ecc
        }
        \misura{Falda lato strada}{2.120}
        \prezzo{500.00}
        \endvoce`
        Simpatico no?
        R.

        Dov’è la sorpresa? 🙂 E dov’è diverso questo da un modo “tradizionale”?
        `\newenvironment{tabellona}[2]
        {\begin{tabular}{clr}
        \toprule
        N. & #1 & \si{#2}\\% richiede siunitx
        \midrule}
        {\bottomrule\end{tabular}}`
        E il tuo input sarebbe:
        `\begin{tabellona}{Travi in legno lamellare}{m^3}
        \voce{
        Travi di orditura principale di copertura realizzate in legno lamellare
        GL24 di sezione rettangolare ecc ecc
        }
        \misura{Falda lato strada}{2.120}
        \prezzo{500.00}
        \end{tabellona}`
        Non capisco perché mischiare nomi che indicano cose nettamente diverse, mi riferisco a “voce”.

        Ciao
        Enrico

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

          egreg9″ post=73043

          Ciao a tutti,
          l’altro giorno mi serviva un modo per rendere una voce di computo metrico composta con una tabella. Ho cominciato a scrivere il codice tutto esplicitamente per poi assemblarlo con i primi comandi.
          Ne è venuto fuori un codice in controtendenza, ovvero una sintassi che prevede di usare macro al posto di ambienti definite tramite ambienti.

          L’apertura è basata su l’ambiente tabular:
          \startvoce{descrizione}{unità di misura}

          Poi ho una macro \voce che compone il testo in una cella della tabella come ambiente minipage
          \voce{descrizione lunga quanto si vuole ma non troppo}

          Poi ho alcune macro per inserire prezzi e misure:
          \misure{descr misure}{numero}
          \prezzo{importo}

          La chiusura è:
          \endvoce

          ecco una traccia dell’implementazione:
          `\def\startvoce#1#2{% l'ambiente tabular verrà chiuso più tardi da \endvoce
          \begin{tabular}{clr}
          \toprule
          N. & #1 & \si{#2}\\% richiede siunitx
          \midrule
          }
          \def\voce#1{\begin{minipage}{110mm}#1\end{minipage}}

          \def\endvoce{\bottomrule\end{tabular}}
          `
          il fatto è che funziona a dimostrazione del fatto che la programmazione TeX è sempre ricca di sorprese.
          `\startvoce{Travi in legno lamellare}{m^3}
          \voce{
          Travi di orditura principale di copertura realizzate in legno lamellare
          GL24 di sezione rettangolare ecc ecc
          }
          \misura{Falda lato strada}{2.120}
          \prezzo{500.00}
          \endvoce`
          Simpatico no?
          R.

          Dov’è la sorpresa? 🙂 E dov’è diverso questo da un modo “tradizionale”?
          `\newenvironment{tabellona}[2]
          {\begin{tabular}{clr}
          \toprule
          N. & #1 & \si{#2}\\% richiede siunitx
          \midrule}
          {\bottomrule\end{tabular}}`
          E il tuo input sarebbe:
          `\begin{tabellona}{Travi in legno lamellare}{m^3}
          \voce{
          Travi di orditura principale di copertura realizzate in legno lamellare
          GL24 di sezione rettangolare ecc ecc
          }
          \misura{Falda lato strada}{2.120}
          \prezzo{500.00}
          \end{tabellona}`
          Non capisco perché mischiare nomi che indicano cose nettamente diverse, mi riferisco a “voce”.

          Ciao
          Enrico

          Sai che lo so.
          Trovo solo simpatico che nella definizione di una macro (quella di \voce riportata non è completa), può starci anche un \begin{qualcosa} senza che poi ci sia \end{qualcosa}.
          Almeno, non ci avevo mai fatto caso.
          😆
          Grazie.
          Ciao.
          R.

        • #74144
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::

            Trovo solo simpatico che nella definizione di una macro (quella di \voce riportata non è completa), può starci anche un \begin{qualcosa} senza che poi ci sia \end{qualcosa}.
            Almeno, non ci avevo mai fatto caso.

            Roberto, è esattamente quello che fa \newenvironment: definisce due comandi: \ambiente e \endambiente, che non hanno nulla da inviidiare al tuo \startambiente e \endambiente; In LaTeX quando usi un ambiente usando i debiti \begin e \end rispettivamente apri un gruppo e chiudi un gruppo, oltre a impostare le cose per verificare che \end chuda esattamente l’ambiente aprto con il corrispondente \begin. Prova: \a[ri una ,omipage con \minipage e chiudila con \endminipage; funziona benissimo; ma se dentro questo non-ambiente minipage (non-ambiente perché non hai usato \begin e \end) definisci qualche cosa o assegni un valore a qualche registro, questo valore rimane anche dopo il comando \endminpage, perché il tutto non è stato rinchiuso dentro un gruppo. Be’ qualche volta potrebbe essere utile evitare il gruppo, e può essere utile all’interno di altri ambienti o programmando macro e ambienti per file .sty o per file .cls, ma di solito è una funzionalità estremamente utile.

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

              OldClaudio” post=73049

              Trovo solo simpatico che nella definizione di una macro (quella di \voce riportata non è completa), può starci anche un \begin{qualcosa} senza che poi ci sia \end{qualcosa}.
              Almeno, non ci avevo mai fatto caso.

              Roberto, è esattamente quello che fa \newenvironment: definisce due comandi: \ambiente e \endambiente, che non hanno nulla da inviidiare al tuo \startambiente e \endambiente; In LaTeX quando usi un ambiente usando i debiti \begin e \end rispettivamente apri un gruppo e chiudi un gruppo, oltre a impostare le cose per verificare che \end chuda esattamente l’ambiente aprto con il corrispondente \begin. Prova: \a[ri una ,omipage con \minipage e chiudila con \endminipage; funziona benissimo; ma se dentro questo non-ambiente minipage (non-ambiente perché non hai usato \begin e \end) definisci qualche cosa o assegni un valore a qualche registro, questo valore rimane anche dopo il comando \endminpage, perché il tutto non è stato rinchiuso dentro un gruppo. Be’ qualche volta potrebbe essere utile evitare il gruppo, e può essere utile all’interno di altri ambienti o programmando macro e ambienti per file .sty o per file .cls, ma di solito è una funzionalità estremamente utile.

              Verissimo quello che dici Claudio,
              il fatto è che il linguaggio che l’utente usa, per LaTeX ci sono i concetti base di macro e di ambiente, induce una forma strutturata di pensiero che manipola tali costrutti. Nel momento in cui ci accorgiamo che il linguaggio in realtà è implementato con altra logica rimaniamo sorpresi.
              Almeno è l’impressione divertita che ho avuto io del caso.

              R.

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

          Go to top