pgfplotstable을 사용하여 longtable의 레이아웃을 수정하는 방법

pgfplotstable을 사용하여 longtable의 레이아웃을 수정하는 방법

복잡하고 긴 표가 포함된 일련의 산업 보고서를 준비하기 위해 사이트에서 찾은 코드 샘플을 결합하고 있는데 이것이 유망해 보입니다. 내 분야에서는 일반적으로 권장되는 방식에도 불구하고 셀을 수직선과 수평선으로 구분해야 합니다. MWE(실제 요구 사항에 비해 매우 단순화됨)에서는 여전히 두 가지 문제에 직면해 있습니다. 데이터 행 1과 2 사이에 수평선이 없습니다. 또한 두 열(및 추가할 다른 열 사이에 수직선을 배치할 수 없습니다. ). 코드를 개선하기 위한 팁(열 서식 지정을 가장 잘 수행하고 각 행 사이에 수평선을 정의하는 위치가 명확하지 않음) 및/또는 시각적 모양을 개선하기 위한 팁도 환영합니다. MWE에서는 수직선이 연속되지 않습니다.

\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}

답변1

질문의 쉬운 부분부터 시작해 보겠습니다.

  • 수직선을 사용하고 싶다면 의 규칙을 사용하지 마세요 \booktabs. 대신에 그들은 사용합니다\hline
  • 수직선의 경우 다음을 수행하는 것이 좋습니다.

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

  • 내 취향에는 말하는 것이 더 좋습니다 every nth row={1}{before row=\hline}. 테이블 아래에 이 텍스트가 있으면(다음 페이지에 계속) 그 아래에 줄이 없습니다.

전체 코드:

\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}

여기에 이미지 설명을 입력하세요

여기에 이미지 설명을 입력하세요

관련 정보