我正在尝试从同一个 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
则将其内容放在环境内,否则它只会添加到方程计数器中。您可以对环境执行相同的操作,只是使用。equation
1
figure
\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
。