602 lines
22 KiB
TeX
602 lines
22 KiB
TeX
%% This is file `1231num.sty',
|
|
%% Copyright (C) 2021 by Tin Lok Wong
|
|
%%
|
|
%% This work may be distributed and/or modified under the conditions
|
|
%% of the LaTeX Project Public License, either version 1.3 of this
|
|
%% license or (at your option) any later version. The latest version
|
|
%% of this license is in
|
|
%%
|
|
%% http://www.latex-project.org/lppl.txt
|
|
%%
|
|
%% and version 1.3 or later is part of all distributions of LaTeX
|
|
%% version 2005/12/01 or later.
|
|
%%
|
|
%% This work has the LPPL maintenance status `maintained'.
|
|
%%
|
|
%% The Current Maintainer of this work is Tin Lok Wong.
|
|
%%
|
|
%% File last modified: 2021/10/06
|
|
|
|
% If hyperref is needed, then load it first.
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{1231num}[2021/02/26 v0.0 CS1231 line numbers]
|
|
|
|
\RequirePackage{amsmath}% to align in math
|
|
\RequirePackage{tabto}% for starting a pfarray mid-line
|
|
|
|
\newlength{\numpf@templen}
|
|
|
|
\let\pfln\item
|
|
\let\lnref\ref
|
|
|
|
% Parameters that controls the margins for proofs
|
|
\newlength{\pfmargin} \setlength{\pfmargin}{1em}
|
|
\newlength{\pflabelwdI} \setlength{\pflabelwdI}{1.2em}
|
|
\newlength{\pflabelwdII} \setlength{\pflabelwdII}{2.0em}
|
|
\newlength{\pflabelwdIII}\setlength{\pflabelwdIII}{2.8em}
|
|
\newlength{\pflabelwdIV} \setlength{\pflabelwdIV}{3.6em}
|
|
\newlength{\pflabelwdV} \setlength{\pflabelwdV}{4.4em}
|
|
\newlength{\pflabelwdi}
|
|
\newlength{\pflabelwdii}
|
|
\newlength{\pflabelwdiii}
|
|
\newlength{\pflabelwdiv}
|
|
\newlength{\pflabelwdv}
|
|
% Define the usual spacing around and within proofs.
|
|
\def\numpf@seti{%
|
|
\def\@listi{\leftmargin\pflabelwdi
|
|
\advance\leftmargin\labelsep
|
|
\labelwidth\pflabelwdi
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setii{%
|
|
\def\@listii{\leftmargin\pflabelwdii
|
|
\advance\leftmargin\labelsep
|
|
\labelwidth\pflabelwdii
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setiii{%
|
|
\def\@listiii{\leftmargin\pflabelwdiii
|
|
\advance\leftmargin\labelsep
|
|
\labelwidth\pflabelwdiii
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setiv{%
|
|
\def\@listiv {\leftmargin\pflabelwdiv
|
|
\advance\leftmargin\labelsep
|
|
\labelwidth\pflabelwdiv
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setv{%
|
|
\def\@listv {\leftmargin\pflabelwdv
|
|
\advance\leftmargin\labelsep
|
|
\labelwidth\pflabelwdv
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
% Alternative set of spacing that saves more space.
|
|
\def\numpf@seti@star{%
|
|
\def\@listi{\leftmargin\z@
|
|
\labelwidth\pflabelwdi
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep \z@}%
|
|
}
|
|
\def\numpf@setii@star{%
|
|
\def\@listii{\leftmargin\pfmargin
|
|
\labelwidth\pflabelwdii
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setiii@star{%
|
|
\def\@listiii{\leftmargin\pfmargin
|
|
\labelwidth\pflabelwdiii
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setiv@star{%
|
|
\def\@listiv {\leftmargin\pfmargin
|
|
\labelwidth\pflabelwdiv
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
\def\numpf@setv@star{%
|
|
\def\@listv {\leftmargin\pfmargin
|
|
\labelwidth\pflabelwdv
|
|
\topsep \z@
|
|
\parsep \z@
|
|
\itemsep \z@
|
|
\partopsep\z@}%
|
|
}
|
|
|
|
% There are several places in which
|
|
% things with beamer are different from standand LaTeX:
|
|
% - the max depth of enumerate allowed;
|
|
% - the way enumerate displays the numbering;
|
|
% - the macros used to display the numbers;
|
|
% - the need to specify colours and fonts with beamer;
|
|
% - overlay options are available with beamer;
|
|
% - beamer sets additional parameters when entering a new enumerate.
|
|
\@ifclassloaded{beamer}{%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Definitions for standard BEAMER %
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Here I increase the max depth of the enumerate environment.
|
|
% Modified from beamerbaselocalstructure.sty
|
|
\@definecounter{enumiv}
|
|
\@definecounter{enumv}
|
|
\setlength\leftmarginiv{2em}
|
|
\setlength\leftmarginv {2em}
|
|
\def\@listiv {\leftmargin\leftmarginiv
|
|
\labelwidth\leftmarginiv
|
|
\advance\labelwidth-\labelsep}
|
|
\def\@listv {\leftmargin\leftmarginv
|
|
\labelwidth\leftmarginv
|
|
\advance\labelwidth-\labelsep}
|
|
\def\numpf@enumerate{%
|
|
\ifnum\@enumdepth>4\relax\@toodeep
|
|
\else%
|
|
\advance\@enumdepth\@ne%
|
|
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
|
|
\advance\@itemdepth\@ne%
|
|
\fi%
|
|
\beamer@computepref\@enumdepth% sets \beameritemnestingprefix
|
|
\edef\beamer@enumtempl{enumerate \beameritemnestingprefix item}%
|
|
\@ifnextchar[{\beamer@@enum@}{\beamer@enum@}}
|
|
\let\endnumpf@enumerate\endenumerate
|
|
\def\beamer@computepref#1{%
|
|
\let\beameritemnestingprefix\@empty%
|
|
\ifcase#1\or\or\def\beameritemnestingprefix{sub}\or
|
|
\def\beameritemnestingprefix{subsub}\or
|
|
\def\beameritemnestingprefix{subsubsub}\or
|
|
\def\beameritemnestingprefix{subsubsubsub}\or
|
|
\@toodeep\fi}
|
|
\def\insertsubsubsubenumlabel{\theenumiv}
|
|
\def\insertsubsubsubsubenumlabel{\theenumv}
|
|
% Modified from beamercolorthemedefault.sty
|
|
\setbeamercolor{subsubsubitem}{parent=subsubitem}
|
|
\setbeamercolor{subsubsubsubitem}{parent=subsubsubitem}
|
|
\setbeamercolor{enumerate subsubsubitem}{parent=subsubsubitem}
|
|
\setbeamercolor{enumerate subsubsubsubitem}{parent=subsubsubsubitem}
|
|
% Modified from beamerfontthemedefault.sty
|
|
\setbeamerfont{enumerate subsubsubitem}{parent=subsubsubitem}
|
|
\setbeamerfont{enumerate subsubsubsubitem}{parent=subsubsubsubitem}
|
|
\setbeamerfont{itemize/enumerate body}{}
|
|
\setbeamerfont{itemize/enumerate subbody}{size=\normalfont}
|
|
\setbeamerfont{itemize/enumerate subsubbody}{size=\normalfont}
|
|
\setbeamerfont{itemize/enumerate subsubsubbody}{size=\normalfont}
|
|
\setbeamerfont{itemize/enumerate subsubsubsubbody}{size=\normalfont}
|
|
\setbeamercolor{enumerate subsubsubbody}{}
|
|
\setbeamercolor{enumerate subsubsubsubbody}{}
|
|
% Modified from beamerinnerthemedefault.sty
|
|
\defbeamertemplate*{enumerate subsubsubitem}{default}
|
|
{\usebeamertemplate*{enumerate subsubitem}\insertsubsubsubenumlabel.}
|
|
\defbeamertemplate*{enumerate subsubsubsubitem}{default}
|
|
{\usebeamertemplate*{enumerate subsubsubitem}\insertsubsubsubsubenumlabel.}
|
|
\defbeamertemplate*{enumerate subsubsubbody begin}{default}{}
|
|
\defbeamertemplate*{enumerate subsubsubbody end}{default}{}
|
|
\defbeamertemplate*{enumerate subsubsubsubbody begin}{default}{}
|
|
\defbeamertemplate*{enumerate subsubsubsubbody end}{default}{}
|
|
% The proof environments in text mode
|
|
\newenvironment{numpf}
|
|
{\numpf@
|
|
\begin{subpf}}
|
|
{\end{subpf}\ignorespacesafterend}
|
|
\newenvironment{numpf*}
|
|
{\numpf@
|
|
\begin{subpf*}}
|
|
{\end{subpf*}\ignorespacesafterend}
|
|
\newcommand{\numpf@}{%
|
|
% Modified from beamerbaselocalstructure.sty to make left-aligned numbers
|
|
\def\beamer@enum@{%
|
|
\beamer@computepref\@itemdepth% sets \beameritemnestingprefix
|
|
\usebeamerfont{itemize/enumerate \beameritemnestingprefix body}%
|
|
\usebeamercolor[fg]{itemize/enumerate \beameritemnestingprefix body}%
|
|
\usebeamertemplate{itemize/enumerate \beameritemnestingprefix body begin}%
|
|
\expandafter
|
|
\list
|
|
{\usebeamertemplate{\beamer@enumtempl}}
|
|
{\usecounter\@enumctr%
|
|
\def\makelabel####1{{\hss\rlap{{%
|
|
\usebeamerfont*{enumerate \beameritemnestingprefix item}%
|
|
\usebeamercolor[fg]{enumerate \beameritemnestingprefix item}####1}}}\hfill}}%
|
|
\beamer@cramped%
|
|
\raggedright%
|
|
\beamer@firstlineitemizeunskip}%
|
|
% Modified from beamerinnerthemedefault.sty
|
|
\setbeamertemplate{enumerate item}{\insertenumlabel.}%
|
|
\setbeamertemplate{enumerate subitem}
|
|
{\usebeamertemplate*{enumerate item}\insertsubenumlabel.}%
|
|
\setbeamertemplate{enumerate subsubitem}
|
|
{\usebeamertemplate*{enumerate subitem}\insertsubsubenumlabel.}%
|
|
\setbeamertemplate{enumerate subsubsubitem}
|
|
{\usebeamertemplate*{enumerate subsubitem}\insertsubsubsubenumlabel.}%
|
|
\setbeamertemplate{enumerate subsubsubsubitem}
|
|
{\usebeamertemplate*{enumerate subsubsubitem}\insertsubsubsubsubenumlabel.}%
|
|
\renewcommand{\theenumi}{\arabic{enumi}}%
|
|
\renewcommand{\theenumii}{\arabic{enumii}}%
|
|
\renewcommand{\theenumiii}{\arabic{enumiii}}%
|
|
\renewcommand{\theenumiv}{\arabic{enumiv}}%
|
|
\renewcommand{\theenumv}{\arabic{enumv}}%
|
|
\renewcommand{\p@enumi}{}%
|
|
\renewcommand{\p@enumii}{\theenumi.}%
|
|
\renewcommand{\p@enumiii}{\p@enumii\theenumii.}%
|
|
\renewcommand{\p@enumiv}{\p@enumiii\theenumiii.}%
|
|
\renewcommand{\p@enumv}{\p@enumiv\theenumiv.}%
|
|
\ifcase\@enumdepth
|
|
\setlength\pflabelwdi{\pflabelwdI}%
|
|
\setlength\pflabelwdii{\pflabelwdII}%
|
|
\setlength\pflabelwdiii{\pflabelwdIII}%
|
|
\setlength\pflabelwdiv{\pflabelwdIV}%
|
|
\setlength\pflabelwdv{\pflabelwdV}%
|
|
\or
|
|
\setlength\pflabelwdii{\pflabelwdI}%
|
|
\setlength\pflabelwdiii{\pflabelwdII}%
|
|
\setlength\pflabelwdiv{\pflabelwdIII}%
|
|
\setlength\pflabelwdv{\pflabelwdIV}%
|
|
\setbeamertemplate{enumerate subitem}{\insertsubenumlabel.}%
|
|
\renewcommand{\p@enumii}{}%
|
|
\or
|
|
\setlength\pflabelwdiii{\pflabelwdI}%
|
|
\setlength\pflabelwdiv{\pflabelwdII}%
|
|
\setlength\pflabelwdv{\pflabelwdIII}%
|
|
\setbeamertemplate{enumerate subsubitem}{\insertsubsubenumlabel.}%
|
|
\renewcommand{\p@enumiii}{}%
|
|
\or
|
|
\setlength\pflabelwdiv{\pflabelwdI}%
|
|
\setlength\pflabelwdv{\pflabelwdII}%
|
|
\setbeamertemplate{enumerate subsubsubitem}{\insertsubsubsubenumlabel.}%
|
|
\renewcommand{\p@enumiv}{}%
|
|
\or
|
|
\setlength\pflabelwdv{\pflabelwdI}%
|
|
\setbeamertemplate{enumerate subsubsubsubitem}{\insertsubsubsubsubenumlabel.}%
|
|
\renewcommand{\p@enumv}{}%
|
|
\fi}
|
|
\newenvironment{subpf}
|
|
{\advance\@enumdepth1
|
|
\csname numpf@set\romannumeral\the\@enumdepth\endcsname
|
|
\advance\@enumdepth-1
|
|
\begin{numpf@enumerate}}
|
|
{\end{numpf@enumerate}\ignorespacesafterend}
|
|
\newenvironment{subpf*}
|
|
{\advance\@enumdepth1
|
|
\csname numpf@set\romannumeral\the\@enumdepth @star\endcsname
|
|
\advance\@enumdepth-1
|
|
\begin{numpf@enumerate}}
|
|
{\end{numpf@enumerate}\ignorespacesafterend}
|
|
\newcommand{\linenum}
|
|
{\usebeamertemplate*{\beamer@enumtempl}}
|
|
% The \relax seems to help avoid an error
|
|
% if the immediately preceding \item has an overlay specification.
|
|
\newenvironment<>{pfarray}[1]
|
|
{\begin{uncoverenv}#2\pfln\relax\numpf@rray{#1}}
|
|
{\endarray\end{math}\end{uncoverenv}\ignorespacesafterend}
|
|
\newcommand{\subpfalign@@set}{%
|
|
\advance\@enumdepth\@ne
|
|
\setcounter{enum\romannumeral\the\@enumdepth}{1}%
|
|
\beamer@computepref\@enumdepth% sets \beameritemnestingprefix
|
|
\edef\beamer@enumtempl{enumerate \beameritemnestingprefix item}%
|
|
\let\numpf@amsmathLet@\Let@
|
|
\def\Let@{\let\\\numpf@spf@lignlb}}
|
|
}{%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Definitions for standard LaTeX %
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% Here I define one more layer for the numpf environment.
|
|
\@definecounter{enumv}
|
|
% Modified from report.cls
|
|
\renewcommand\theenumv{\@Roman\c@enumv}
|
|
\newcommand\labelenumv{\theenumv.}
|
|
\renewcommand\p@enumv{\p@enumiv\theenumiv}
|
|
% The proof environments in text mode
|
|
\newenvironment{numpf}
|
|
{\numpf@
|
|
\begin{subpf}}
|
|
{\end{subpf}\ignorespacesafterend}
|
|
\newenvironment{numpf*}
|
|
{\numpf@
|
|
\begin{subpf*}}
|
|
{\end{subpf*}\ignorespacesafterend}
|
|
\newcommand{\numpf@}{%
|
|
\renewcommand\labelenumi{\theenumi.}%
|
|
\renewcommand\theenumi{\arabic{enumi}}%
|
|
\renewcommand\p@enumi{}%
|
|
\renewcommand\labelenumii{\labelenumi\theenumii.}%
|
|
\renewcommand\theenumii{\arabic{enumii}}%
|
|
\renewcommand\p@enumii{\p@enumi\theenumi.}%
|
|
\renewcommand\labelenumiii{\labelenumii\theenumiii.}%
|
|
\renewcommand\theenumiii{\arabic{enumiii}}%
|
|
\renewcommand\p@enumiii{\p@enumii\theenumii.}%
|
|
\renewcommand\labelenumiv{\labelenumiii\theenumiv.}%
|
|
\renewcommand\theenumiv{\arabic{enumiv}}%
|
|
\renewcommand\p@enumiv{\p@enumiii\theenumiii.}%
|
|
\renewcommand\labelenumv{\labelenumiv\theenumv.}%
|
|
\renewcommand\theenumv{\arabic{enumv}}%
|
|
\renewcommand\p@enumv{\p@enumiv\theenumiv.}%
|
|
\ifcase\@enumdepth
|
|
\setlength\pflabelwdi{\pflabelwdI}%
|
|
\setlength\pflabelwdii{\pflabelwdII}%
|
|
\setlength\pflabelwdiii{\pflabelwdIII}%
|
|
\setlength\pflabelwdiv{\pflabelwdIV}%
|
|
\setlength\pflabelwdv{\pflabelwdV}%
|
|
\or
|
|
\setlength\pflabelwdii{\pflabelwdI}%
|
|
\setlength\pflabelwdiii{\pflabelwdII}%
|
|
\setlength\pflabelwdiv{\pflabelwdIII}%
|
|
\setlength\pflabelwdv{\pflabelwdIV}%
|
|
\renewcommand\labelenumii{\theenumii.}%
|
|
\renewcommand{\p@enumii}{}%
|
|
\or
|
|
\setlength\pflabelwdiii{\pflabelwdI}%
|
|
\setlength\pflabelwdiv{\pflabelwdII}%
|
|
\setlength\pflabelwdv{\pflabelwdIII}%
|
|
\renewcommand\labelenumiii{\theenumiii.}%
|
|
\renewcommand{\p@enumiii}{}%
|
|
\or
|
|
\setlength\pflabelwdiv{\pflabelwdI}%
|
|
\setlength\pflabelwdv{\pflabelwdII}%
|
|
\renewcommand\labelenumiv{\theenumiv.}%
|
|
\renewcommand{\p@enumiv}{}%
|
|
\or
|
|
\setlength\pflabelwdv{\pflabelwdI}%
|
|
\renewcommand\labelenumv{\theenumv.}%
|
|
\renewcommand{\p@enumv}{}%
|
|
\fi}
|
|
% Modified from latex.ltx to make left-aligned numbers
|
|
\newenvironment{subpf}{%
|
|
\ifnum \@enumdepth >4\@toodeep\else
|
|
\advance\@enumdepth\@ne
|
|
\csname numpf@set\romannumeral\the\@enumdepth\endcsname
|
|
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
|
|
\expandafter
|
|
\list
|
|
\csname label\@enumctr\endcsname
|
|
{\usecounter\@enumctr\def\makelabel##1{\hss\rlap{##1}\hfill}}%
|
|
\fi}{\endlist}
|
|
\newenvironment{subpf*}{%
|
|
\ifnum \@enumdepth >4\@toodeep\else
|
|
\advance\@enumdepth\@ne
|
|
\csname numpf@set\romannumeral\the\@enumdepth @star\endcsname
|
|
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
|
|
\expandafter
|
|
\list
|
|
\csname label\@enumctr\endcsname
|
|
{\usecounter\@enumctr\def\makelabel##1{\hss\rlap{##1}\hfill}}%
|
|
\fi}{\endlist}
|
|
\newcommand{\linenum}
|
|
{\csname labelenum\romannumeral\the\@enumdepth\endcsname}
|
|
\newenvironment{pfarray}
|
|
{\pfln\numpf@rray}
|
|
{\endarray\end{math}\ignorespacesafterend}
|
|
\newcommand{\subpfalign@@set}{%
|
|
\advance\@enumdepth\@ne
|
|
\setcounter{enum\romannumeral\the\@enumdepth}{1}%
|
|
\let\numpf@amsmathLet@\Let@
|
|
\def\Let@{\let\\\numpf@spf@lignlb}}
|
|
}
|
|
|
|
% Here are the proof environments in math mode.
|
|
% The stem is ``pfalign''.
|
|
% Prefixing by ``sub'' indicates a new layer in the line numbering.
|
|
% Suffixing by ``ed'' specifies that the materials are not displayed.
|
|
% An asterisk used with ``sub'' specifies that
|
|
% the space-saving margins are to be used.
|
|
% One can play with the usual parameters to modify the spacing, e.g.,
|
|
% \jot=0pt
|
|
% \abovedisplayskip=0pt
|
|
% \afterdisplayskip=0pt
|
|
% These have to be issued before the environment starts.
|
|
% Default overlay specifications in beamer do not apply to these commands.
|
|
|
|
\def\numpf@mknum@norm#1{\makebox[\labelwidth][l]{#1}\hspace{\labelsep}}
|
|
\def\numpf@mknum@star#1%
|
|
{\hspace{\pfmargin}\hspace{-\labelsep}\hspace{-\labelwidth}%
|
|
\makebox[\labelwidth][l]{#1}\hspace{\labelsep}}
|
|
|
|
\def\numpf@lign@mklbl{%
|
|
\edef\@currentlabel
|
|
{\csname p@enum\romannumeral\the\@enumdepth\endcsname
|
|
\csname theenum\romannumeral\the\@enumdepth\endcsname}%
|
|
% Adapted from \make@display@tag in amsmath.sty
|
|
\ifmeasuring@\else
|
|
\ifx\df@label\@empty\else
|
|
\@xp\ltx@label\@xp{\df@label}%
|
|
\global\let\df@label\@empty
|
|
\fi
|
|
\fi
|
|
}
|
|
|
|
\newenvironment{subpfalign}
|
|
{\let\numpf@mknum\numpf@mknum@norm\collect@body\subpfalign@}{}
|
|
\newenvironment{subpfalign*}
|
|
{\let\numpf@mknum\numpf@mknum@star\collect@body\subpfalign@}{}
|
|
\newcommand{\subpfalign@}[1]{\bgroup
|
|
\ifnum \@enumdepth >4\@toodeep\else\subpfalign@@{#1}\fi
|
|
\egroup\ignorespaces}
|
|
\newcommand{\subpfalign@@}[1]{\subpfalign@@set
|
|
\def\numpf@spf@lignlb{\relax\iffalse{\fi\ifnum0=`}\fi
|
|
\@ifstar{\numpf@spf@lignlb@star}{\numpf@spf@lignlb@}}%
|
|
\begin{flalign*}
|
|
% Hopefully no one uses \Let@ except amsmath.
|
|
\global\let\Let@\numpf@amsmathLet@
|
|
&\numpf@mknum{\linenum}%
|
|
\numpf@lign@mklbl
|
|
\end{flalign*}}
|
|
% The starred version has one fewer ampersand before the line break.
|
|
% Modified from amsmath.sty, especially \math@cr
|
|
\def\numpf@spf@lignlb@{%
|
|
\new@ifnextchar[\numpf@spf@lignlb@@{\numpf@spf@lignlb@@[\z@]}}
|
|
\def\numpf@spf@lignlb@@[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
&\numpf@lign@mklbl\math@cr@@@
|
|
\noalign{\vskip#1\relax}%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
&\numpf@mknum{\linenum}&}
|
|
\def\numpf@spf@lignlb@star{%
|
|
\new@ifnextchar[\numpf@spf@lignlb@@star{\numpf@spf@lignlb@@star[\z@]}}
|
|
\def\numpf@spf@lignlb@@star[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
\numpf@lign@mklbl\math@cr@@@
|
|
\noalign{\vskip#1\relax}%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
&\numpf@mknum{\linenum}&}
|
|
|
|
|
|
% This should store the current way to show the line number,
|
|
% wherever the command is.
|
|
% It should also step the counter.
|
|
% Currently, it only works for pfaligned.
|
|
\newcommand{\numpf@shownum}{}
|
|
\newcommand{\numpf@shownum@backup}{}
|
|
\newcommand{\skippfnum}{%
|
|
\global\let\numpf@shownum@backup\numpf@shownum
|
|
\global\def\numpf@shownum
|
|
{\global\let\numpf@shownum\numpf@shownum@backup}}
|
|
|
|
% If needed, one can adjust \minalignsep before pfaligned, as in
|
|
% \renewcommand\minalignsep{4cm}
|
|
% \jot in pfaligned is by default can set to 0pt.
|
|
% To change it back (locally), use
|
|
% \pfalignedjot=\jot
|
|
% \label's must be put at the beginning of the lines.
|
|
\newlength{\pfalignedjot}
|
|
\setlength{\pfalignedjot}{0pt}
|
|
% The only difference between the beamer and the non-beamer versions
|
|
% is the overlay option.
|
|
\@ifclassloaded{beamer}{%
|
|
\newenvironment<>{pfaligned}[1]
|
|
{\def\numpf@pf@ligned@txt{#1}%
|
|
\def\numpf@pf@ligned@overlay{#2}%
|
|
\collect@body\pfaligned@@}
|
|
{\ignorespacesafterend}
|
|
\newcommand{\pfaligned@@}[1]{%
|
|
\let\numpf@amsmathLet@\Let@
|
|
\def\Let@{\let\\\numpf@pf@lignedlb}%
|
|
\expandafter\onslide\numpf@pf@ligned@overlay{\pfln
|
|
\renewcommand{\numpf@shownum}{%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
\hspace{-\labelwidth}\hspace{-\labelsep}%
|
|
\numpf@mknum@norm{\linenum}}%
|
|
\makebox[\linewidth][l]{\begin{math}\jot\pfalignedjot\begin{aligned}[t]
|
|
% Hopefully no one uses \Let@ except amsmath.
|
|
\global\let\Let@\numpf@amsmathLet@
|
|
&\text{\numpf@pf@ligned@txt}%
|
|

|
|
\end{aligned}\end{math}}}\vspace{\pfalignedjot}}
|
|
}{%
|
|
\newenvironment{pfaligned}[1]
|
|
{\def\numpf@pf@ligned@txt{#1}%
|
|
\collect@body\pfaligned@@}{\ignorespacesafterend}
|
|
\newcommand{\pfaligned@@}[1]{%
|
|
\let\numpf@amsmathLet@\Let@
|
|
\def\Let@{\let\\\numpf@pf@lignedlb}%
|
|
\pfln
|
|
\renewcommand{\numpf@shownum}{%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
\hspace{-\labelwidth}\hspace{-\labelsep}%
|
|
\numpf@mknum@norm{\linenum}}%
|
|
\makebox[\linewidth][l]{\begin{math}\jot\pfalignedjot\begin{aligned}[t]
|
|
% Hopefully no one uses \Let@ except amsmath.
|
|
\global\let\Let@\numpf@amsmathLet@
|
|
&\text{\numpf@pf@ligned@txt}%
|
|

|
|
\end{aligned}\end{math}}\vspace{\pfalignedjot}}
|
|
}
|
|
% The starred version has one fewer ampersand after the line break.
|
|
% Modified from amsmath.sty, especially \math@cr
|
|
\def\numpf@pf@lignedlb{\relax\iffalse{\fi\ifnum0=`}\fi
|
|
\@ifstar{\numpf@pf@lignedlb@star}{\numpf@pf@lignedlb@}}
|
|
\def\numpf@pf@lignedlb@{%
|
|
\new@ifnextchar[\numpf@pf@lignedlb@@{\numpf@pf@lignedlb@@[\z@]}}
|
|
\def\numpf@pf@lignedlb@@[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
\math@cr@@@
|
|
\noalign{\vskip#1\relax}%
|
|
&\numpf@shownum&%
|
|
\edef\@currentlabel
|
|
{\csname p@enum\romannumeral\the\@enumdepth\endcsname
|
|
\csname theenum\romannumeral\the\@enumdepth\endcsname}}
|
|
\def\numpf@pf@lignedlb@star{%
|
|
\new@ifnextchar[\numpf@pf@lignedlb@@star{\numpf@pf@lignedlb@@star[\z@]}}
|
|
\def\numpf@pf@lignedlb@@star[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
\math@cr@@@
|
|
\noalign{\vskip#1\relax}%
|
|
&\numpf@shownum%
|
|
\edef\@currentlabel
|
|
{\csname p@enum\romannumeral\the\@enumdepth\endcsname
|
|
\csname theenum\romannumeral\the\@enumdepth\endcsname}}
|
|
|
|
% !!! dangerous bend !!!
|
|
% Partly from https://tex.stackexchange.com/a/541683
|
|
% One left-aligned column is always added at the beginning and
|
|
% one right-aligned column is always added at the end.
|
|
% Best used with \extracolsep plus \stretch{<factor>} or \fill.
|
|
% To temporarily get rid of the added stretchable space,
|
|
% issue \extracolsep{0pt}.
|
|
\newcommand{\numpf@rray}[1]{%
|
|
\tabto{\CurrentLineWidth}%
|
|
\begin{math}\everymath={\displaystyle}%
|
|
\let\ltx@label\label
|
|
\let\label\numpf@rray@label
|
|
\setlength{\numpf@templen}{\linewidth}%
|
|
\addtolength{\numpf@templen}{-\TabPrevPos}%
|
|
% Modified from array and tabular* in latex.ltx
|
|
\setlength\dimen@{\numpf@templen}%
|
|
\let\@acol\@arrayacol
|
|
\let\@classz\@arrayclassz
|
|
\let\@classiv\@arrayclassiv
|
|
\let\\\numpf@rraylb
|
|
\edef\@halignto{to\the\dimen@}\@tabarray[t]
|
|
{@{}l@{\extracolsep{\fill}}#1@{\extracolsep{\fill}}r@{}}}
|
|
% The starred form removes the ampersand before the line break.
|
|
\def\numpf@rraylb{\relax\iffalse{\fi\ifnum0=`}\fi
|
|
\@ifstar{\numpf@rraylb@star}{\numpf@rraylb@}}%
|
|
\def\numpf@rraylb@{%
|
|
\new@ifnextchar[\numpf@rraylb@@{\numpf@rraylb@@[\z@]}%
|
|
}
|
|
\def\numpf@rraylb@@[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
&\@arraycr[#1]%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
\hspace{-\labelwidth}\hspace{-\labelsep}%
|
|
\numpf@mknum@norm{\linenum}}
|
|
\def\numpf@rraylb@star{%
|
|
\new@ifnextchar[\numpf@rraylb@@star{\numpf@rraylb@@star[\z@]}%
|
|
}
|
|
\def\numpf@rraylb@@star[#1]{\ifnum0=`{\fi \iffalse}\fi
|
|
\@arraycr[#1]%
|
|
\refstepcounter{enum\romannumeral\the\@enumdepth}%
|
|
\hspace{-\labelwidth}\hspace{-\labelsep}%
|
|
\numpf@mknum@norm{\linenum}}
|
|
\def\numpf@rray@label#1{%
|
|
\edef\@currentlabel
|
|
{\csname p@enum\romannumeral\the\@enumdepth\endcsname
|
|
\csname theenum\romannumeral\the\@enumdepth\endcsname}%
|
|
\ltx@label{#1}}
|
|
|
|
% You may find \popqed and \qedhere helpful.
|
|
|
|
% To do
|
|
% - keyval list of options to control, say, spacing.
|
|
% - option to omit numbering for one line via \skippfnum
|
|
% for other environments
|
|
% - take care of itemize in addition to enumerate.
|
|
\endinput
|