如何从列表中选择并打印选定的项目

如何从列表中选择并打印选定的项目

我为教科书编写了解决方案手册,只需要打印奇数解决方案。我使用每个部分中的 \enumerate 对文本进行了非常简单的格式化。

示例代码:

\begin{enumerate}
\item
\item
\item
\end{enumerate}

\item由于我正尝试处理使用生成的列表,因此似乎我找到的每一点信息都不太符合我想要做的事情。

我该怎么做?谢谢。

答案1

欢迎!这是一种简单的方法,即不需要软件包,适用于具有奇数个条目的列表。此更新使用来自此答案的信息使其在各个层面发挥作用。

\documentclass{article} %
\makeatletter
\newcommand{\OnlyOddItems}{\let\olditem\item
\def\item##1\item{%
\expandafter\stepcounter{enum\romannumeral\@enumdepth}\olditem}}
\makeatother
\begin{document}
Original:
\begin{enumerate} 
\item A
\item B
\item C
\item D
\item E
\end{enumerate}

Modified:
\begin{enumerate}
\item A \OnlyOddItems 
\item B
\item C
\item D
\item E
\end{enumerate}

Modified at a deeper level:
\begin{enumerate}
\item
\begin{enumerate}
\item A \OnlyOddItems 
\item B
\item C
\item D
\item E
\end{enumerate}
\item purr
\item pft
\end{enumerate}

\end{document}

在此处输入图片描述

或者,如果您想要的是 1.、2.、3.。

\documentclass{article} %
\newcommand{\OnlyOddItems}{\let\olditem\item
\def\item##1\item{\olditem}}
\begin{document}
Original:
\begin{enumerate} 
\item A
\item B
\item C
\item D
\item E
\end{enumerate}

Modified:
\begin{enumerate}
\item A \OnlyOddItems 
\item B
\item C
\item D
\item E
\end{enumerate}

\end{document}

在此处输入图片描述

答案2

为了能够在解决方案中嵌套列表,我选择用\sol而不是 来引入解决方案\item

这使得按顺序存储解决方案并仅输出我们想要的解决方案成为可能。

我定义了三种可能的选择:evenoddlist

\documentclass{article}
\usepackage{xparse,enumitem}

\newlist{innersolutions}{enumerate}{1}
\setlist[innersolutions]{label=\arabic*.}

\ExplSyntaxOn

\NewDocumentEnvironment{solutions}{O{} +b}
 {
  \begin{innersolutions}
  \molina_solutions:nn { #1 } { #2 }
  \end{innersolutions}
 }
 {}

\seq_new:N \l__molina_solutions_items_seq
\clist_new:N \l__molina_solutions_list_clist

\keys_define:nn { molina/solutions }
 {
  odd  .code:n = \cs_set_eq:NN \__molina_solutions_if_good:nTF \int_if_odd:nTF,
  even .code:n = \cs_set_eq:NN \__molina_solutions_if_good:nTF \int_if_even:nTF,
  list .code:n = \clist_set:Nn \l__molina_solutions_list_clist { #1 }
                 \cs_set:Npn \__molina_solutions_if_good:nTF ##1 ##2 ##3
                  {
                   \clist_if_in:NnTF \l__molina_solutions_list_clist { ##1 } { ##2 } { ##3 }
                  },
 }

\cs_new_protected:Nn \molina_solutions:nn
 {
  \seq_set_split:Nnn \l__molina_solutions_items_seq { \sol } { #2 }
  \seq_pop_left:NN \l__molina_solutions_items_seq \l_tmpa_tl
  \keys_set:nn { molina/solutions } { #1 }
  \seq_indexed_map_function:NN \l__molina_solutions_items_seq \__molina_solutions_item:nn
 }

\cs_new_protected:Nn \__molina_solutions_item:nn
 {
  \__molina_solutions_if_good:nTF { #1 }
   {
    \item #2
   }
   {
    \stepcounter{innersolutionsi}
   }
 }

\ExplSyntaxOff

\begin{document}

Odd numbered
\begin{solutions}[odd]
\sol yes
\sol no
\sol yes
\sol no
\end{solutions}

Even numbered
\begin{solutions}[even]
\sol no
\sol yes
\sol no
\sol yes
\sol no
\end{solutions}

Chosen 
\begin{solutions}[list={1,3,4,6}]
\sol yes
\sol no
\sol yes
\sol yes
\sol no
\sol yes
\end{solutions}

\end{document}

在此处输入图片描述

相关内容