我想创建一个具有自己的行号的环境,也就是说:
(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}