我想定义一个列表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
方法。可以使用代表整数的来调用各个项目。xparse
expl3
\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}