创建可通过索引调用的列表

创建可通过索引调用的列表

我想定义一个列表cp,这样我就可以通过索引调用该列表中的元素。我希望类似下面的 MWE 会输出第一个日期,然后输出第二个日期。关于如何实现这一点有什么想法吗?我更愿意在不使用其他软件包的情况下做到这一点。

\documentclass{article}
\newcommand{\cp{1}}{\textbf{(1) Monday, March 27} \\}
\newcommand{\cp{2}}{\textbf{(2) Wednesday, March 29} \\}
\begin{document}
\cp{1}
\cp{2}
\end{document}

答案1

在此处输入图片描述

\documentclass{article}
% \newdate{..label..}{..date..}{..info..}
\newcommand\newdate[3]%
   {\expandafter\def\csname date:#1\endcsname{#2}%
    \expandafter\def\csname info:#1\endcsname{#3}%
   }

% \showdate{..label..}
\newcommand\showdate[1]%
   {\expandafter\csname date:#1\endcsname}

% \showinfo{..label..}
\newcommand\showinfo[1]%
   {\expandafter\csname info:#1\endcsname}

% \cp{..label..}
\newcommand\cp[1]%
   {\noindent
    \textbf{\showdate{#1}:} \showinfo{#1}
    \par
   }

\begin{document}
\newdate{1}{Monday, March 27}{My birthday}
\newdate{2}{Wednesday, March 29}{Call auntie}
\newdate{xxx}{In the near future}{Get rich}

\cp{1}
\cp{2}
\cp{xxx}
\end{document}

答案2

这是(加载包)并将条目存储在“变量”中的一种expl3方法。可以使用代表整数的来调用各个项目。xparseexpl3\seq\cp{X}X

只要可扩展性不是问题,这就提供了一种快速且安全的方式来执行索引访问,如果命令\cp应该是可扩展的,则可以给出另一种方法(稍后)。

该命令\populateindexlist使用一个;单独的索引条目列表并初始化该列表,即在存储之前将清除其中的任何现有内容。如果要作为内容的一部分,则必须将其与内容一起;包装成一对。{}

要将条目附加到列表,请使用\addtoindexlist

包装命令\indexformater旨在简化索引输出的格式。

\\在我看来,这些都没有必要。

如果\cp{X}调用时索引号大于元素数,则不会打印任何内容(没有任何进一步的警告)。目前还没有检查X < 0

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
\seq_new:N \l_shane_index_list 

\NewDocumentCommand{\populateindexlist}{+m}{%
  \seq_set_split:Nnn \l_shane_index_list {;} {#1}
}

\NewDocumentCommand{\addtoindexlist}{+m}{%
  \seq_set_split:Nnn \l_tmpa_list {;} {#1}
  \seq_map_inline:Nn \l_tmpa_list {
    \seq_put_right:Nn \l_shane_index_list {##1}
  }
}


\NewDocumentCommand{\cp}{m}{%
  \int_compare:nNnT {#1} < {\seq_count:N \l_shane_index_list +1} {%
    \indexformatter{#1}{\seq_item:Nn \l_shane_index_list {#1}}
  }
}

\ExplSyntaxOff

\newcommand{\indexformatter}[2]{%
  \textbf{(#1) #2}%
}

\populateindexlist{Monday, March 27 ;  {Wednesday, March 29}; {Wednesday; March 22}}

\parindent0em
\begin{document}

\cp{1}

\cp{3}

\cp{2}

\cp{4}


\addtoindexlist{Friday, April 7}

\cp{4}
\end{document}

在此处输入图片描述

相关内容