创建可以关闭的枚举环境

创建可以关闭的枚举环境

这个问题导致了一个新的方案的出现:
comment_io

我想使用枚举环境创建一个文档,然后可以在编译之前打开和关闭它。

例如,假设我有一个如下所示的部分:

\begin{enumerate}
    \item This is a test.
    \item This is another test.
    \item This is yet another test.
\end{enumerate}

在正常情况下,这将编译为包含三个项目的枚举列表,如下所示:

1. This is a test.
2. This is another test.
3. This is yet another test.

我希望有一种方法可以让这个特定的枚举环境消失,以便编译后的输出看起来像这样:

This is a test. This is another test. This is yet another test.

此外,我希望能够针对不同的环境全局执行此操作(也就是说,不必在本地级别编辑相关环境的每个实例)。

不过,我仍然希望能够在我的文档中保留其他枚举环境(即使它们嵌套在消失环境中)。

背景:我想使用《逻辑哲学论》的风格来撰写我的文本,将每个部分放在枚举层次结构中。但是,我还想能够删除此枚举,并将文本显示为普通文章。最后,在这篇普通文章中,我希望能够显示枚举列表(这样就不是《逻辑哲学论》枚举的一部分了)。

答案1

为了允许嵌套enumerate(或其他列表)环境仍然起作用,您需要捕获\item是否要在此新的 on-off 中将其设为无操作。为此,我们将其定义存储在前言中,并在每次使用enumerate开始时将其恢复使用enuemrateetoolbox\AtBeginEnvironment。如果您还计划嵌套其他列表,则需要\item以类似的方式进行恢复。

下面我定义了enumerate*在编译期间关闭的功能,但它仍然支持嵌套enumerate

在此处输入图片描述

\documentclass{article}
\usepackage{etoolbox}
\AtBeginEnvironment{enumerate}{\let\item\olditem}
\let\olditem\item
\newenvironment{enumerate*}
  {\par\let\item\relax}
  {\par}
\begin{document}

\begin{enumerate*}
  \item Something
    \begin{enumerate}
      \item Something else
      \item Another thing
        \begin{enumerate*}
          \item This is it
          \item This is another it
        \end{enumerate*}
    \end{enumerate}
  \item Last thing
\end{enumerate*}

\end{document}

enumerate*重新定义\item为不执行任何操作(为\relax)。因此,它将完全忽略任何可选参数(如果有)。也就是说,\item[<stuff>]将默认为[<stuff>]。如果需要,可以调整为吞噬可选参数。

还可以调整通过 插入的垂直调整enumerate*

答案2

谢谢你所有的回答。然而,最后,在尝试了所有不同的方法后,我终于决定用 Python 编写自己的脚本,根据文件中包含的某些命令注释掉(和取消注释)行。

例如,如果我的原始文件如下所示:

\begin{document}
    \begin{enumerate}
        \item 
        This is a test.
        \item 
        This is another test.
        \item 
        This is yet another test.
    \end{enumerate}
\end{document} 

并且我想要关闭所有这些枚举内容的选项,我只需在每行末尾添加一个小命令,然后就可以注释掉了,如下所示:

\begin{document}
    \begin{enumerate} %@
        \item %@
        This is a test.
        \item %@
        This is another test.
        \item %@
        This is yet another test.
    \end{enumerate} %@
\end{document}

然后让我的脚本发挥它的魔力,将文件变成如下所示的内容:

\begin{document}
%@    \begin{enumerate}
%@      \item
        This is a test.
%@      \item
        This is another test.
%@      \item
        This is yet another test.
%@  \end{enumerate}
\end{document}

这可能看起来很麻烦,但对我来说这是绝对最好的解决方案,因为我知道发生的一切。

如果有人想使用或查看用 Python 编写的程序,可以在以下位置找到:加拿大运输安全局

答案3

enumitem根据您的需要定义一个新的环境:

\documentclass{article}
\usepackage{enumitem}

\newlist{myenum}{enumerate*}{3}
\setlist[myenum]{leftmargin=!,label=\arabic*.}

\begin{document}
\begin{myenum}
\item This is a test.
\item This is another test.
\item This is yet another test.
  \begin{myenum}[label=]
  \item Second level This is a test.
  \item This is another test.
  \item This is yet another test.
    \begin{myenum}[label=\roman*.]
    \item Third level This is a test.
    \item This is another test.
    \item This is yet another test.
    \end{myenum}
  \end{myenum}
\end{myenum}
\end{document}

答案4

这几乎可以满足您的用例。它可能不适用于更复杂的枚举环境或选项 - 它不能按照您的意愿处理嵌套。

在此处输入图片描述

\documentclass{article}

\usepackage{etoolbox}
\newtoggle{killenumerate}

\toggletrue{killenumerate}

\newenvironment{myenumerate}
{\iftoggle{killenumerate}
  {\renewcommand{\item}{}}
  {\begin{enumerate}}
}
{\iftoggle{killenumerate}
  {}
  {\end{enumerate}}
}

\begin{document}

Enumeration switched off selectively in preamble.

\begin{myenumerate}
\item One item in myenumerate environment
\item Two
\item Three
\end{myenumerate}

\begin{enumerate}
\item One item in ordinary enumerate
\item Two
\item Three
\end{enumerate}

Enumeration switched on for the rest of the document.

\togglefalse{killenumerate}

\begin{myenumerate}
\item One item in myenumerate environment
\item 
\item Two
\item Three
\end{myenumerate}

\end{document}

相关内容