代码

代码

假设我有一系列项目。我想允许用户提供一个等于数字的键(此处名为“mainitems”)(默认值为 1,因为始终至少有 1 个主项目)。分配给 mainitems 键的项目数量将应用特殊格式。其余项目将应用其他格式。

代码

egreg 在此处提供了以下代码:https://tex.stackexchange.com/a/231077/13552

有一个动作函数可以将动作应用于每个项目。我的问题是关于将动作应用于指定数量的项目(将第 1-2 项加粗,并添加\hfill例如,)。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\listset}{O{default}m}
 {
  \seq_clear_new:c { l_macmadness_list_#1_seq }
  \seq_set_from_clist:cn { l_macmadness_list_#1_seq } { #2 }
 }
\NewDocumentCommand{\listappend}{O{default}m}
 {
  \clist_map_inline:nn { #2 }
   {
    \seq_put_right:cn { l_macmadness_list_#1_seq } { ##1 }
   }
 }
\NewDocumentCommand{\listprint}{+O{}}
 {
  \group_begin:
  \keys_set:nn { macmadness/lists } { #1 }
  \macmadness_print_list:V \l__macmadness_list_name_tl
  \group_end:
 }

\seq_new:N \l_macmadness_list_default_seq
\tl_new:N \l__macmadness_list_lastitem_tl

\keys_define:nn { macmadness/lists }
 {
  name .tl_set:N       = \l__macmadness_list_name_tl,
  name .initial:n      = default,
  action .code:n       = \cs_set_eq:NN \__macmadness_action:n #1,
  action .initial:n    = \use:n,
  separator .tl_set:N  = \l__macmadness_list_separator_tl,
  separator .initial:n = { ,~ },
 }

\cs_new_protected:Npn \macmadness_print_list:n #1
 {
  \seq_if_empty:cTF { l_macmadness_list_#1_seq }
   {
    $\langle$ \textit{empty~list} $\rangle$
   }
   {
    % split off the last item
    \seq_pop_right:cN { l_macmadness_list_#1_seq } \l__macmadness_list_lastitem_tl
    % print the items followed by the separator
    \seq_map_inline:cn
     { l_macmadness_list_#1_seq }
     {
      \__macmadness_action:n { ##1 } % the item
      \l__macmadness_list_separator_tl % the separator
     }
    % print the last item
    \__macmadness_action:n { \l__macmadness_list_lastitem_tl }
   }
 }
\cs_generate_variant:Nn \macmadness_print_list:n { V }

\ExplSyntaxOff

\newcommand{\addquotes}[1]{`#1'}
\newcommand{\inputlanguagefile}[1]{%
  \input{UserManual_#1}%
}

\listset[languages]{de,da,en}


\begin{document}

\title{\listprint[name=languages]}
\author{macmadness86}

\maketitle

\section{Examples of list management}

\listset{apples}
\listappend{oranges,strawberries}

\listprint

\listprint[
  separator={ $|$ },
  action=\addquotes
]

\listprint[
  name=languages,
  action=\addquotes,
]

\listset[empty]{}

\listprint[name=empty]

\section{The manuals}

\listprint[
  name=languages,
  separator=\par\bigskip,
  action=\inputlanguagefile,
]

\end{document}

相关内容