将列表的所有项输入到环境中

时间:2016-02-06 16:01:49

标签: latex

我有一个名单列表,我想将其输入到给定的周围,例如一个盒子。换一种方式:我希望LaTex为给定列表中的每个项目创建一个环境。

这是我的清单: 弗兰克,弗雷德,弗兰

这是我的周围:

\fbox{\name}

\name执行以下操作:它从列表中输入第一个项目,并为列表中的每个连续项目创建另一个\ fbox,直到列表末尾,结果输出相同(但保存打字)

\fbox{Frank} \fbox{Fred} \fbox{Fran}

我正在考虑将名单列为" count" (将Frank重新定义为1,将Fred重新定义为2 ......)这可能是错误的方法。 我意识到一个命令可能不会同时做这两件事。

如果有一个简单的解决方案:它叫什么,我在哪里可以找到它?搜索变量'或者' foreach'没有帮助。

1 个答案:

答案 0 :(得分:1)

根据您的应用程序,您可以显式指定列表,也可以在文件中指定:

  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}
    
  2. 作为(例如)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}
    
  3. 在这两种情况下,输出类似于:

    enter image description here