problema tabella ed enumerate

  • Creatore
    Topic
  • #17167
    Up
    0
    Down
    ::


    Ciao a tutti,
    sto cercando di comporre una tabella da inserire alla mia tesi…vi posto il codice che ho scritto

    `\begin{tabular}{|p{10cm}|}
    \hline
    \bfseries CU1 – Azione \\
    \hline
    {\slshape Attori:} x, y\\
    \hline
    {\slshape Pre-condizioni:} – \\
    \hline
    \slshape Scenario principale: \\
    1. x inserisce i parametri \\
    2. x seleziona il documento\\
    \hline
    \slshape Scenari alternativi: \\
    1a. x non inserisce il parametro z\\
    2a. x non seleziona il documento\\
    \hline
    {\slshape Post-condizioni:} y memorizza il documento\\
    \hline
    \end{tabular}\\\\
    `

    in pratica è un piccolo template per tabella di caso d’so (UML).
    Mi piacerebbe che i punti contrassegnati con 1 e 2 (che ora sono hardcoded) fossero gestiti da un “enumerate”, ma all’interno della tabella non lo posso inserire così com’è (ricevo un errore in compilazione)
    ho dato un occhio a questo link e non è niente male, come soluzione…anche se pensavo che ci fosse qualcosa di più semplice (un campo enumerable per tabella?).
    inoltre, preferirei che i campi in questione, oltre che numerati, abbiano un rientro, ad esempio:
    `
    Scenario principale:
    1. x inserisce i parametri
    2. x seleziona il documento
    `

    Chiedo cortesemente un idea in proposito, se possibile.

    Grazie a tutti.
    Ciao.

Visualizzazione 17 filoni di risposte
  • Autore
    Risposte
    • #17168
      DMW
        Up
        0
        Down
        ::


        Basta adattare quella situazione.

        Ciao

        Andrea

      • #17169
        Up
        0
        Down
        ::

        Ciao a tutti,
        sto cercando di comporre una tabella da inserire alla mia tesi…vi posto il codice che ho scritto

        `\begin{tabular}{|p{10cm}|}
        \hline
        \bfseries CU1 – Azione \\
        \hline
        {\slshape Attori:} x, y\\
        \hline
        {\slshape Pre-condizioni:} – \\
        \hline
        \slshape Scenario principale: \\
        1. x inserisce i parametri \\
        2. x seleziona il documento\\
        \hline
        \slshape Scenari alternativi: \\
        1a. x non inserisce il parametro z\\
        2a. x non seleziona il documento\\
        \hline
        {\slshape Post-condizioni:} y memorizza il documento\\
        \hline
        \end{tabular}\\\\
        `

        in pratica è un piccolo template per tabella di caso d’so (UML).
        Mi piacerebbe che i punti contrassegnati con 1 e 2 (che ora sono hardcoded) fossero gestiti da un “enumerate”, ma all’interno della tabella non lo posso inserire così com’è (ricevo un errore in compilazione)
        ho dato un occhio a questo link e non è niente male, come soluzione…anche se pensavo che ci fosse qualcosa di più semplice (un campo enumerable per tabella?).
        inoltre, preferirei che i campi in questione, oltre che numerati, abbiano un rientro, ad esempio:
        `
        Scenario principale:
        1. x inserisce i parametri
        2. x seleziona il documento
        `

        Chiedo cortesemente un idea in proposito, se possibile.

        L’ambiente enumerate ti dà errore perché hai il vizio di chiudere le righe con \\. La soluzione proposta da DMW nell’altro filone è molto interessante e ti consiglio di usarla. La modifico solo leggermente per venire incontro alla tua esigenza successiva di avere etichette particolari:
        `\makeatletter
        \newenvironment{tabenum}[1][]
        {\@minipagetrue
        \begin{enumerate}[leftmargin=*,noitemsep,partopsep=0pt,%
        parsep=0pt,labelindent=1.5em,#1]}
        {\vspace{-\normalbaselineskip}\end{enumerate}}
        \makeatother`
        Dopo aver caricato i pacchetti enumitem (essenziale per l’ambiente tabenum) e booktabs, la tua tabella può diventare
        `\begin{tabular}{p{10cm}}
        \toprule
        \textbf{CU1 — Azione} \\
        \midrule
        \textsl{Attori:} x, y\\
        \midrule
        \textsl{Pre-condizioni:} — \\
        \midrule
        \textsl{Scenario principale:}
        \begin{tabenum}[label=\arabic*.]
        \item x inserisce i parametri
        \item x seleziona il documento
        \end{tabenum}\\
        \midrule
        \textsl{Scenari alternativi:} \\
        \begin{tabenum}[label=\arabic*a.]
        \item x non inserisce il parametro z
        \item x non seleziona il documento
        \end{tabenum}\\
        \midrule
        \textsl{Post-condizioni:} y memorizza il documento\\
        \bottomrule
        \end{tabular}`
        Nota l’uso di \textbf e \textsl, preferibili in questi casi alle dichiarazioni che usavi tu. Come vedi, come argomento opzionale di \begin{tabenum} puoi inserire come viene composta l’etichetta (\arabic* sta per il numero, a cui puoi aggiungere ciò che vuoi). Ho inserito anche la specificazione di “labelindent”, come chiedevi.

        Ciao
        Enrico

      • #17170
        Up
        0
        Down
        ::

        Basta adattare quella situazione.

        Ciao

        Andrea

        Mi dispiace di essere intervenuto proprio mentre lo facevi tu. Quel filone l’ho mancato per via delle ferie 🙂 e la soluzione è, come ho detto, interessante.

        C’è un’altra modifica che forse vale la pena di introdurre: invece di \@minipagetrue, si può passare “topsep=0pt” all’ambiente enumerate: l’effetto di \@minipagetrue è proprio quello di ignorare il valore di \topsep.
        `\newenvironment{tabenum}[1][]
        {\begin{enumerate}[leftmargin=*,noitemsep,partopsep=0pt,topsep=0pt,%
        parsep=0pt,labelindent=1.5em,#1]}
        {\vspace{-\normalbaselineskip}\end{enumerate}}`
        Come vedi, si può dare un argomento opzionale vuoto: l’algoritmo di LaTeX per leggere liste di oggetti separati da virgole ignora eventuali campi vuoti.

        Ciao
        Enrico

      • #17171
        DMW
          Up
          0
          Down
          ::

          Basta adattare quella situazione.

          Ciao

          Andrea

          Mi dispiace di essere intervenuto proprio mentre lo facevi tu. Quel filone l’ho mancato per via delle ferie 🙂 e la soluzione è, come ho detto, interessante.

          Prof., fa’ nulla. Il problema è che ho il vizio di andare troppo ad occhio, un po’ per inesperienza e un po’ per pigrizia, e quindi il mio codice è un po’ sporco. Per questo l’ho tolto, altrimenti funziona bene. E poi noitemsep non sapevo nemmeno che esistesse.

          Si vede che dovrò rileggere la doc. di enumitem.:D

          C’è un’altra modifica che forse vale la pena di introdurre: invece di \@minipagetrue, si può passare “topsep=0pt” all’ambiente enumerate: l’effetto di \@minipagetrue è proprio quello di ignorare il valore di \topsep.
          `\newenvironment{tabenum}[1][]
          {\begin{enumerate}[leftmargin=*,noitemsep,partopsep=0pt,topsep=0pt,%
          parsep=0pt,labelindent=1.5em,#1]}
          {\vspace{-\normalbaselineskip}\end{enumerate}}`
          Come vedi, si può dare un argomento opzionale vuoto: l’algoritmo di LaTeX per leggere liste di oggetti separati da virgole ignora eventuali campi vuoti.

          Non lo sapevo che \@minipagetrue ignorasse \topsep eppure l’ho usato anche in un paio di topic. Però ho preferito non usarlo perché in caso di liste lunghe provoca un overfull vbox.

          Ciao e grazie per la spiegazione

          Andrea

        • #17172
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            [
            Si vede che dovrò rileggere la doc. di enumitem.:D

            Merita davvero: http://www.guit.sssup.it/phpbb/viewtopic.php?t=1840&highlight=enumitem

            Ciao,
            L.

          • #17173
            Up
            0
            Down
            ::

            Basta adattare quella situazione.

            Ciao

            Andrea

            effettivamente era quella l’idea…ma sono un neofita di latex ed è per questo che ho chiesto il vostro parere…

          • #17174
            Up
            0
            Down
            ::

            L’ambiente enumerate ti dà errore perché hai il vizio di chiudere le righe con \\. La soluzione proposta da DMW nell’altro filone è molto interessante e ti consiglio di usarla. La modifico solo leggermente per venire incontro alla tua esigenza successiva di avere etichette particolari:
            `\makeatletter
            \newenvironment{tabenum}[1][]
            {\@minipagetrue
            \begin{enumerate}[leftmargin=*,noitemsep,partopsep=0pt,%
            parsep=0pt,labelindent=1.5em,#1]}
            {\vspace{-\normalbaselineskip}\end{enumerate}}
            \makeatother`
            Dopo aver caricato i pacchetti enumitem (essenziale per l’ambiente tabenum) e booktabs, la tua tabella può diventare
            `\begin{tabular}{p{10cm}}
            \toprule
            \textbf{CU1 — Azione} \\
            \midrule
            \textsl{Attori:} x, y\\
            \midrule
            \textsl{Pre-condizioni:} — \\
            \midrule
            \textsl{Scenario principale:}
            \begin{tabenum}[label=\arabic*.]
            \item x inserisce i parametri
            \item x seleziona il documento
            \end{tabenum}\\
            \midrule
            \textsl{Scenari alternativi:} \\
            \begin{tabenum}[label=\arabic*a.]
            \item x non inserisce il parametro z
            \item x non seleziona il documento
            \end{tabenum}\\
            \midrule
            \textsl{Post-condizioni:} y memorizza il documento\\
            \bottomrule
            \end{tabular}`
            Nota l’uso di \textbf e \textsl, preferibili in questi casi alle dichiarazioni che usavi tu. Come vedi, come argomento opzionale di \begin{tabenum} puoi inserire come viene composta l’etichetta (\arabic* sta per il numero, a cui puoi aggiungere ciò che vuoi). Ho inserito anche la specificazione di “labelindent”, come chiedevi.

            Ciao
            Enrico

            la tua soluzione è molto buona, Enrico, grazie 😉
            un’unica domanda: mi piaceva chiudere verticalmente la tabella, ma modificando \begin{tabular}{p{10cm}} in \begin{tabular}{|p{10cm}|} la tabella risultante è decisamente brutta…infatti c’è una zona di separazione tra le linee orizzontali e quelle verticali…
            secondo te è possibile eliminare questo inestetismo?

            Grazie ancora,
            Ciao.

          • #17175
            Up
            0
            Down
            ::

            un’unica domanda: mi piaceva chiudere verticalmente la tabella, ma modificando \begin{tabular}{p{10cm}} in \begin{tabular}{|p{10cm}|} la tabella risultante è decisamente brutta…infatti c’è una zona di separazione tra le linee orizzontali e quelle verticali…
            secondo te è possibile eliminare questo inestetismo?

            L’inestetismo sono le linee verticali.

            Ciao
            Enrico

          • #17176
            Up
            0
            Down
            ::


            dici? cmq vorrei fare un tabella di quel tipo…non è possibile?

            grazie, ciao.

          • #17177
            Up
            0
            Down
            ::


            Se vuoi fare tabelle brutte, allora ti conviene non leggere la guida di Lapo Mori su come si fanno le tabelle, non usare \midrule e simili, ma sostituire con tutte \hline. In questo modo gli spazi di cui parli dovrebbero sparire.

            Ti hanno dato un codice funzionalissimo e un consiglio molto prezioso… seguilo. Non mettere righe verticali; se ti sembra strano, convinciti.

          • #17178
            Up
            0
            Down
            ::


            Probabilmente avete ragione voi…per me è una concezione nuova e mi devo abituare.
            Per il progetto che ho sviluppato (su cui verte la tesi) ho letto diversi testi di progettazione/modellazione UML ed in nessuno ho visto tabelle di questo genere, perciò ero un pò restio all’idea 🙄

            invece, vorrei aggiungere una domanda al codice postato da Enrico:
            è possibile, in questo punto
            `
            \begin{tabenum}[label=\arabic*a.]
            \item x non inserisce il parametro z
            \item x non seleziona il documento
            \end{tabenum}\\
            `

            inserire solo alcuni elenchi numerati oppure diverse alternative (es. solo 2a oppure 1a,2a,2b)?

            grazie per le delucidazioni,
            ciao.
            [/code]

          • #17179
            Up
            0
            Down
            ::

            Probabilmente avete ragione voi…per me è una concezione nuova e mi devo abituare.
            Per il progetto che ho sviluppato (su cui verte la tesi) ho letto diversi testi di progettazione/modellazione UML ed in nessuno ho visto tabelle di questo genere, perciò ero un pò restio all’idea 🙄

            Probabilmente tutte erano scritte con Microsoft® Word™ o influenzate da precedenti tabelle scritte allo stesso modo.

            invece, vorrei aggiungere una domanda al codice postato da Enrico:
            è possibile, in questo punto
            `\begin{tabenum}[label=\arabic*a.]
            \item x non inserisce il parametro z
            \item x non seleziona il documento
            \end{tabenum}\\ `

            inserire solo alcuni elenchi numerati oppure diverse alternative (es. solo 2a oppure 1a,2a,2b)?

            Dopo la parola chiave “label” devi mettere la rappresentazione dell’etichetta. Però puoi sempre inserire un’etichetta particolare come argomento opzionale a \item
            `\item[2a.] testo`
            Se vuoi un’enumerazione del tipo 1a., 1b., 1c. puoi scrivere
            `\begin{tabenum}[label=1\alph*.]`
            Ciao
            Enrico

          • #17180
            Up
            0
            Down
            ::


            Perfetto!!
            Grazie mille, Enrico 😉

            Probabilmente tutte erano scritte con Microsoft® Word™ o influenzate da precedenti tabelle scritte allo stesso modo.

            potresti avere ragione tu, ma anche i libri? dovrò mandare una mail di protesta alla casa editrice 😀

            Grazie ancora.
            ciao.

          • #17181
            Up
            0
            Down
            ::


            Scusate, ho un “piccolo” problema…ho modificato la tabella sottostante da “tabular” a “tabulary”:

            `\begin{table}[H]
            \centering
            \begin{tabulary}{\textwidth}{L}
            \toprule
            \textbf{CU1 — x}\\
            \midrule
            \textsl{Attori:}\\
            x, y\\
            \midrule
            \textsl{Pre-condizioni:}– \\
            \midrule
            \textsl{Scenario principale:}\\
            \begin{tabenum}[label=\arabic*.]
            \item x
            \item y
            \end{tabenum}
            \midrule
            \textsl{Scenari alternativi:}\\
            \begin{tabenum}[label=\arabic*a.]
            \item x
            \item y
            \end{tabenum}\\
            \midrule
            \textsl{Post-condizioni:} \\
            x\\
            \bottomrule
            \end{tabulary}
            \caption{Caso d'uso 1\label{casouso1}}
            \end{table}`

            ma ricevo il seguente errore: ./cap2.tex:137:Something’s wrong–perhaps a missing \item. \end{tabulary}

            Potreste gentilmente darmi una mano per risolvere il problema?
            Grazie a tutti, ciao.

          • #17182
            Up
            0
            Down
            ::

            Scusate, ho un “piccolo” problema…ho modificato la tabella sottostante da “tabular” a “tabulary”:

            `\begin{table}[H]

            \item y
            \end{tabenum}
            \midrule

            \bottomrule
            \end{tabulary}
            \caption{Caso d'uso 1\label{casouso1}}
            \end{table}`

            ma ricevo il seguente errore: ./cap2.tex:137:Something’s wrong–perhaps a missing \item. \end{tabulary}

            Di certo, se ti dimentichi di finire una riga con il \\, avrai difficoltà. Inoltre tabularx e tabulary hanno a volte problemi. Una tabella deve essere valutata per ciò che è in relazione a come deve apparire nel testo; i sistemi automatici non sempre danno una risposta adeguata.

            In più, scomodare tabulary per una tabella a una colonna mi sembra esagerato:
            `\begin{tabular}{@{}p{.9\columnwidth}@{}}`
            è più che sufficiente.

            Ciao
            Enrico

          • #17183
            Up
            0
            Down
            ::

            `\begin{tabular}{@{}p{.9\columnwidth}@{}}`
            è più che sufficiente.

            Grazie per il suggerimento…potresti però spiegarmi il comando che mi hai suggerito (che ho quotato in alto)?

            Grazie, ciao.

          • #17184
            DMW
              Up
              0
              Down
              ::

              `\begin{tabular}{@{}p{.9\columnwidth}@{}}`
              è più che sufficiente.

              Grazie per il suggerimento…potresti però spiegarmi il comando che mi hai suggerito (che ho quotato in alto)?

              Grazie, ciao.

              Trovi tutto qui
              Pacchetto array.

              Comunque p{.9\columnwidth}, specifica una colonna lunga .9\columnwidth che nel caso di documenti ad una colonna dovrebbe coincidere con \textwidth e \linewidth. Questa colonna sono composte come paragrafi con la cella allineata alla riga a cui appartiene rispetto alla linea di base superiore, simile a \parbox[t]..

              Mentre @{} serve per annullare lo spazio tra le colonne. O meglio @{} specifica che tra le colonne in cui si trova sia composto senza interporre l’usuale spazio tra le colonne. L’usuale spazio è \tabcolsep, se non ricordo male, e vale 6pt.

              L’ho copiato pari pari da breveguida.pdf che ti ho linkato.

              Ciao

              Andrea

            • #17185
              Up
              0
              Down
              ::


              ok, molte grazie per il chiarimento 😉

              Ciao.

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

          Go to top