
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 양식에서는 모든 필드(체크박스도 필드임)에 고유한 이름을 갖는 것이 좋습니다. 그렇지 않으면 양식의 추가 사용(예: 양식 데이터를 내보낼 때)에 따라 예기치 않은 결과가 발생할 수 있습니다. 따라서 다음 예에서는 checkbox
CSV 데이터의 텍스트를 등으로 변경하여 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 reading
및 after 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}