Parametri Annidati

  • Creatore
    Topic
  • #7892
    Up
    0
    Down
    ::


    salve a tutti ^_^ anche io, come molti altri, mi sono finalmente avvicinato a questo meraviglioso strumento, e da bravo programmatore mi ci sto trovando molto bene ^_^

    ma veniamo al problema:

    io sto scrivendo un documento che contiene molte tabelle e grafici tutti molto simili, volevo quindi crearmi un nuovo ambiente per non star sempre a riscrivere le solite 10 righe per ogni tipo di tabella che di solito scrivo cosi:

    \begin{table}[!ht]
    \newcommand{\opLine}[4]{(#1) & \{#2\} & \{#3\} & #4\\}
    \centering
    \begin{tabular}{ l l l l }
    \hline
    \multicolumn{4}{c}{\textbf{titoloTabella}} \\
    \hline
    \hline
    \opLine{robba}{robba}{altrarobba}{ancorarobba}
    …..
    \opLine{robba}{robba}{altrarobba}{ancorarobba}
    \hline
    \end{tabular}
    \end{table}

    mentre mi piacerebbe scrivere cosi:

    \begin{tabellaMia}
    \opLine{robba}{robba}{altrarobba}{ancorarobba}
    …..
    \opLine{robba}{robba}{altrarobba}{ancorarobba}
    \end{tabellaMia}

    per fare cio mi sono creato un nuovo ambiente fatto cosi:

    \newenvironment{tabellaRollfoward}
    {
    \begin{table}[!ht]
    \centering
    \begin{tabular}{ l l l }
    \hline
    \multicolumn{3}{c}{\textbf{titolotabella}} \\
    \hline
    \hline
    }
    {
    \hline
    \end{tabular}
    \end{table}
    }

    e questo compila e funziona perfettamente, ma non mi mette a disposizione il comando opLine che mi fa fatica ridefinirmi tutte le volte localmente, se provo ad inserire la riga:

    \newcommand{\opLine}[3]{(#1) & \{#2\} & #3\\}

    al suo posto mi da un errore nei parametri, probabilmente riconosce i vari #n come parametri dell’ambiente, che non ha, e quindi implode, mentre in realta sono parametri della opLine. c’e’ un modo per dirgli che sono parametri della opLine e non dell’ambiente? e’ possibile creare un comando che funziona soltanto in un particolare ambiente?

    grazie a tutti anticipatamente.

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

      salve a tutti ^_^ anche io, come molti altri, mi sono finalmente avvicinato a questo meraviglioso strumento, e da bravo programmatore mi ci sto trovando molto bene ^_^

      ma veniamo al problema:

      io sto scrivendo un documento che contiene molte tabelle e grafici tutti molto simili, volevo quindi crearmi un nuovo ambiente per non star sempre a riscrivere le solite 10 righe per ogni tipo di tabella che di solito scrivo cosi:`\begin{table}[!ht]
      \newcommand{\opLine}[4]{(#1) & \{#2\} & \{#3\} & #4\\}
      \centering
      \begin{tabular}{ l l l l }
      \hline
      \multicolumn{4}{c}{\textbf{titoloTabella}} \\
      \hline
      \hline
      \opLine{robba}{robba}{altrarobba}{ancorarobba}
      …..
      \opLine{robba}{robba}{altrarobba}{ancorarobba}
      \hline
      \end{tabular}
      \end{table}`mentre mi piacerebbe scrivere cosi:`\begin{tabellaMia}
      \opLine{robba}{robba}{altrarobba}{ancorarobba}
      …..
      \opLine{robba}{robba}{altrarobba}{ancorarobba}
      \end{tabellaMia}`per fare cio mi sono creato un nuovo ambiente fatto cosi:`\newenvironment{tabellaRollfoward}
      {
      \begin{table}[!ht]
      \centering
      \begin{tabular}{ l l l }
      \hline
      \multicolumn{3}{c}{\textbf{titolotabella}} \\
      \hline
      \hline
      }
      {
      \hline
      \end{tabular}
      \end{table}
      }`e questo compila e funziona perfettamente, ma non mi mette a disposizione il comando opLine che mi fa fatica ridefinirmi tutte le volte localmente, se provo ad inserire la riga:`\newcommand{\opLine}[3]{(#1) & \{#2\} & #3\\}`al suo posto mi da un errore nei parametri, probabilmente riconosce i vari #n come parametri dell’ambiente, che non ha, e quindi implode, mentre in realta sono parametri della opLine. c’e’ un modo per dirgli che sono parametri della opLine e non dell’ambiente? e’ possibile creare un comando che funziona soltanto in un particolare ambiente?

      `
      \newenvironment{tabellaRollfoward}[3]
      {
      \begin{table}[!ht]
      \newcommand{\OpLine}[#2]{#3}
      \centering
      \begin{tabular}{ l l l }
      \hline
      \multicolumn{3}{c}{\textbf{#1}} \\
      \hline
      \hline
      }
      {
      \hline
      \end{tabular}
      \end{table}
      }`Puoi usarlo così:`\begin{tabellaRollfoward}{Titolo tabella}{3}{$#1$ & $#2$ & #3\\}
      \OpLine{a}{b}{c}
      \end{tabellaRollfoward}`Il parametro numero uno è il titolo della tabella, il numero due è il numero di argomenti, il tre è ciò che devi fare ai vari elementi. In realtà, se tutto ciò che vuoi è di trattare alcune colonne come composte in modo matematico, c’è molto meglio a disposizione: il pacchetto array.`\usepackage{array}
      \newcolumntype{L}{>{$}l<{$}}` In questo modo`\begin{tabular}{LLl}`produce una tabella con le prime due colonne in modo matematico e allineate a sinistra. Ciao Enrico

    • #7894
      Up
      0
      Down
      ::


      non c’e’ un modo per non dovergli plassare lo schema con i parametri, e metterglielo direttamente dentro la definizione dell’ambiente? ho provato a metterglieli come default ma prova ad interpretarli lo stesso…

    • #7895
      Up
      0
      Down
      ::

      non c’e’ un modo per non dovergli plassare lo schema con i parametri, e metterglielo direttamente dentro la definizione dell’ambiente? ho provato a metterglieli come default ma prova ad interpretarli lo stesso…

      Era il mio sospetto: che tutte le tabelle avessero lo stesso trattamento. Non hai pensato allora a definirti \OpLine fuori dall’ambiente? Ma, sinceramente, ritengo di gran lunga superiore il metodo che ti ho proposto; non vedo molta differenza fra scrivere
      `\Opline{uno}{due}{tre}`e`uno & due & tre \\`
      Comunque il modo c’è:`\newenvironment{pippo}{
      \newcommand{\pluto}[2]{Grazie a ##1, ##2}
      }{}
      \begin{pippo}
      \pluto{te}{Enrico}
      \end{pippo}`Perché qui ci voglia ## e nell’altro caso un solo # è per questioni TeXniche.

      Ciao
      Enrico

    • #7896
      Up
      0
      Down
      ::


      il fatto e’ che ho 3 o 4 tipi di tabella, ogni tipo di tabella avrebbe un suo opLine con numeri diversi di parametri, definendoli fuori avrei dovuto mettere nomi diversi, tipo rollfowardLine, rollbackLine eccetera o ridefinire tutte le volte lo stesso. in questo modo mi creo l’ambiente e uso direttamente il comando giusto, ogni tipo di tabella, ovviamente, l’ho descritto con un ambiente diverso

      questa cosa mi serviva per non sta a fa sempre copia e incolla che ci perdo troppo tempo, e utilizzare il comando mi permette piu malleabilita, se vado a cambiare la formattazione del comando la cambio a tutte le righe ad esempio.

      comunque con il doppio ## funziona, riconosce che sono parametri della newcommand ansiche della newenviroment.

      grazie mille ^_^

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

Go to top