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=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}

введите описание изображения здесь

Связанный контент