
csvsimple
タブ区切りの入力ファイルを使用してテーブルを作成しようとしています。
generic.tsv
以下は、テーブルに入れるタブ区切りのファイルです(私のファイルではタブであり、スペースではありませんが、StackExchange ではタブが変換されるようです)。
r1c1 r1c2 r1c3
r2c1 r2c2 r2c3
r3c1 r3c2 r3c3
読み込むための tex ファイルの例を次に示します。
\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\begin{tabular}{|l|l|l|}
\hline
Col 1 & Col 2 & Col 3 \\
\hline
\csvreader[no head,
late after line=\\\hline,
separator=tab
]{generic.tsv}{}{\csvcoli & \csvcolii & \csvcoliii}
\end{tabular}
\end{document}
これを実行すると、次のようになります。
separator=tab
これは私が期待していたものではありません。入力ファイルを変更してタブをカンマに置き換え(そしてtex ファイルから削除)、期待どおりに動作します。
タブ区切りファイルでこれを動作させるにはどうすればよいですか?
答え1
これは基本的に同じ問題ですcsvsimple respect dollar が機能しないですが、その質問ではドル記号に問題があり$
、この質問ではタブ文字に問題があります。問題は、区切り文字の設定がグループ内で実行されるため、separator=tab
内の設定tabular
が最初の行の後にリセットされることのようです。 を使用して\csvreader
表形式自体を設定すると、区切り文字が表形式の外側に設定され、設定が有効なままになるため、この問題は解決されます。
元のアプローチを使用する場合は、タブ文字のカテゴリ コードを手動で 12 (通常の文字) に設定し、表の後に 10 (スペース文字) にリセットすることができます。ただし、これには副作用があり、何らかの理由で表の下部が正しくレンダリングされません。以下の MWE では、最後の行で終了する行を削除しましたが、残念ながらそこに印刷することはできません\hline
。
\documentclass{article}
\usepackage{csvsimple}
\begin{document}
\csvreader[separator=tab,
tabular={|l|l|l|},
table head={\hline Col 1 & Col 2 & Col 3\\\hline},
late after line=\\\hline,
no head
]{generic.tsv}{}%
{\csvcoli & \csvcolii & \csvcoliii}
Tabular in \texttt{csvreader}
\vspace{1cm}
\catcode`\^^I=12
\begin{tabular}{|l|l|l|}
\hline
Col 1 & Col 2 & Col 3 \\
\hline
\csvreader[no head,
late after line=\\\hline,
late after last line=\relax,
separator=tab]{generic.tsv}{}{\csvcoli & \csvcolii & \csvcoliii}
\end{tabular}
\catcode`\^^I=10
Manual catcode change for tab character
with missing bottom line
\end{document}