迭代两个文本元素列表(或一对元素的列表)

迭代两个文本元素列表(或一对元素的列表)

假设我有两个文本元素列表 -L1,L2,L3,...,LnR1,R2,R3,...Rn- 或一个对列表 - (L1,R1),(L2,R2),(L3,R3),...,(Ln,Rn)。我想对它们进行迭代,以便itemize在 2 列paracol环境中生成一个列表,如下所示:

\begin{paracol}{2}
  \begin{itemize}
    \item L1
    \switchcolumn
    \item R1

    \switchcolumn*

    \item L2
    \switchcolumn
    \item R2

    \switchcolumn*

    \item L3
    \switchcolumn
    \item R3

    \switchcolumn*

    ...

    \switchcolumn*
    
    \item Ln
    \switchcolumn
    \item Rn
  \end{itemize}
\end{paracol}

我怎样才能实现这个目标?

答案1

这是一个纯 LaTeX 解决方案。将以下几行添加到您的序言中。

\makeatletter
\newcommand\dopairs[1]{\@for\@tmp:={#1}\do{\expandafter\dopair\@tmp}}
\makeatother
\newcommand\dopair[2]{\item #1\switchcolumn\item #2\switchcolumn*}

该命令\dopair负责排版一对,其中#1对应于左侧项目和#2右侧项目。\dopairs接受一个参数,即以逗号分隔的左右对列表。

\documentclass{article}
\usepackage{paracol}
\makeatletter
\newcommand\dopairs[1]{\@for\@tmp:={#1}\do{\expandafter\dopair\@tmp}}
\makeatother
\newcommand\dopair[2]{\item #1\switchcolumn\item #2\switchcolumn*}
\begin{document}
\begin{paracol}{2}
  \begin{itemize}
    \dopairs{
      {$L_1$}{$R_1$},
      {$L_2$}{$R_2$},
      {$L_3$}{$R_3$},
      {$L_4$}{$R_4$},
      {$L_5$}{$R_5$}
    }
  \end{itemize}
\end{paracol}
\end{document}

在此处输入图片描述

编辑:有多种方法可以保持对的处理的灵活性。

  • \dopair调用之前重新定义\dopairs

    \renewcommand\dopair[2]{...}
    \dopairs{...}
    
  • 准备好所有可以处理对的方法,以及调用之前所需的\let宏定义。\dopair\dopairs

    \newcommand\dopairA[2]{...}
    \newcommand\dopairB[2]{...}
    \newcommand\dopairC[2]{...}
    ...
    \let\dopair\dopairB
    \dopairs{...}
    
  • 准备好所有可以作为单独宏处理的对的方法,并将宏的名称\dopairs作为另一个参数传递给。在这种情况下,您必须\dopairs按如下方式重新定义。

    \makeatletter
    \newcommand\dopairs[2]{\@for\@tmp:={#2}\do{\expandafter#1\@tmp}}
    \makeatother
    \newcommand\dopairA[2]{...}
    \newcommand\dopairB[2]{...}
    \newcommand\dopairC[2]{...}
    ...
    \dopairs\dopairA{{}{},{}{},...}
    
  • 指定对的处理特别指定当调用时\dopairs。重新定义\dopairs如下。

    \makeatletter
    \newcommand\dopairs[2]{%
      \def\dopair[2]{#1}%
      \@for\@tmp:={#2}\do{\expandafter\dopair\@tmp}%
    }
    \makeatother
    

    对于示例,\dopairs必须按如下方式使用:

    \dopairs{\item #1\switchcolumn\item #2\switchcolumn*}%
    {{}{},{}{},{}{},...}
    

    这是示例的完整代码,其输出与上面所示相同。

\documentclass{article}
\usepackage{paracol}
\makeatletter
\newcommand\dopairs[2]{%
  \def\dopair[2]{#1}%
  \@for\@tmp:={#2}\do{\expandafter\dopair\@tmp}%
}
\makeatother
\begin{document}
\begin{paracol}{2}
  \begin{itemize}
    \dopairs{\item #1\switchcolumn\item #2\switchcolumn*}%
    {
      {$L_1$}{$R_1$},
      {$L_2$}{$R_2$},
      {$L_3$}{$R_3$},
      {$L_4$}{$R_4$},
      {$L_5$}{$R_5$}
    }
  \end{itemize}
\end{paracol}
\end{document}

相关内容