我如何将.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}