具有自己的行号的环境

具有自己的行号的环境

我想创建一个具有自己的行号的环境,也就是说:

(1)此环境中的线路为不是计算lineno

(2)它本身有一个连续的行号,显示方程式编号

因此,假设这个环境有名称MYenv,我想要这样:

\documentclass{article}

\usepackage{lineno} % here I didn't use [mathlines]

\begin{document}
    \linenumbers

    TEXT

    \begin{MYenv}
        TEXT \[x\] TEXT
    \end{MYenv}

    TEXT

    \[y\]

    \begin{MYenv}
        TEXT
    \end{MYenv}
\end{document}

产生类似的东西

1    | TEXT
MY1  | TEXT
MY2  | x
MY3  | TEXT
2    | TEXT
     | y
MY4  | TEXT

应该怎样定义这样的环境?

答案1

下面的代码定义了一个条件,\ifLNturnsON记录上下文中是否开启了行号,内部MYenv使用计数器myLN存储本环境中的行号,同时将计数器的值存储linenumber在中recordLN,并在之后恢复正常行号MYenv,使得主文本和环境MYenv有单独的行号。

至于显示数学的编号,它使用来自这个答案。无论在正文中是否启用了该选项,环境MYenv都会使用 来对显示的数学进行编号。因此在下面的示例中,您可以看到显示的数学已在 内编号( ),但在正文中没有。\linenumberdisplaymath[mathlines]\[x\]MYenv

在此处输入图片描述

\documentclass{article}

\usepackage{lineno}

\newif\ifLNturnsON

\newcounter{recordLN}
\newcounter{myLN}
\setcounter{myLN}{1}

\renewcommand\makeLineNumber{\hss\scriptsize\ttfamily \LineNumber~$|$\hspace{1em}}%

\newenvironment{MYenv}
{%
\setcounter{recordLN}{\value{linenumber}}%
\setcounter{linenumber}{\value{myLN}}%
\LNturnsONfalse%
\ifLineNumbers\LNturnsONtrue\fi\nolinenumbers%
\linenumbers%
\renewcommand\makeLineNumber{\hss\scriptsize\ttfamily MY \LineNumber~$|$\hspace{1em}}%
\linenumberdisplaymath% number displayed math
}
{%
\par%
\ifLNturnsON\linenumbers\fi%
\setcounter{myLN}{\value{linenumber}}%
\setcounter{linenumber}{\value{recordLN}}%
}


\usepackage{etoolbox}
\RequirePackage{mathtools}

%% From https://tex.stackexchange.com/a/461192
% Patch 'normal' math environments:
\newcommand*\linenomathpatch[1]{%
    \cspreto{#1}{\linenomath}%
    \cspreto{#1*}{\linenomath}%
    \cspreto{end#1}{\endlinenomath}%
    \cspreto{end#1*}{\endlinenomath}%
}
% Patch AMS math environments:
\newcommand*\linenomathpatchAMS[1]{%
    \cspreto{#1}{\linenomathAMS}%
    \cspreto{#1*}{\linenomathAMS}%
    \csappto{end#1}{\endlinenomath}%
    \csappto{end#1*}{\endlinenomath}%
}
% Define \linenomathAMS depending on whether 'mathlines' option is provided
\expandafter\ifx\linenomath\linenomathWithnumbers
    \let\linenomathAMS\linenomathWithnumbers
% The following line gets rid of an extra line numbers at the bottom:
    \patchcmd\linenomathAMS{\advance\postdisplaypenalty\linenopenalty}{}{}{}
\else
    \let\linenomathAMS\linenomathNonumbers
\fi

\linenomathpatch{equation}
\linenomathpatchAMS{gather}
\linenomathpatchAMS{multline}
\linenomathpatchAMS{align}
\linenomathpatchAMS{alignat}
\linenomathpatchAMS{flalign}


\usepackage[skip=0pt]{parskip}

\begin{document}
    \linenumbers

    TEXT

    \begin{MYenv}
        TEXT \[x\] TEXT
    \end{MYenv}

    TEXT

    \[y\]

    \begin{MYenv}
        TEXT
    \end{MYenv}
\end{document}

相关内容