我正在嘗試使用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尊重美元不起作用,但在這個問題中,問題出在美元符號上$
,而在這個問題中,問題出在製表符上。問題似乎是在第一行之後重置separator=tab
a 內部的設置tabular
,因為分隔符號設定是在群組中執行的。使用\csvreader
設定表格本身可以解決此問題,因為現在分隔符號設定在表格之外,因此該設定仍然有效。
如果您想使用原始方法,則可以手動將製表符的類別代碼設為 12(普通字元),並在表格後面將其重設為 10(空格字元)。然而,這有一個副作用,即由於某種原因,表格底部無法正確呈現。在下面的 MWE 中,我刪除了最後一行結尾的行,不幸的是,這意味著您無法\hline
在那裡列印 a 。
\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}