这篇文章是该文章的后续: 多对列 这是关于生成名称/值对的列。那里有示例输出。我现在有几个解决方案,正在弄清楚哪个是最好的,以及是否有任何实施替代方案。
这更多的是关于寻找实施解决方案的包而不是生成解决方案,因为我已经有几个工作解决方案原型,但无论如何这里有几个标准:
- 已经决定通过程序生成这个,所以它应该适合
- 需要行和列之间的线,因此解决方案必须具有足够的可定制性
- 在利用乳胶功能和保持乳胶代码以及生成它的程序代码简单之间取得了令人满意的平衡
- 生成的可读乳胶代码
- 可以处理不同宽度的名称和值
- 跑得快
- 除了多列之外,还可以处理单列名称/值对
感谢许多回复者以及我自己的一些测试,我现在有不少可能的解决方案,其中一些可以在上面的链接中看到。毫无疑问还有其他解决方案。它们似乎属于以下类别:
- 基于 tikz 的解决方案
- 将每个名称/值对设为一行表,并将这些表放在多行或嵌套表中
- 将名称/值对的每一列都放在一个表里,然后将它们放在多列或嵌套表中
我倾向于在 multicol 中每列使用一个表,因为它相当简单,并且可以自动处理每列名称和值的不同宽度,但我遇到了一个问题,即 multicol 不允许使用一列(我尝试了一下,它给我一个消息,说它将使用 2 列,尽管我指定了 1 列),所以我必须编写两次程序:一次使用 multicol,一次使用一列表格。虽然嵌套表似乎比 multicol 的工作量大一些,但我现在正在考虑转向它,因为它允许所有情况都适合同一个框架,因此总体上会更简单。
问题:我想知道的是,是否有任何可以处理单个列和其他条件的 multicol 替代方案。我已经进行了大量搜索,但到目前为止没有找到任何合适的方法,但我想发布此信息,以防其他人知道一些信息,然后我放弃这种方法并转向稍微复杂一些的嵌套表。
编辑:这是多列中每列的禁忌表代码。它适用于两列或更多列,但不适用于一列。
\documentclass{article}
\usepackage{multicol}
\usepackage{tabu}
\usepackage[table]{xcolor}
\begin{document}
\providecommand{\Column}[1]{}
\renewcommand{\Column}[1]{%
\begin{tabu} to \columnwidth{>{\bfseries}lX}%
\everyrow{\tabucline[blue]-}%
#1%
\end{tabu}%
}
\begin{center}\small
\setlength{\columnseprule}{.4pt}
\renewcommand\columnseprulecolor{\color{blue}}
\begin{multicols}{2}
\Column{
Name1 & Value1. \\
Name2 & Value2. \\
Name3 & Value3. \\
}
\Column{
Name4 & Value4. \\
Name5 & Value5. \\
}
\end{multicols}
\end{center}
\end{document}
看起来像这样:
答案1
正如评论中所述,您可以定义一个环境,如果传递 1,则不执行任何操作,否则使用多列:
\newenvironment{mymcol}[1]
{\ifnum#1=1
\let\endmulticols\par
\def\multicols##1{\par}%
\fi
\begin{multicols}{#1}}%
{\end{multicols}}
\makeatother
\begin{mymcol}{2}
\Column{
Name1 & Value1. \\
Name2 & Value2. \\
Name3 & Value3. \\
}
\Column{
Name4 & Value4. \\
Name5 & Value5. \\
}
\end{mymcol}