保留标签/计数器的块注释

保留标签/计数器的块注释

我正在尝试从同一个 latex 源生成两个文档。一个是一组笔记(例如一本书),另一个是一组用于讲座的幻灯片。我想排除幻灯片中出现在书中的一些内容。

目前我正在使用注释包,重新定义我自己的命令,例如\slidesonly{Omitted text.}。它工作得很好,只是我希望每个文档中的公式编号和图形编号相同(即使幻灯片中排除了一些图形公式)。但注释包不会更新公式和图形计数器。

有谁知道有哪个软件包可以实现这个功能吗?

这是一个最小的工作示例。

\documentclass{article}
\usepackage{comment}

\begin{document}

Here is the first equation
\begin{equation}\label{eq:first}
a = b
\end{equation}

Here is the second equation, commented out.
\begin{comment}
\begin{equation}\label{eq:second}
a = b
\end{equation}
\end{comment}


Here is the third equation. 
\begin{equation}\label{eq:thrid}
e = f
\end{equation}
This is equation (\ref{eq:thrid}). It should be equation (3). 
\end{document}

答案1

可能有一个简单的方法可以做到这一点,使用评论包但我不知道它是如何工作的(特别是,从手册中我无法清楚地了解如何启用和禁用注释),所以我给出了另一种方法。

使用环境包和一个简单的 switch,很容易做你想做的事。首先,定义一个新的 if 语句

\newif\ifIncludeComments

如果你输入,\IncludeCommentsfalse那么注释环境的内容将被忽略;如果你使用,\IncludeCommentstrue那么注释将被打印。要定义注释环境,我们\NewEnviron使用环境包。此命令定义了一个环境,它将环境的内容提取到\BODY宏中,然后我们可以对其进行处理。使用它可以将comment环境定义为:

\NewEnviron{comment}{\ifIncludeComments\BODY\fi}

也就是说,comment当我们包含注释时,环境将打印其内容,否则它将忽略它们。如果我们在comment环境中有一个方程式,那么我们应该完全忽略内容为了保留方程编号,我们需要增加计数器equation。我们可以使用以下方法实现此目的:

\NewEnviron{cequation}{%
    \ifIncludeComments\equation\BODY\endequation% add equation
    \else\refstepcounter{equation}% step counter
    \fi%
}

这定义了一个新环境,如果我们要打印注释,cequation则将其内容放在环境内,否则它只会添加到方程计数器中。您可以对环境执行相同的操作,只是使用。equation1figure\refstepcounter{figure}

综合以上所有,你的 MWE 就变成:

\documentclass{article}
\usepackage{environ}
\newif\ifIncludeComments

\IncludeCommentsfalse
%\IncludeCommentstrue

\NewEnviron{comment}{\ifIncludeComments\BODY\fi}
\NewEnviron{cequation}{% comment for equations
    \ifIncludeComments\equation\BODY\endequation%
    \else\refstepcounter{equation}%
    \fi%
}
\NewEnviron{cfigure}{% comment for figures
    \ifIncludeComments\figure\BODY\endfigure%
    \else\refstepcounter{figure}%
    \fi%
}

\begin{document}
  Here is the first equation
  \begin{equation}\label{eq:first}
  a = b
  \end{equation}

  Here is the second equation, commented out.
  \begin{cequation}\label{eq:second}
  a = b
  \end{cequation}

  Here is the third equation.
  \begin{equation}\label{eq:third}
  e = f
  \end{equation}
  This is equation (\ref{eq:third}). It should be equation (3).
\end{document}

输出如下:

在此处输入图片描述

答案2

您可以使用lrbox。 的材料lrbox不会被忽略。它仍然被设置,但不是进入输出,而是进入框寄存器。因此所有计数器更改仍然存在。您需要minipage在 内添加一个lrbox,因为您想要垂直材料(并且lrbox主要是水平框,如\mbox):

\documentclass{article}
\newsavebox\commentbox
\newenvironment{comment}{%
  \begin{lrbox}{\commentbox}\minipage{\linewidth}
}{%
  \endminipage
  \end{lrbox}%
}

\begin{document}

Here is the first equation
\begin{equation}\label{eq:first}
a = b
\end{equation}

Here is the second equation, commented out.
\begin{comment}
\begin{equation}\label{eq:second}
a = b
\end{equation}
\end{comment}


Here is the third equation. 
\begin{equation}\label{eq:thrid}
e = f
\end{equation}
This is equation (\ref{eq:thrid}). It should be equation (3). 
\end{document}

在此处输入图片描述

但:不存在与 内部计数器相对应的标签comment,因为标签是在材料输出和comment环境没有输出时写入/生成的lrbox

相关内容