我有一份很长的文档,我想在其中插入一些文字;更正错误。但是,我不希望其余文本中的方程式(和其他)数字发生变化。因此,如果我在方程式 (4) 和方程式 (5) 之间插入方程式,我希望它们被编号为方程式 4a、4b、4c 或 4 bis、4 ter、4 quater。
我想到的解决方案如下:
\newcounter{equationbis}
\newcommand{\tagbis}{\stepcounter{equationbis}\tag{\arabic{equation}\alph{equationbis}}}
现在,当我插入一个等式时,我可以这样做:
\begin{equation}
4 = 5 \tagbis
\end{equation}
但是,这只适用于方程式,并且计数器必须手动重置。(使用 定义计数器\newcounter{equationbis}[equation]
会导致计数器在每个方程式之后重置。)
一个更实际的解决方案是我可以写类似的东西:
\startinsertion{about-four-and-five}
\section{About four and five}
Some rambling about four and five
\begin{equation}
4 = 5
\end{equation}
\endinsertion{about-four-and-five}
并自动将该部分编号为 3.7a(如果前一个部分的编号为 3.7)和公式 (4a)(如果前一个部分的编号为 (4))。
是否存在这样的功能?
答案1
这里我实现了一个环境addendum
,其中方程式和可选的节或小节按您想要的方式编号。它有一个可选参数,可以是section
或subsection
,以及一些文本描述插入部分的必需参数。
因此,如果你想添加一个部分,请写
\begin{addendum}[section]{...}
\section{...}
text and equations here
\end{addendum}
对于小节,请写入
\begin{addendum}[subsection]{...}
\subsection{...}
text and equations here
\end{addendum}
如果你只想要一些文字和方程式
\begin{addendum}{...}
text and equations here
\end{addendum}
请注意,addendum
环境不能相互嵌套。这是因为用于保存原始文件的 LaTeX 计数器始终是全局的。
在示例中,附录行、规则和蓝色只是为了更好地看到添加的部分。您可以根据需要进行更改(参见代码中的注释)。
代码:
\documentclass{book}
\usepackage{xcolor}
\makeatletter
% counters to store the original ones
\newcounter{orig@section}
\newcounter{orig@subsection}
\newcounter{orig@equation}
\newenvironment{addendum}[2][]{%
\begingroup
% save current counters
\setcounter{orig@section}{\value{section}}%
\setcounter{orig@subsection}{\value{subsection}}%
\setcounter{orig@equation}{\value{equation}}%
%
\def\@tempa{#1}\def\@tempb{section}%
\ifx\@tempa\@tempb
% reset counter
\setcounter{section}{0}%
% macro to print original counter
\def\theorig@section{\thechapter.\arabic{orig@section}}%
% redefine \the... to print the original counter first
\def\thesection{\theorig@section\alph{section}}%
\else
\def\@tempb{subsection}%
\ifx\@tempa\@tempb
\setcounter{subsection}{0}%
\def\theorig@subsection{\thesection.\arabic{orig@subsection}}%
\def\thesubsection{\theorig@subsection\alph{subsection}}%
\fi
\fi
%
\setcounter{equation}{0}%
\def\theorig@equation{\thechapter.\arabic{orig@equation}}%
\def\theequation{\theorig@equation\alph{equation}}%
% optional
\color{blue}% just for testing
\noindent\textbf{Addendum: #2}\par
\medskip\hrule\medskip\par\noindent
\ignorespaces% needed to get rid of the space introduced by \begin{addendum}{...}
}{%
% optional
\par\medskip\hrule\medskip\par
% restore counters
\setcounter{section}{\value{orig@section}}%
\setcounter{subsection}{\value{orig@subsection}}%
\setcounter{equation}{\value{orig@equation}}%
\endgroup
}
\makeatother
\begin{document}
\chapter{Some Chapter}
\section{About some Numbers}
Some rambling about numbers.
\begin{equation}
4 \ne 5
\end{equation}
\begin{addendum}[section]{as sections}
\section{Section about four and five}
Some rambling about four and five
\begin{equation}
4 = 5
\end{equation}
\subsection{Subsection about four and five}
Some rambling about four and five
\begin{equation}
4 = 5
\end{equation}
\subsection{Another subsection about four and five}
Some rambling about four and five
\begin{equation}
4 = 5
\end{equation}
\section{Another section about four and five}
Some rambling about four and five
\begin{equation}
4 = 5
\end{equation}
\end{addendum}
\section{About something else}
Some rambling about other things.
\begin{equation}
8 \ne 9
\end{equation}
\subsection{More on something else}
More rambling about other things.
\begin{equation}
12 \ne 15
\end{equation}
\begin{addendum}[subsection]{as subsections}
\subsection{Subsection about twelve and fivteen}
More rambling about other things.
\begin{equation}
12 = 15
\end{equation}
\subsection{Another subsection about twelve and fivteen}
More rambling about other things.
\begin{equation}
12 = 15
\end{equation}
\end{addendum}
\subsection{Even more on something else}
Even more rambling about other things.
\begin{equation}
20 \ne 21
\end{equation}
\begin{addendum}{just new equations}
Rambling about these numbers.
\begin{equation}
20 = 21
\end{equation}
\begin{equation}
20 = 21
\end{equation}
\end{addendum}
Another equation for other things.
\begin{equation}
30 \ne 31
\end{equation}
\end{document}
代码的工作原理是保存原始计数器、重置它们并更改宏以打印它们(\the...
)。计数器在环境结束时恢复。对于分段命令,必须注意只重新定义要插入的最高分段级别的计数器。为此,使用可选参数。
可以以类似的方式实现额外的计数器。但请注意不要更改由另一个计数器重置的计数器。例如,如果添加了对章节的支持,请注意不要更改插入章节的方程式计数器。
该addendum
环境适合该book
课程。对于其他课程,您可能需要对其进行调整。