
で生成されたテーブルにチェックボックスを挿入する方法についての明確かつ機能的な例は見つかりませんでした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 さん、本当にありがとうございます。あなたのすべてのソリューションにとても興味があります。確かに、私はカウンターを使用してチェックボックス名が自動的に生成される 2 番目のソリューションのようなものを具体的に探していました。
もし可能であれば(そして私が乱用しても構わないなら)、もう 1 つ質問します。たとえば次の MWE のような長い表がある場合、2 番目のソリューションをどのように適応させるかということです。
\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}
出力は上記と同じです。
考え直してみると、文字列をクリック可能なチェックボックスに置き換えたいとのことです。したがって、関連する CSV データの列にcheckbox
文字列が表示される行にのみチェックボックスが必要なのかもしれません。(この点を指摘してくれた @Marijn に感謝します。)checkbox
cole
マクロを使用して、\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}
上記のコードでは、2 行目にチェックボックスは配置されません。
\csvloop
また、後で、を作成するために が使用されるセットアップに、上記のソリューションの 2 番目を適用する方法についても質問されました。フォーム フィールドが完全に機能するようにするには、longtable
PDF 内のすべてのフィールドを と の間に配置することが重要です。ここでは、およびオプションに以下を追加できます。\begin{Form}
\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}