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