csvsimple 在处理制表符分隔文件时遇到问题

csvsimple 在处理制表符分隔文件时遇到问题

我正在尝试使用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=taba 内的设置会被重置。使用来设置表格本身可以解决这个问题,因为现在分隔符设置在表格之外,因此设置仍然有效。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}

在此处输入图片描述

相关内容