是否可以在反向列表中中断并恢复(如 etemune)?

是否可以在反向列表中中断并恢复(如 etemune)?

我正在尝试找到一种使用反向列表来中断和恢复的方法。

看起来环境etaremune和选项resume不兼容。

我能做些什么吗?

谢谢。

答案1

据我所知,你不能立即做到这一点,但稍加调整就可以实现。

resume下面是一个环境密钥的实现etaremune,它模仿了包中相同密钥的行为enumitem。修改enumitem为倒数计数也应该是可能的,但可能需要付出更多努力。

\documentclass{article}
\usepackage{etaremune}
\usepackage{etoolbox} %% For \AtEndEnvironment

\makeatletter %% <- change @ so that it can be used in macro names
  %% Define the resume key for etaremune:
  \define@boolkey[EM]{etaremune}{resume}[true]{}
  \presetkeys[EM]{etaremune}{resume=false}{} %% <- false by default

  %% Increase starting value of previous etaremune environment if resuming
  \AtEndEnvironment{etaremune}{%
    \ifEM@etaremune@resume
      \EM@resumewrite{\csname EM@prevlist@\@roman{\@enumdepth}\endcsname}{\EM@currlist}%
    \fi
    \expandafter\xdef\csname EM@prevlist@\@roman{\@enumdepth}\endcsname{\EM@currlist}%
  }
  \newcommand*\EM@resumewrite[2]{% %% Expand arguments and then call EM@resume@write@
    \begingroup
      \edef\temp{\noexpand\EM@resumewrite@
        {\expandafter\string\csname etaremune@#1\endcsname}%
        {\expandafter\string\csname etaremune@#2\endcsname}}%
      \temp
    \endgroup
  }
  \newcommand*\EM@resumewrite@[2]{% %% Write to aux file
    \immediate\write\@auxout{\xdef#1{\string\noexpand\string\the\numexpr#1+\string\noexpand#2 }}%
  }
\makeatother %% <- change @ back

\begin{document}

\begin{etaremune}
\item Some words \item More words
\end{etaremune}

Interruption

\begin{etaremune}[resume]
\item
    Some words
\item
    More words
    \begin{etaremune}
    \item Some words \item More words
    \end{etaremune}
    Interruption
    \begin{etaremune}[resume]
    \item Some words \item More words
    \end{etaremune}
\end{etaremune}

Interruption

\begin{etaremune}[resume]
\item Some words \item More words \item Final words
\end{etaremune}

\end{document}

在此处输入图片描述


工作原理:

etaremune包将每个环境的起始值写入etaremune辅助文件。<n>第个环境的值存储在宏中\etaremune@<n><n>格式为罗马数字)。在每个环境开始时etaremune,枚举计数器都会设置为此值(加一,因为它将减少)。

因此,我们唯一要做的就是,\etaremune@<m>每当下一个etaremune处于相同深度的环境有键时,修改的值resume。不过,当有多个中断时,让它工作(分两次运行)有点棘手。我所做的就是写

\xdef \etaremune@<m>{\noexpand\the\numexpr \etaremune@<m>+\noexpand\etaremune@<n> }

<n>每当-thetaremune环境恢复 -th时,都会添加到辅助文件中<m>。这将设置\etaremune@<m>为其原始值与 的值之和\etaremune@<n>。之所以有 s,是因为如果稍后更改(由于其下方存在另一个),\noexpand的值\etaremune@f<m>将受到影响。\etaremune@<n>resume

相关内容