csvsimple tendo problemas com arquivo delimitado por tabulação

csvsimple tendo problemas com arquivo delimitado por tabulação

Estou tentando csvsimplecriar uma tabela com um arquivo de entrada delimitado por tabulações.

Aqui está um arquivo separado por tabulações generic.tsvpara colocar em uma tabela (são tabulações no meu arquivo, não espaços, embora o StackExchange pareça convertê-los):

r1c1    r1c2    r1c3
r2c1    r2c2    r2c3
r3c1    r3c2    r3c3

Aqui está um exemplo de arquivo tex para lê-lo:

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

Executando isso, recebo o seguinte:

Saída com arquivo delimitado por tabulação

Isso não é o que eu esperava. Se eu alterar o arquivo de entrada para substituir as guias por vírgulas (e me livrar delas separator=tabno arquivo tex), ele funcionará conforme o esperado:

Saída com um arquivo delimitado por vírgula

O que posso fazer para que isso funcione com um arquivo delimitado por tabulações?

Responder1

Este é basicamente o mesmo problema quecsvsimple respeito dólar não funciona, mas nessa questão o problema era com o cifrão $e nesta questão o problema é com o caractere de tabulação. O problema parece ser que a configuração separator=tabdentro de a tabularé redefinida após a primeira linha porque a configuração do separador é executada em um grupo. Usar o \csvreaderpara configurar o próprio tabular resolve esse problema, porque agora o separador é definido fora do tabular e, portanto, a configuração permanece válida.

Se quiser usar a abordagem original, você pode definir o código de categoria do caractere de tabulação manualmente para 12 (caractere normal) e redefini-lo de volta para 10 (caractere de espaço) após o tabular. No entanto, isso tem um efeito colateral: a parte inferior da tabela não é renderizada corretamente por algum motivo. No MWE abaixo removi a linha que termina na última linha, o que infelizmente significa que você não pode imprimir ali \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}

insira a descrição da imagem aqui

informação relacionada