条件环境

条件环境

在大型文档中,我想根据全局变量“flagenv”的值使用“env1”或“env2”环境。我该如何定义环境“foo”,以便可以编写类似以下内容:

flagenv = 1    % 1 for env1 and 2 for env2
...
\begin{document}
  \begin{foo}        % will be read as \begin{env1}
  ...
  \end{foo}
\end{document}

谢谢。

答案1

就像是:

\documentclass{...
\usepackage{...
...
%\newcommand\flagenv{0 }%
\newcommand\flagenv{1 }%
%\newcommand\flagenv{2 }%
%\newcommand\flagenv{3 }%
...
\ifcase\flagenv
⟨ definition of environment foo in case \flagenv=0 ⟩
\or
⟨ definition of environment foo in case \flagenv=1 ⟩
\or
⟨ definition of environment foo in case \flagenv=2 ⟩
\or
⟨ definition of environment foo in case \flagenv=3 ⟩
\else
⟨ definition of environment foo in case \flagenv<0 or \flagenv>3 ⟩
\fi
...
\begin{document}
...
\begin{foo}
...
\end{foo}
...
\end{document}

答案2

当您\begin{env1}...\end{env1}大致写下发生的事情时,LaTeX 会启动一个“组”,然后插入命令\env1...\endenv1。因此,要做到这一点,只需制作命令\foo\endfoo执行\env1等即可\endenv1,这很容易使用\letcs来自的命令来完成电子工具箱包。更详细地说,

\documentclass{article}
\usepackage{etoolbox}
\usepackage{verbatim}

\newenvironment{env1}{Environment 1\csuse{verbatim*}}{\csuse{endverbatim*}}
\newenvironment{env2}{Environment 2\verbatim}{\endverbatim}

\newcommand\SetFoo[1]{\letcs{\foo}{env#1}\letcs{\endfoo}{endenv#1}}

\begin{document}

   \SetFoo{1}
   \begin{foo}
     My little environment
   \end{foo}

   \SetFoo{2}
   \begin{foo}
     My little environment
   \end{foo}

\end{document}

产生输出

在此处输入图片描述

与 MWE 一样,您可以使用该命令在文档中多次\SetFoo更改环境的含义,包括在序言中仅更改一次。实际上,宏定义了环境,因此需要在第一个环境之前“调用”它。foo\SetFoo{?}foofoo

在上面的代码中,我展示了两种不同的verbatim环境用法示例。这可能适合您的用例,但如果不了解您要做什么,则无法保证这一点 - 这就是为什么最好在最小工作示例作为任何问题的一部分。

边注一般来说,LaTeX 命令中不应该包含数字,但是,如图所示,这对于环境来说是可以的,尽管这种用法可能会冒犯纯粹主义者。

相关内容