Formattazione di una tabella secondo i desideri dell’utente

  • Creatore
    Topic
  • #27418
    Up
    0
    Down
    ::


    Prologo: ho sviluppato una applicazione che incrociando i dati tra un’altra applicazione ed un database dovrebbe produrre un documento immediatamente distribuibile via web.

    Il committente ha sollevato alcune riserve, tra le quali la formattazione delle tabelle.
    Ho smanettato un poco e sono giunto a produrre una cosa come questa (scusate se il codice è orribile, ma oggettivamente meglio di così non sono stato in grado di fare):
    `\begin{center}
    \setlength{\tabcolsep}{1pt}%
    \begin{xtabular}{|m{63pt}|m{26.1pt}|m{26.1pt}|} \hline
    \rule[-1.5em]{1pt}{4em}\centering\arraybackslash \textbf{ i} & \centering\arraybackslash \textbf{M\(\mathsf{_{n2}}\)\newline{} [Nm]} & \centering\arraybackslash \textbf {M\(\mathsf{_{a2}}\)\newline{}[Nm]} \\ \cline{1-3}
    \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 1 & \centering\arraybackslash 10 & \centering\arraybackslash 16 \\ \cline{1-3}
    \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 2 & \centering\arraybackslash 12 & \centering\arraybackslash 20 \\ \cline{1-3}
    \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 3 & \centering\arraybackslash 12 & \centering\arraybackslash 20 \\ \cline{1-3}
    \end{xtabular}
    \end{center}`
    Il pilastrino largo 1pt l’ho messo per vedere meglio l’effetto del cambio dei parametri. Con questo sistema la tabella (per lo meno in colonna 1) ha la formattazione e l’aspetto che il cliente vuole.
    Q1: La formattazione funziona bene quasi ovunque, tranne che nelle due celle di testa: non riesco a fare le due righe ‘centrate’. Mi inizia tutto a sinistra. Inoltre se aggiungo un \rule va tutto in malora.
    Q2: Esiste un sistema per mettere il testo al centro di una cella senza fare i salti mortali?

    Grazie a chi vorrà intervenire nella discussione.

    Andrea

Visualizzazione 7 filoni di risposte
  • Autore
    Risposte
    • #27419
      Up
      0
      Down
      ::

      Prologo: ho sviluppato una applicazione che incrociando i dati tra un’altra applicazione ed un database dovrebbe produrre un documento immediatamente distribuibile via web.

      Il committente ha sollevato alcune riserve, tra le quali la formattazione delle tabelle.
      Ho smanettato un poco e sono giunto a produrre una cosa come questa (scusate se il codice è orribile, ma oggettivamente meglio di così non sono stato in grado di fare):
      `\begin{center}
      \setlength{\tabcolsep}{1pt}%
      \begin{xtabular}{|m{63pt}|m{26.1pt}|m{26.1pt}|} \hline
      \rule[-1.5em]{1pt}{4em}\centering\arraybackslash \textbf{ i} & \centering\arraybackslash \textbf{M\(\mathsf{_{n2}}\)\newline{} [Nm]} & \centering\arraybackslash \textbf {M\(\mathsf{_{a2}}\)\newline{}[Nm]} \\ \cline{1-3}
      \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 1 & \centering\arraybackslash 10 & \centering\arraybackslash 16 \\ \cline{1-3}
      \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 2 & \centering\arraybackslash 12 & \centering\arraybackslash 20 \\ \cline{1-3}
      \rule[-1ex]{1pt}{2em}\raggedright\arraybackslash TIPO 3 & \centering\arraybackslash 12 & \centering\arraybackslash 20 \\ \cline{1-3}
      \end{xtabular}
      \end{center}`
      Il pilastrino largo 1pt l’ho messo per vedere meglio l’effetto del cambio dei parametri. Con questo sistema la tabella (per lo meno in colonna 1) ha la formattazione e l’aspetto che il cliente vuole.
      Q1: La formattazione funziona bene quasi ovunque, tranne che nelle due celle di testa: non riesco a fare le due righe ‘centrate’. Mi inizia tutto a sinistra. Inoltre se aggiungo un \rule va tutto in malora.
      Q2: Esiste un sistema per mettere il testo al centro di una cella senza fare i salti mortali?

      Esiste:
      `\newcommand{\centerlistitem}[1]{\begin{tabular}{@{}c@{}}#1\end{tabular}}

      \begin{tabular}{|l|c|c|}
      \hline
      \multicolumn{1}{|c|}{\centerlistitem{\textbf{i}}} &
      \centerlistitem{\textbf{M\(\mathsf{_{n2}}\)} \\ \textbf{[Nm]}} &
      \centerlistitem{\textbf{M\(\mathsf{_{a2}}\)} \\ \textbf{[Nm]}} \\
      \hline
      TIPO 1 & 10 & 16 \\
      \hline
      TIPO 2 & 12 & 20 \\
      \hline
      TIPO 3 & 12 & 20 \\
      \hline
      \end{tabular}`
      Usa puntelli di vario tipo e eventuali spaziature aggiuntive se preferisci che le celle siano più spaziate.

      Ciao
      Enrico

    • #27420
      Up
      0
      Down
      ::


      Mettere una tabella in una cella di tabella non mi era mai venuto in mente…
      Quindi, estendendo il concetto, se mettessi una tabella per ogni cella di tabella, potrei avere la formattazione che voglio, per ogni cella della tabella ‘madre’?

    • #27421
      Up
      0
      Down
      ::


      Mi auto-correggo:

      se mettessi una tabella per ogni cella di tabella

      Va inteso:
      “se mettessi una multicolonna da 1 per ogni cella”

    • #27422
      Up
      0
      Down
      ::


      Ho fatto alcune modifiche ed ho ottenuto (più o meno) quello che desidero:
      `\setlength{\tabcolsep}{2pt}%
      \begin{xtabular}{|m{63pt}|m{26pt}|m{26pt}|}
      \hline
      %%% Intestazione tabella
      \multicolumn{1}{|c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{i}}} &
      \multicolumn{1}{c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{M\(\mathsf{_{n2}}\)} \\ \textbf{[Nm]}}} &
      \multicolumn{1}{c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{M\(\mathsf{_{a2}}\)} \\ \textbf{[Nm]}}} \\
      \hline
      %%% Fine intestazione tabella
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 1} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}10} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}16} \\
      \hline
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 2} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}12} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}20} \\
      \hline
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 3} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}12} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}20} \\
      \hline
      \end{xtabular}`

      Adesso vediamo se riesco ad innestare il tutto nel ‘tritatutto’ che ho messo in piedi…

    • #27423
      Up
      0
      Down
      ::

      Ho fatto alcune modifiche ed ho ottenuto (più o meno) quello che desidero:
      `\setlength{\tabcolsep}{2pt}%
      \begin{xtabular}{|m{63pt}|m{26pt}|m{26pt}|}
      \hline
      %%% Intestazione tabella
      \multicolumn{1}{|c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{i}}} &
      \multicolumn{1}{c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{M\(\mathsf{_{n2}}\)} \\ \textbf{[Nm]}}} &
      \multicolumn{1}{c|}{\rule[-1.5em]{0pt}{4em}\centerlistitem{\textbf{M\(\mathsf{_{a2}}\)} \\ \textbf{[Nm]}}} \\
      \hline
      %%% Fine intestazione tabella
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 1} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}10} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}16} \\
      \hline
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 2} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}12} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}20} \\
      \hline
      \multicolumn{1}{|m{63pt}}{\rule[-1ex]{0pt}{2em}TIPO 3} &
      \multicolumn{1}{|m{26pt}}{\centering\rule[-1ex]{0pt}{2em}12} &
      \multicolumn{1}{|m{26pt}|}{\centering\rule[-1ex]{0pt}{2em}20} \\
      \hline
      \end{xtabular}`

      Adesso vediamo se riesco ad innestare il tutto nel ‘tritatutto’ che ho messo in piedi…

      Ma perché i \multicolumn{1} dove stai usando la specifica di colonna già data?

      Ciao
      Enrico

    • #27424
      Up
      0
      Down
      ::

      Ma perché i \multicolumn{1} dove stai usando la specifica di colonna già data?

      Ciao
      Enrico

      Perché altrimenti la larghezza della colonna non viene mantenuta: vedi la mia tabella (sopra, in versione ‘fancy’) e quella da te proposta.

      A proposito: sapresti dirmi perché le righe non sono allineate?

      Ciao

    • #27425
      Up
      0
      Down
      ::

      Ma perché i \multicolumn{1} dove stai usando la specifica di colonna già data?

      Ciao
      Enrico

      Perché altrimenti la larghezza della colonna non viene mantenuta: vedi la mia tabella (sopra, in versione ‘fancy’) e quella da te proposta.

      A proposito: sapresti dirmi perché le righe non sono allineate?

      Do una risposta riguardo all’ultima faccenda: di tabelle così orribili, sinceramente, non intendo occuparmi. If you are upset about this, you shouldn’t be (TeXbook, p. 238). Sbagli a posizionare lo specificatore in \multicolumn; i caratteri | vanno specificati nella colonna precedente (eccetto l’eventuale specificatore | all’inizio). Quindi per la prima colonna va bene \multicolumn{1}{|c|}, per le altre va \multicolumn{1}{c|}

      Ciao
      Enrico

    • #27426
      Up
      0
      Down
      ::

      Do una risposta riguardo all’ultima faccenda: di tabelle così orribili, sinceramente, non intendo occuparmi. If you are upset about this, you shouldn’t be (TeXbook, p. 238). Sbagli a posizionare lo specificatore in \multicolumn; i caratteri | vanno specificati nella colonna precedente (eccetto l’eventuale specificatore | all’inizio). Quindi per la prima colonna va bene \multicolumn{1}{|c|}, per le altre va \multicolumn{1}{c|}

      Ciao
      Enrico

      Sul fatto che la tabella sia orribile, concordo. Ma come dovreste tutti ormai sapere, non faccio questo per l’arte, ma per la pagnotta.
      Grazie per la dritta, in effetti non avevo notato il disallineamento dei ‘|’.

      Andrea

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

Go to top