生成需求列表/数组

生成需求列表/数组

我正在尝试解决一个问题:我想生成一个数组,其中包含软件安装所需的模块。它应该看起来像这样:

\makebox[0pt][r]{required Modules}
\begin{tabular}[t]{p{1.8cm}p{1.8cm}}
Module01 & Module02 \\
Module03 & Module04 \\
...
\end{tabular}

我希望每个模块前面都有一个小圆圈(可能是 png),如果模块是必需的,则填充,否则为空。数组应使用如下简单命令生成:

\requiredModules{Module02,Module04}

这样给定的模块就是必需的……

我怎样才能做到这一点?

答案1

以下是借助expl3和的一种方法collcell

\documentclass{article}
\usepackage{collcell,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\requiredModules}{m}
 {
  \seq_set_split:Nnn \l_david_required_seq { , }{ #1 }
 }

\NewDocumentCommand{\checkRequired}{m}
 {
  \seq_if_in:NnTF \l_david_required_seq { #1 } { \textbullet\ } { $\circ$\ } #1
 }
\seq_new:N \l_david_required_seq
\ExplSyntaxOff

\newcolumntype{P}[1]{>{\collectcell\checkRequired}p{#1}<{\endcollectcell}}

\begin{document}
\requiredModules{Module02,Module04}

\begin{tabular}[t]{P{1.8cm}P{1.8cm}}
Module01 & Module02 \\
Module03 & Module04 \\
\end{tabular}

\end{document}

您声明所需模块的列表,然后准备表格,仅将p说明符更改为P

对照列表检查每个表条目,如果存在,则打印一个项目符号,否则打印一个空心圆圈。

在此处输入图片描述

找到后列表会重置\requiredModules。因此,您甚至可以重复使用大表:

\newcommand{\moduletable}{%
  \begin{tabular}[t]{P{1.8cm}P{1.8cm}}
  \hline
  Module01 & Module02 \\
  Module03 & Module04 \\
  \hline
  \end{tabular}}

然后

\requiredModules{Module01,Module04}\moduletable

\requiredModules{Module01,Module02}\moduletable

将打印

在此处输入图片描述


如果您已经按照上述方法定义了表,则可以通过添加另一个定义来简化最终的输入:

\newcommand{\generateModuleTable}[1]{%
  \requiredModules{#1}\moduletable}

因此,打印上述两个表格的完整代码如下

\documentclass{article}
\usepackage{collcell,xparse}
\ExplSyntaxOn
\NewDocumentCommand{\requiredModules}{m}
 {
  \seq_set_split:Nnn \l_david_required_seq { , }{ #1 }
 }

\NewDocumentCommand{\checkRequired}{m}
 {
  \seq_if_in:NnTF \l_david_required_seq { #1 } { \textbullet\ } { $\circ$\ } #1
 }
\seq_new:N \l_david_required_seq
\ExplSyntaxOff

\newcolumntype{P}[1]{>{\collectcell\checkRequired}p{#1}<{\endcollectcell}}

%%% Define the big table
\newcommand{\moduletable}{%
  \begin{tabular}[t]{P{1.8cm}P{1.8cm}}
  \hline
  Module01 & Module02 \\
  Module03 & Module04 \\
  \hline
  \end{tabular}}

\newcommand{\generateModuleTable}[1]{%
  \requiredModules{#1}\moduletable}



\begin{document}

\generateModuleTable{Module01,Module04}

\generateModuleTable{Module01,Module02}

\end{document}

相关内容