如何在 TeX 中创建表格并从 txt 文件中获取信息

如何在 TeX 中创建表格并从 txt 文件中获取信息

我如何将.txt文件输入到 TeX tabular?我有一份学生名单(名字、姓氏,以及该学生是否在
校)。0 表示否,1 表示是,当然……

.txt文件如下所示:

\r Julo:Petrzlen:011:100:101:

\r Ivan:Hrasok:110:101:010:

0 必须看起来像这样“-”,而 1 必须看起来像“x” tabular

我是 TeX 和编程的新手……我真的不知道如何开始。所以请帮帮我。

答案1

可以用一些 TeX 魔法来解决:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
\r Julo:Petrzlen:011:100:101:
\r Ivan:Hrasok:110:101:010:
\end{filecontents*}

\usepackage{array}
\def\Conv#1#2#3!!{%
  \ifnum#1=0 -\else x\fi \ifnum#2=0 -\else x\fi \ifnum#3=0 -\else x\fi}
\def\r#1:#2:#3:#4:#5:{#1 & #2 & \Conv#3!! & \Conv#4!! & \Conv#5!! \\}
% !! marks the end of input
\begin{document}

\begin{tabular}{@{} ll *3{>{\ttfamily}l} @{}}\hline
  \emph{Firstname} & \emph{Lastname} & \ldots & \ldots & \ldots\\\hline 
  \input{data.txt}
  \hline
\end{tabular}

\end{document}

在此处输入图片描述

对于简短的名字也同样如此:

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
\r Julo:Petrzlen:011:100:101:
\r Ivan:Hrasok:110:101:010:
\end{filecontents*}

\usepackage{array}
\def\Short#1#2!!{#1. }
\def\Conv#1#2#3!!{%
  \ifnum#1=0 -\else x\fi \ifnum#2=0 -\else x\fi \ifnum#3=0 -\else x\fi}
\def\r#1:#2:#3:#4:#5:{\Short#1!! #2 & \Conv#3!! & \Conv#4!! & \Conv#5!! \\}

\begin{document}

\begin{tabular}{@{} l *3{>{\ttfamily}l} @{}}\hline
  \emph{name} & \ldots & \ldots & \ldots\\\hline 
  \input{data.txt}
  \hline
\end{tabular}

\end{document}

在此处输入图片描述

最后但同样重要的一点是,所有课程都位于自己的列中(\Conv现在写 3 列)!

\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{data.txt}
\r Julo:Petrzlen:011:100:101:
\r Ivan:Hrasok:110:101:010:
\end{filecontents*}

\usepackage{array}
\def\Short#1#2!!{#1. }
\def\Conv#1#2#3!!{%
  \ifnum#1=0 -\else x\fi & \ifnum#2=0 -\else x\fi & \ifnum#3=0 -\else x\fi}
\def\r#1:#2:#3:#4:#5:{\Short#1!! #2 & \Conv#3!! & \Conv#4!! & \Conv#5!! \\}

\begin{document}

\begin{tabular}{@{} l *9{>{\ttfamily}l} @{}}\hline
  \emph{name} & \multicolumn{9}{c}{\ldots}\\\hline 
  \input{data.txt}
  \hline
\end{tabular}

\end{document}

在此处输入图片描述

答案2

作为参考,这里有一个使用版本pgfplotstable

示例输出

\documentclass{article}

\usepackage{pgfplotstable}

\begin{document}

\pgfplotstabletypeset[col sep=colon,columns={First,Last,Mon,Tue,Wed},
string type,string replace*={0}{\(- \)},string replace*={1}{\(+ \)}]{students.txt}

\end{document}

students.txt

First:Last:Mon:Tue:Wed: 
Julo:Petrzlen:011:100:101:
Ivan:Hrasok:110:101:010:

如果前两列可以包含零和一,那么您必须限制替换。下面分别对每列进行规范,并展示如何左对齐前两列:

示例输出

\documentclass{article}

\usepackage{pgfplotstable}

\begin{document}

\pgfplotstabletypeset[col sep=colon,columns={First,Last,Mon,Tue,Wed},
string type,
columns/First/.style={column type=l},
columns/Last/.style={column type=l},
columns/Mon/.style={string replace*={0}{\(- \)},string replace*={1}{\(+ \)}},
columns/Tue/.style={string replace*={0}{\(- \)},string replace*={1}{\(+ \)}},
columns/Wed/.style={string replace*={0}{\(- \)},string replace*={1}{\(+ \)}}%
]{students.txt}

\end{document}

相关内容