So ändern Sie das Layout einer Longtable mit pgfplotstable

So ändern Sie das Layout einer Longtable mit pgfplotstable

Um eine lange Reihe von Industrieberichten mit komplizierten langen Tabellen vorzubereiten, kombiniere ich Codebeispiele, die ich auf der Site gefunden habe, und das sieht vielversprechend aus. In meinem Bereich müssen Zellen trotz der normalerweise empfohlenen Vorgehensweise durch vertikale und horizontale Linien getrennt werden. Im MWE (sehr vereinfacht im Vergleich zum tatsächlichen Bedarf) habe ich immer noch mit zwei Problemen zu kämpfen: Es gibt keine horizontale Linie zwischen den Datenzeilen 1 und 2. Außerdem konnte ich keine vertikale Linie zwischen den beiden Spalten setzen (und es müssen noch weitere hinzugefügt werden). Ich würde mich auch über jeden Tipp freuen, um den Code (mir ist nicht klar, wo ich die Spalten am besten formatieren und beispielsweise eine horizontale Linie zwischen jeder Zeile definieren kann) und/oder das visuelle Erscheinungsbild zu verbessern. Die vertikalen Linien sind im MWE nicht durchgehend.

\documentclass[a5paper]{article}    
\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{colortbl}
\usepackage{array}
\usepackage[top=8 cm,bottom=8cm]{geometry} %For demo purposes
\usepackage{filecontents}

\begin{filecontents}{data1.csv}
column1,column2
5001,102
5002,75
5003,115
5004,45
5005,97
5036,110
5037,77
5038,147
5039,89
5040,62
5041,160
5042,102
\end{filecontents}%

\begin{document}

%%% Code from Dr. Christian Feuersanger ------ for not using headers.----------------------
\pgfkeysifdefined{/pgfplots/table/output empty row/.@cmd}{
    % upcoming releases offer this more convenient option:
    \pgfplotstableset{
        empty header/.style={
          every head row/.style={output empty row},
        }
    }
}{
    % versions up to and including 1.5.1 need this:
    \pgfplotstableset{
        empty header/.style={
            typeset cell/.append code={%
                \ifnum\pgfplotstablerow=-1 %
                    \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
                \fi
            }
        }
    }
}
%%%-----------------------------------------------


\newcommand\MyHead[2]{%
  \multicolumn{1}{|> {\centering}m{#1}|}{#2}
}

\pgfplotstabletypeset[
    empty header,
    outfile = test.dat,
    begin table=\begin{longtable},
     every first column/.style ={%
     column type/.add={|}{}
     },
         every last column/.style ={%
     column type/.add={}{|}
    },
          every head row/.style={output empty row},
    every nth row={1}{after row=\midrule},
 every first row/.append style={before row={%
    \caption{This is  a long table spreading over several pages.}%
    \label{tab:DataTable}\\\toprule
\MyHead{4cm} {column with long header} & \MyHead{4cm} {Other column with very long header}  \\ 
\hline    
    \endfirsthead
    %
    \multicolumn{2}{c}%
    {{\bfseries Table \thetable\ Continued from previous page}} \\
    \toprule 
    %
\MyHead{4cm} {column with long header} & \MyHead{4cm} {Other column with very long header}  \\ 
\hline    
    \endhead
    %
    \midrule \multicolumn{2}{r}{{Continued on next page}} \\ \bottomrule
    \endfoot
    %
    \midrule
    \multicolumn{2}{r}{{End of table}} \\ \bottomrule
    \endlastfoot
    }},%
    %
    end table=\end{longtable},
   col sep=comma,
    string type,
    ]{data1.csv}


\end{document}

Antwort1

Beginnen wir mit der einfachen Seite Ihrer Frage(n):

  • Wenn Sie vertikale Linien verwenden möchten, verwenden Sie nicht die Regeln von \booktabs. Verwenden Sie stattdessen\hline
  • für vertikale Linien schlage ich Folgendes vor:

    every odd column/.style ={% column type/.add={|}{} }, every even column/.style ={% column type/.add={|}{} }, every last column/.style ={% column type/.add={}{|} },

  • nach meinem Geschmack ist es besser zu sagen every nth row={1}{before row=\hline}. Bei diesem Text unter der Tabelle (Fortsetzung auf der nächsten Seite) gibt es keine Zeile darunter.

Vollständiger Code:

\documentclass[a5paper]{article}
\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{colortbl}
\usepackage{array}
\usepackage[top=8 cm,bottom=8cm]{geometry} %For demo purposes
\usepackage{filecontents}

\begin{filecontents}{data1.csv}
column1,column2
5001,102
5002,75
5003,115
5004,45
5005,97
5036,110
5037,77
5038,147
5039,89
5040,62
5041,160
5042,102
\end{filecontents}%

\begin{document}

%%% Code from Dr. Christian Feuersanger ------ for not using headers.----------------------
\pgfkeysifdefined{/pgfplots/table/output empty row/.@cmd}{
    % upcoming releases offer this more convenient option:
    \pgfplotstableset{
        empty header/.style={
          every head row/.style={output empty row},
        }
    }
}{
    % versions up to and including 1.5.1 need this:
    \pgfplotstableset{
        empty header/.style={
            typeset cell/.append code={%
                \ifnum\pgfplotstablerow=-1 %
                    \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
                \fi
            }
        }
    }
}
%%%-----------------------------------------------
\newcommand\MyHead[2]{%
  \multicolumn{1}{|> {\centering}m{#1}|}{#2}
}    
\pgfplotstabletypeset[
    empty header,
    outfile = test.dat,
    begin table=\begin{longtable},
     every odd column/.style ={%
     column type/.add={|}{}
     },
     every even column/.style ={%
     column type/.add={|}{}
     },
         every last column/.style ={%
     column type/.add={}{|}
    },
          every head row/.style={output empty row},
    every nth row={1}{before row=\hline},
 every first row/.append style={before row={%
    \caption{This is  a long table spreading over several pages.}%
    \label{tab:DataTable}\\\hline
\MyHead{4cm} {column with long header} & \MyHead{4cm} {Other column with very long header}  \\
    \hline
    \endfirsthead
    %
    \multicolumn{2}{c}%
    {Table \thetable\ Continued from previous page} \\
    \hline
    %
\MyHead{4cm} {column with long header} & \MyHead{4cm} {Other column with very long header}  \\
    \endhead
    %
    \multicolumn{2}{r}{{Continued on next page}} \\
    \endfoot
    %
    \hline
    \multicolumn{2}{r}{{End of table}} \\ 
    \endlastfoot
    }},%
    %
    end table=\end{longtable},
   col sep=comma,
    string type,
    ]{data1.csv}
\end{document}

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

verwandte Informationen