![迭代两个文本元素列表(或一对元素的列表)](https://linux22.com/image/427214/%E8%BF%AD%E4%BB%A3%E4%B8%A4%E4%B8%AA%E6%96%87%E6%9C%AC%E5%85%83%E7%B4%A0%E5%88%97%E8%A1%A8%EF%BC%88%E6%88%96%E4%B8%80%E5%AF%B9%E5%85%83%E7%B4%A0%E7%9A%84%E5%88%97%E8%A1%A8%EF%BC%89.png)
假设我有两个文本元素列表 -L1,L2,L3,...,Ln
和R1,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}