我有一个名单列表,我想将其输入到给定的周围,例如一个盒子。换一种方式:我希望LaTex为给定列表中的每个项目创建一个环境。
这是我的清单: 弗兰克,弗雷德,弗兰
这是我的周围:
\fbox{\name}
\name
执行以下操作:它从列表中输入第一个项目,并为列表中的每个连续项目创建另一个\ fbox,直到列表末尾,结果输出相同(但保存打字)
\fbox{Frank}
\fbox{Fred}
\fbox{Fran}
我正在考虑将名单列为" count" (将Frank重新定义为1,将Fred重新定义为2 ......)这可能是错误的方法。 我意识到一个命令可能不会同时做这两件事。
如果有一个简单的解决方案:它叫什么,我在哪里可以找到它?搜索变量'或者' foreach'没有帮助。
答案 0 :(得分:1)
根据您的应用程序,您可以显式指定列表,也可以在文件中指定:
作为明确的清单(见How to iterate over a comma separated list?):
\documentclass{article}
\usepackage{etoolbox}
\newcommand{\printlist}[1]{%
\begin{enumerate}
\renewcommand*{\do}[1]{\item \fbox{##1}}%
\docsvlist{#1}%
\end{enumerate}%
}
\begin{document}
\printlist{Frank, Fred, Fran}
\end{document}
作为(例如)names.csv
中的文件:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{names.csv}
Frank
Fred
Fran
\end{filecontents*}
\usepackage{datatool}
\newcommand{\printlist}[1]{%
\DTLloaddb[noheader,keys=name]{namesdb}{#1}% Load names database file
\begin{enumerate}
\DTLforeach{namesdb}{\name=name}{\item \fbox{\name}}
\end{enumerate}
}
\begin{document}
\printlist{names.csv}
\end{document}
在这两种情况下,输出类似于: