Estou tentando csvsimple
criar uma tabela com um arquivo de entrada delimitado por tabulações.
Aqui está um arquivo separado por tabulações generic.tsv
para 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:
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=tab
no arquivo tex), ele funcionará conforme o esperado:
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=tab
dentro de a tabular
é redefinida após a primeira linha porque a configuração do separador é executada em um grupo. Usar o \csvreader
para 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}