체크박스와 `csvsimple`

체크박스와 `csvsimple`

NET으로 생성된 테이블에 확인란을 삽입하는 방법에 대한 명확하고 기능적인 예를 찾지 못했습니다 csvsimple.

예를 들어, 이 MWE에서 체크박스 문자열을 실제 클릭 가능한 문자열로 대체하려면 어떻게 코드를 수정해야 합니까?

\documentclass{article}
\usepackage{csvsimple}

\begin{filecontents*}{grade.csv}
    cola,colb,colc,cold,cole
    Maier,Hans,0,m,checkbox
    Huber,Anna,1,f,checkbox
    Weisbaeck,Werner,3,m,checkbox
\end{filecontents*}

\begin{document}
    \begin{tabular}{l|c}%
        \bfseries ColA & \bfseries ColE% specify table head
        \csvreader[head to column names]{grade.csv}{}% use head of csv as column names
        {\\\hline\cola\ \colb & \cole}% specify your columns here
    \end{tabular}
\end{document}

Jasper에게 정말 감사드립니다. 귀하의 모든 솔루션에 매우 관심이 있습니다. 확실히, 나는 카운터를 사용하여 체크박스 이름이 자동으로 생성되는 두 번째 것과 같은 것을 더 구체적으로 검색하고 있었습니다!

가능하다면(그리고 남용할 수 있다면!) 한 가지 더 생각해 보시기 바랍니다. 예를 들어 다음 MWE와 같이 긴 테이블이 있을 때 두 번째 두 번째 솔루션을 조정하는 방법은 다음과 같습니다.

\documentclass[draft]{article}

\usepackage{booktabs}
\usepackage{longtable}
\usepackage{csvsimple}
\begin{document}
\begin{filecontents*}{test.csv}
  a,b,c
  1,2,3
  4,5,6
\end{filecontents*}
\csvloop{
  file=test.csv,
  respect all,
  separator=comma,
  no head,
  before reading={
    \begin{longtable}{lll}
    \toprule
  },
  command={\csviffirstrow
    {\textbf{\csvcoli} & \textbf{\csvcolii} & \textbf{\csvcoliii}}
    {\csvcoli & \csvcolii & \csvcoliii}
  },
  late after line=\\,
  late after first line=\\\midrule\endhead,
  late after last line=\\\bottomrule,
  after reading=\end{longtable}
}
\end{document}

답변1

TeX.SX에 오신 것을 환영합니다! 사용 사례에 대해 좀 더 설명해야 할 수도 있습니다. 귀하의 질문을 제가 이해하는 한, 귀하는 일종의 대화형 PDF 양식을 만들려고 노력하고 있습니다. 패키지를 사용하여 hyperref클릭 가능한 확인란이 있는 양식을 만들 수 있습니다.

그러나 대화형 PDF 양식에서는 모든 필드(체크박스도 필드임)에 고유한 이름을 갖는 것이 좋습니다. 그렇지 않으면 양식의 추가 사용(예: 양식 데이터를 내보낼 때)에 따라 예기치 않은 결과가 발생할 수 있습니다. 따라서 다음 예에서는 checkboxCSV 데이터의 텍스트를 등으로 변경하여 checkbox1양식 checkbox2의 확인란 이름으로 사용한 고유 ID를 생성했습니다.

\documentclass{article}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{grade.csv}
    cola,colb,colc,cold,cole
    Maier,Hans,0,m,checkbox1
    Huber,Anna,1,f,checkbox2
    Weisbaeck,Werner,3,m,checkbox3
\end{filecontents*}

\begin{document}
    \begin{Form}
        \begin{tabular}{l|c}%
            \bfseries ColA & \bfseries ColE% specify table head
            \csvreader[head to column names]{grade.csv}{}% use head of csv as column names
            {\\\hline\cola\ \colb & \CheckBox[name=\cole]{}}% specify your columns here
        \end{tabular}
    \end{Form}
\end{document}

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

다음 예와 같이 카운터를 사용하거나 \thecsvrow현재 행 번호를 반환하는 기능을 사용하여 필요한 고유 확인란 이름을 자동으로 생성할 수도 있습니다. 이 경우 확인란과 관련된 CSV 데이터가 전혀 필요하지 않으므로 관련 항목을 삭제했습니다. 열):

\documentclass{article}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{grade.csv}
    cola,colb,colc,cold
    Maier,Hans,0,m
    Huber,Anna,1,f
    Weisbaeck,Werner,3,m
\end{filecontents*}

\begin{document}
    \begin{Form}
        \begin{tabular}{l|c}%
            \bfseries ColA & \bfseries ColE% specify table head
            \csvreader[head to column names]{grade.csv}{}% use head of csv as column names
            {\\\hline\cola\ \colb & \CheckBox[name=checkbox\thecsvrow]{}}% specify your columns here
        \end{tabular}
    \end{Form}
\end{document}

출력은 위와 동일합니다.


checkbox다시 생각해 보면 문자열을 클릭 가능한 확인란으로 바꾸고 싶다고 말씀하셨습니다 . 따라서 관련 CSV 데이터 checkbox열에 문자열이 나타나는 행에만 확인란을 원할 수도 있습니다 . cole(이 점을 지적해주신 @Marijn에게 감사드립니다.)

매크로를 사용하여 \ifcsvstrequal각 행에 대해 셀 내용이 맞는지 확인 checkbox하고, 그렇다면 체크박스를 배치할 수 있습니다.

\documentclass{article}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{grade.csv}
    cola,colb,colc,cold,cole
    Maier,Hans,0,m,checkbox
    Huber,Anna,1,f,
    Weisbaeck,Werner,3,m,checkbox
\end{filecontents*}

\def\checkboxstring{checkbox}

\begin{document}
    \begin{Form}
        \begin{tabular}{l|c}%
            \bfseries ColA & \bfseries ColE% specify table head
            \csvreader[head to column names]{grade.csv}{}% use head of csv as column names
            {\\\hline\cola\ \colb & \ifcsvstrequal{\cole}{checkbox}{\CheckBox[name=checkbox\thecsvrow]{}}{}}% specify your columns here
        \end{tabular}
    \end{Form}
\end{document}

위 코드는 두 번째 행에 체크박스를 배치하지 않습니다.

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



\csvloop나중에 위 솔루션 중 두 번째 솔루션을 를 생성하는 데 사용되는 설정에 적용하는 방법도 물었습니다 longtable. 양식 필드의 전체 기능을 보장하려면 \begin{Form}PDF 의 모든 필드를 사이에 배치하는 것이 중요합니다 . \end{Form}여기서는 before readingafter reading옵션에 다음을 추가할 수 있습니다.

\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{csvsimple}
\usepackage{hyperref}

\begin{filecontents*}{test.csv}
  a,b,c
  1,2,3
  4,5,6
\end{filecontents*}

\begin{document}
\csvloop{
  file=test.csv,
  respect all,
  separator=comma,
  no head,
  before reading={
    \begin{Form}
    \begin{longtable}{llll}
    \toprule
  },
  command={\csviffirstrow
    {\textbf{\csvcoli} & \textbf{\csvcolii} & \textbf{\csvcoliii} & }
    {\csvcoli & \csvcolii & \csvcoliii & \CheckBox[name=checkbox\thecsvrow]{}}
  },
  late after line={\\},
  late after first line={\\\midrule\endhead},
  late after last line={\\\bottomrule},
  after reading={
    \end{longtable}
    \end{Form}
  }
}
\end{document}

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

관련 정보