这个问题导致了一个新的方案的出现:
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
开始时将其恢复使用enuemrate
etoolbox
的\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}