按列分组数据

按列分组数据

我将这三幅图放在一行中。现在我想将三列图放在下方,并将各自的数据对齐(图形下方的对齐方式实际上并不重要)。

这就是我所拥有的:

\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

这似乎是另一个案例(请参阅下面参考资料中的早期案例),其中最重要的事情是弄清楚到底如何您想指定要打印哪些项目吗?因此,这里是您可以指定数据的哪些行最终出现在每一列中。

  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它在该列表之前有一些初始化。

  2. 现在,无论您想在何处使用此enumerated列表,只需指定实际要打印的行即可。因此,如果您只想打印第 2、5 和 7 行,您可以这样写:

    \MyEnumeratedList{2,5,7}
    

不会打印此列表中未指定的任何行。

因此,根据提供的数据,我已打印了问题中指定的行。未指定第 3 列,因此我为该列选择了第 2、5 和 7 行:

在此处输入图片描述

笔记:

  • 我假设列表的每一列都从 1 开始连续编号。如果不希望使用另一个计数器进行编号,则将保留三列项目的编号。
  • 我使用了 threeminipages来显示三列,正如 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}

相关内容