考虑这个示例代码,它创建一个 2x6 表,其中 6 列由三个名称/值对组成:
\documentclass{article}
\usepackage[svgnames,table]{xcolor}
\usepackage{tabu}
\usepackage{booktabs}
\begin{document}
\begin{center}
\taburowcolors[1]{ForestGreen!40..ForestGreen!40}
\begin{tabu}{p{1cm}|X|p{1cm}|X|p{1cm}|X}
\tabucline-
name1 & value1 & name3 & value3 & name5 & value6 \\
name2 & value2 & name4 & value4 & name6 & value6 \\
\tabucline-
\end{tabu}
\end{center}
\end{document}
看起来像这样:
它可以工作,但我们必须明确地布置 2 行 3 对列。有没有办法像这样指定它:
name1 & value1
name2 & value2
name3 & value3
name4 & value4
name5 & value5
name6 & value6
然后只需告诉它将其包装成三对(或我们希望指定的任何数字)的列对?
编辑:
谢谢,ArTourterless。这是我的尝试,还有一个问题,关于如何完成它,以便它看起来像禁忌包方法。
首先,我们尝试使用 multicols 和 itemenum 包。接下来,我们使用 tabu 包完成了艰难的任务。multicols/itemenum 方法似乎仍然缺少的关键内容是水平蓝线。有人知道如何获取这些吗?
\documentclass{article}
\usepackage{multicol}
\usepackage{enumitem}
\usepackage{tabu}
\usepackage[table]{xcolor}
\begin{document}
Using multicols/enumitem:
\begin{center}
\setlength{\columnseprule}{.4pt}
\renewcommand\columnseprulecolor{\color{blue}}
\begin{multicols}{2}
\begin{description}[font=\bfseries, leftmargin=2cm, style=nextline]
\item[Name1] Value1.
\item[Name2] Value2.
\item[Name3] Value3.
\end{description}
\end{multicols}
\end{center}
Using tabu (manually doing the layout ourself):
\begin{center}\small
\tabulinesep=1.5mm
\begin{tabu} {>{\bfseries}p{1cm}X |[blue] >{\bfseries}p{1cm}X }
\everyrow{\tabucline[blue]-}
Name1 & Value1. & Name3 & Value3. \\
Name2 & Value2. & & \\
\tabucline[blue]-
\end{tabu}
\end{center}
\end{document}
看起来像这样:
编辑 2:已经想出了编辑 1 中方法的另一种变体。我们可以为每一行创建一个单独的禁忌表,然后将其放入多列中。如果列数不能均匀地划分数据的长度,那么分界线将与单禁忌方法不同,但其他方面看起来非常相似。虽然每行都有额外的条目,但这确实意味着我们可以摆脱特定于布局的代码,因此它更加灵活。
\documentclass{article}
\usepackage{multicol}
\usepackage{enumitem}
\usepackage{tabu}
\usepackage[table]{xcolor}
\begin{document}
\begin{center}\small
\setlength{\columnseprule}{.4pt}
\renewcommand\columnseprulecolor{\color{blue}}
\begin{multicols}{2}
\begin{tabu} {>{\bfseries}p{1cm}X}
Name1 & Value1. \\
\tabucline[blue]-
\end{tabu}
\begin{tabu} {>{\bfseries}p{1cm}X}
Name2 & Value2. \\
\tabucline[blue]-
\end{tabu}
\begin{tabu} {>{\bfseries}p{1cm}X}
Name3 & Value3. \\
\tabucline[blue]-
\end{tabu}
\end{multicols}
\end{center}
\end{document}
看起来像这样:
编辑3:
添加了屏幕截图。
答案1
也许有点过头了,但我喜欢用它TikZ
来解决这种布局问题。接下来是一个具有易于使用界面的“解决方案”。查看代码的最后一部分,它提供了使用示例。您可以\NewColumn
在序列中的任何位置插入\Row
(尝试取消注释最后一个\NewColumn
。
请注意,each\Row
实际上是tabular
宏中使用的\RowContent
。您可以在那里自定义列类型或宽度。使用tikz
可以为蓝线、行背景等提供无限的可能性。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\thispagestyle{empty}
\usetikzlibrary{positioning}
\def\RowWidth{4cm}
\def\RowContent#1{\begin{tabular}{ll}
#1\\
\end{tabular}}
\def\Row#1{
\node[text width=\RowWidth,
below=0mm of previous row,
name=previous row] {\RowContent{#1}};
\draw[blue] (previous row.south west) -- (previous row.south east);
}
\def\NewColumn{
\path (previous column) +(\RowWidth,0) coordinate[name = previous column] {};
\coordinate[right=of previous column] (previous column) {};
\coordinate (previous row) at (previous column) {};
}
\def\Start{
\coordinate (previous column) at (0,0) {};
\coordinate (previous row) at (0,0) {};
}
\begin{tikzpicture}
\Start % This Start is mandatory, it defines the nodes to which the rest is positioned
\Row{ Name1 & Value 1}
\Row{ Name2 & Value 2}
\Row{ Name3 & Value 3}
\NewColumn
\Row{ Name4 & Value 4}
\Row{ Name5 & Value 5}
% \NewColumn
\Row{ Name6 & Value 6}
\Row{ Name7 & Value 7}
\end{tikzpicture}
\end{document}
上述代码的结果是:
答案2
ArTourterless 评论说,解决方案是将列表放在多列环境中,我一直在追求这个想法的实现。我遇到的主要问题是想在连续的项目之间放一条蓝线。这很容易用禁忌来实现,但似乎不太适合列表。在阅读禁忌包文档时,我遇到了\savetabu
和\usetabu
。它们保存并重用禁忌表的列宽和其他设置。这似乎是一个完美的应用,因为我们可以将每一行设为一个单独的禁忌表,其列宽与其他行相同:
\documentclass{article}
\usepackage{multicol}
\usepackage{enumitem}
\usepackage{tabu}
\usepackage[table]{xcolor}
\begin{document}
\begin{center}\small
\setlength{\columnseprule}{.4pt}
\renewcommand\columnseprulecolor{\color{blue}}
\begin{multicols}{2}
\begin{tabu} {>{\bfseries}lX}\savetabu{mytabu}
Name1 & Value1. \\
\tabucline[blue]-\end{tabu}
\begin{tabu} {\usetabu{mytabu}}
Name2 & Value2. \\
\tabucline[blue]-\end{tabu}
\begin{tabu} {\usetabu{mytabu}}
Name3 & Value3. \\
\tabucline[blue]-\end{tabu}
\end{multicols}
\end{center}
\end{document}
输出如下所示: