我将这三幅图放在一行中。现在我想将三列图放在下方,并将各自的数据对齐(图形下方的对齐方式实际上并不重要)。
这就是我所拥有的:
\begin{multicols}{3}
\begin{enumerate}
\item (1)(2)(3)
\item(1,2)(3)
\item(1,3)(2)
\item(2,3)(1)
\item(1, 2, 3)
\item(1, 3, 2)
\item(1)(2)(3)(4)
\item(1,3)(2)(4)
\end{enumerate}
\end{multicols}
我如何指定每个 \item 归入哪一列?例如,我希望第 1 列包含除最后 2 个 \items 之外的所有内容,第 2 列包含最后 2 个 \items。(我没有在这篇文章中包含所有数据)
我如何将这些数据格式化为三列并指定它们应放在哪一列?
答案1
这似乎是另一个案例(请参阅下面参考资料中的早期案例),其中最重要的事情是弄清楚到底如何您想指定要打印哪些项目吗?因此,这里是一您可以指定数据的哪些行最终出现在每一列中。
在宏中定义枚举列表,以便可以重复使用。在此调用
\MyItem{}
并传入参数作为数据:\begin{enumerate}% \MyItem{(1)(2)(3)} \MyItem{(1,2)(3)} \MyItem{(1,3)(2)} \MyItem{(2,3)(1)} \MyItem{(1, 2, 3)} \MyItem{(1, 3, 2)} \MyItem{(1)(2)(3)(4)} \MyItem{(1,3)(2)(4)} \end{enumerate}%
这是宏定义的一部分,
\MyEnumeratedList
它在该列表之前有一些初始化。现在,无论您想在何处使用此
enumerated
列表,只需指定实际要打印的行即可。因此,如果您只想打印第 2、5 和 7 行,您可以这样写:\MyEnumeratedList{2,5,7}
不会打印此列表中未指定的任何行。
因此,根据提供的数据,我已打印了问题中指定的行。未指定第 3 列,因此我为该列选择了第 2、5 和 7 行:
笔记:
- 我假设列表的每一列都从 1 开始连续编号。如果不希望使用另一个计数器进行编号,则将保留三列项目的编号。
我使用了 three
minipages
来显示三列,正如 Gonzalo Medina 在评论中所建议的那样。这种multicols
方法并不能达到预期的效果。这里有一个假设至少每列将打印一行。否则,您将收到错误消息:
LaTeX 错误:出现问题 - 也许缺少 \item。
如果您提供的数字比总行数大得多,则可能会出现这种情况。
进一步的魔咒:
- 处理没有任何行被打印的情况。
为打印行的方式提供更大的灵活性。例如,在提供的示例中指定第一列的更好方法是:
\MyEnumeratedList{1,...,6}
参考:
另一个答案是,主要问题实际上是弄清楚如何指定你想要的东西:自动在复杂表中插入数据。
因此,对于这些类型的问题,如果提问者首先考虑以下问题,将会很有帮助:我要如何指定我想要的东西?
代码:
\documentclass{article}
\usepackage{xstring}
\newcounter{RowCounter}
\newcommand*{\ListOfRowsToDisplay}{}%
\newcommand*{\MyItem}[1]{%
% #1 = comma separated list of which rows to show
% #2 = item data
\stepcounter{RowCounter}%
% Add extra commas on what we are searching for and what we are searching in.
% Hence, to check if the number (for example), six is in the string we
% search for ",6,". This will prevent the returning of a false positive
% when the number 6 is not in the sting, but the digit 6 is used as part of a
% number. Say the search string is "23,25,26,27", now searching for ",6,"
% will result in not found, but searching for "6" would have resulted in the
% string being found.
\StrPosition{\ListOfRowsToDisplay}{,\arabic{RowCounter},}[\PositionInString]
\IfEq{\PositionInString}{0}{%
% This row number is not to be printed and we keep movin on
}{%
% This is a row that needs to be printed
\item #1
}%
}%
\newcommand*{\MyEnumeratedList}[1]{%
% #1 = comma separated list of which rows to show
\setcounter{RowCounter}{0}% reset as we are starting over
% Save the list of rows globally so to make the enumerated list easier to read
\xdef\ListOfRowsToDisplay{,#1,}%
\begin{enumerate}%
\MyItem{(1)(2)(3)}
\MyItem{(1,2)(3)}
\MyItem{(1,3)(2)}
\MyItem{(2,3)(1)}
\MyItem{(1, 2, 3)}
\MyItem{(1, 3, 2)}
\MyItem{(1)(2)(3)(4)}
\MyItem{(1,3)(2)(4)}
\end{enumerate}%
}%
\begin{document}
\begin{minipage}{0.30\linewidth}%
\MyEnumeratedList{1,2,3,4,5,6}
\end{minipage}%
\begin{minipage}{0.30\linewidth}%
\MyEnumeratedList{7,8}
\end{minipage}%
\begin{minipage}{0.30\linewidth}%
\MyEnumeratedList{2,5,7}
\end{minipage}%
\end{document}