如何在不改变方程编号的情况下修改文档?

如何在不改变方程编号的情况下修改文档?

我有一份很长的文档,我想在其中插入一些文字;更正错误。但是,我不希望其余文本中的方程式(和其他)数字发生变化。因此,如果我在方程式 (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,其中方程式和可选的节或小节按您想要的方式编号。它有一个可选参数,可以是sectionsubsection,以及一些文本描述插入部分的必需参数。

因此,如果你想添加一个部分,请写

\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课程。对于其他课程,您可能需要对其进行调整。

相关内容