csvsimple hat Probleme mit tabulatorgetrennter Datei

csvsimple hat Probleme mit tabulatorgetrennter Datei

Ich versuche, csvsimpleeine Tabelle mit einer tabulatorgetrennten Eingabedatei zu erstellen.

Hier ist eine durch Tabulatoren getrennte Datei generic.tsvzum Einfügen in eine Tabelle (in meiner Datei handelt es sich um Tabulatoren und nicht um Leerzeichen, obwohl StackExchange diese anscheinend konvertiert):

r1c1    r1c2    r1c3
r2c1    r2c2    r2c3
r3c1    r3c2    r3c3

Hier ist eine Beispiel-Tex-Datei zum Einlesen:

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

Wenn ich dies ausführe, erhalte ich Folgendes:

Ausgabe mit tabulatorgetrennter Datei

Das habe ich nicht erwartet. Wenn ich die Eingabedatei ändere, um die Tabulatoren durch Kommas zu ersetzen (und sie separator=tabin der Tex-Datei zu entfernen), funktioniert es wie erwartet:

Ausgabe mit einer kommagetrennten Datei

Was kann ich tun, damit dies mit einer tabulatorgetrennten Datei funktioniert?

Antwort1

Dies ist im Grunde das gleiche Problem wiecsvsimple Respekt Dollar funktioniert nicht, aber in dieser Frage war das Problem das Dollarzeichen $und in dieser Frage das Tabulatorzeichen. Das Problem scheint zu sein, dass die Einstellung separator=tabinnerhalb von a tabularnach der ersten Zeile zurückgesetzt wird, da die Trennzeicheneinstellung in einer Gruppe vorgenommen wird. Die Verwendung von \csvreaderzum Einrichten der Tabelle selbst löst dieses Problem, da das Trennzeichen jetzt außerhalb der Tabelle gesetzt wird und die Einstellung daher gültig bleibt.

Wenn Sie den ursprünglichen Ansatz verwenden möchten, können Sie den Kategoriencode des Tabulatorzeichens manuell auf 12 (normales Zeichen) setzen und ihn nach dem Tabulatorzeichen wieder auf 10 (Leerzeichen) zurücksetzen. Dies hat jedoch den Nebeneffekt, dass das Ende der Tabelle aus irgendeinem Grund nicht korrekt dargestellt wird. Im MWE unten habe ich das Zeilenende in der letzten Zeile entfernt, was leider bedeutet, dass Sie \hlinedort kein a drucken können.

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

Bildbeschreibung hier eingeben

verwandte Informationen