diff options
author | Karl Berry <karl@freefriends.org> | 2015-07-20 22:11:47 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-07-20 22:11:47 +0000 |
commit | d0ed4c6b7442c3b8d5334d5dd88b69380f73964b (patch) | |
tree | 0b05fd508be80443e15808ad67576dc094c86126 /Master/texmf-dist/tex/latex/reledmac/reledpar.sty | |
parent | e6ddecda975d353fc842ec9a616498a1ef02cca5 (diff) |
reledmac (20jul15)
git-svn-id: svn://tug.org/texlive/trunk@37912 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/reledmac/reledpar.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/reledmac/reledpar.sty | 2491 |
1 files changed, 2491 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/reledmac/reledpar.sty b/Master/texmf-dist/tex/latex/reledmac/reledpar.sty new file mode 100644 index 00000000000..c117a68534c --- /dev/null +++ b/Master/texmf-dist/tex/latex/reledmac/reledpar.sty @@ -0,0 +1,2491 @@ +%% +%% This is file `reledpar.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% reledpar.dtx (with options: `code') +%% +%% Author: Author: Peter Wilson ; Herries Press herries dot press at earthlink dot net ; Maïeul Rouquette maieul at maieul dot net +%% Copyright 2004, 2005 Peter R. Wilson +%% 2011- Maïeul Rouquette +%% 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 the license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of +%% LaTeX version 2003/06/01 or later. +%% +%% This work has the LPPL maintenance status "maintained". +%% +%% This work consists of the files listed in the README file. +%% + + + + + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{reledpar}[2015/07/19 v2.0.0 reledmac extension for parallel texts]% + +\RequirePackage{xspace}% +\newif\ifshiftedpstarts +\DeclareOption{shiftedpstarts}{\shiftedpstartstrue} +\DeclareOption{parledgroup}{\parledgrouptrue} +\DeclareOption{widthliketwocolumns}{\widthliketwocolumnstrue}% +\newif\ifsameparallelpagenumber% +\DeclareOption{sameparallelpagenumber}{\sameparallelpagenumbertrue}% +\ProcessOptions% +\newdimen\Lcolwidth + \Lcolwidth=0.45\textwidth +\newdimen\Rcolwidth + \Rcolwidth=0.45\textwidth +\newcommand{\reledpar@error}[2]{\PackageError{reledpar}{#1}{#2}} +\newcommand*{\led@err@TooManyPstarts}{% + \reledpar@error{Too many \string\pstart\space without printing. + Some text will be lost}{\@ehc}} +\newcommand*{\led@err@BadLeftRightPstarts}[2]{% + \reledpar@error{The numbers of left (#1) and right (#2) + \string\pstart s do not match}{\@ehc}} +\newcommand*{\led@err@LeftOnRightPage}{% + \reledpar@error{The left page has ended on a right page}{\@ehc}} +\newcommand*{\led@err@RightOnLeftPage}{% + \reledpar@error{The right page has ended on a left page}{\@ehc}} +\newcommand*{\led@err@Leftside@PreviousNotPrinted}{% + \reledpar@error{You call a new Leftside environment while the previous one has not been typeset by \string\Pages\space or \string\Columns}{\@ehc}} +\newcommand*{\led@err@Rightside@PreviousNotPrinted}{% + \reledpar@error{You call a new Rightside environment while the previous one has not been typeset by \string\Pages\space or \string\Columns}{\@ehc}} +\newcommand*{\led@err@Pages@InsideEnv}{% + \reledpar@error{\string\Pages\space must be called *outside* of the `pages` environment}{\@ehc}} +\newcommand*{\led@err@Columns@InsideEnv}{% + \reledpar@error{\string\Columns\space must be called *outside* of the `pairs` environment}{\@ehc}} +\newcommand{\led@error@fail@patch@thepage}{% + \reledpar@error{Fail to patch \string\@thepage\space command.}{\@ehc}% +}% +\newcommand{\led@error@fail@patch@pagenumbering}{% + \reledpar@error{Fail to patch \string\pagenumbering\space command.}{\@ehc}% +}% +\newcommand{\led@error@fail@patch@@outputpage}{% + \reledpar@error{Fail to patch \string\@outputpage\space command.}{\@ehc}% +}% +\newcount\section@numR + \section@numR=\z@ + \pst@rtedLfalse +\newif\ifpst@rtedR + +\newcommand*{\beginnumberingR}{% + \ifnumberingR + \led@err@NumberingStarted + \endnumberingR + \fi + \global\l@dnumpstartsR \z@ + \global\pst@rtedRfalse + \global\numberingRtrue + \global\advance\section@numR \@ne + \global\absline@numR \z@ + \gdef\normal@page@breakR{} + \gdef\l@prev@pbR{} + \gdef\l@prev@nopbR{} + \global\line@numR \z@ + \global\@lockR \z@ + \global\sub@lockR \z@ + \global\sublines@false + \global\let\next@page@numR\relax + \global\let\sub@change\relax + \message{Section \the\section@numR R }% + \line@list@stuffR{\jobname.\extensionchars\the\section@numR R}% + \l@dend@stuff + \setcounter{pstartR}{1} + \begingroup + \initnumbering@sectcountR + \gdef\eled@sectionsR@@{}% + \if@noeled@sec\else% + \makeatletter\InputIfFileExists{\jobname.eledsec\the\section@numR R}{}{}\makeatother% + \immediate\openout\eled@sectioningR@out=\jobname.eledsec\the\section@numR R\relax% + \fi% +} +\def\endnumberingR{% + \ifnumberingR + \global\numberingRfalse + \normal@pars + \ifnum\l@dnumpstartsR=0% + \led@err@NumberingWithoutPstart% + \fi% + \ifl@dpairing + \global\pst@rtedRfalse + \else + \ifx\insertlines@listR\empty\else + \global\noteschanged@true + \fi + \ifx\line@listR\empty\else + \global\noteschanged@true + \fi + \fi + \ifnoteschanged@ + \led@mess@NotesChanged + \fi + \else + \led@err@NumberingNotStarted + \fi + \endgroup + \if@noeled@sec\else% + \immediate\closeout\eled@sectioningR@out% + \fi% + } + +\newcounter{chapterR} +\newcounter{sectionR} +\newcounter{subsectionR} +\newcounter{subsubsectionR} +\newcommand{\initnumbering@sectcountR}{ + \let\c@chapter\c@chapterR + \let\c@section\c@sectionR + \let\c@subsection\c@subsectionR + \let\c@subsubsection\c@subsubsectionR +} +\newcommand*{\pausenumberingR}{% + \endnumberingR\global\numberingRtrue} +\newcommand*{\resumenumberingR}{% + \ifnumberingR + \global\pst@rtedRtrue + \global\advance\section@numR \@ne + \led@mess@SectionContinued{\the\section@numR R}% + \line@list@stuffR{\jobname.\extensionchars\the\section@numR R}% + \l@dend@stuff + \begingroup% + \initnumbering@sectcountR% + \else + \led@err@numberingShouldHaveStarted + \endnumberingR + \beginnumberingR + \fi} + +\newcommand*{\memorydumpL}{% + \endnumbering + \numberingtrue + \global\pst@rtedLtrue + \global\advance\section@num \@ne + \led@mess@SectionContinued{\the\section@num}% + \line@list@stuff{\jobname.\extensionchars\the\section@num}% + \l@dend@stuff} + +\newcommand*{\memorydumpR}{% + \endnumberingR + \numberingRtrue + \global\pst@rtedRtrue + \global\advance\section@numR \@ne + \led@mess@SectionContinued{\the\section@numR R}% + \line@list@stuffR{\jobname.\extensionchars\the\section@numR R}% + \l@dend@stuff} + + + +\newcommand*{\lineationR}[1]{{% + \ifnumbering + \led@err@LineationInNumbered + \else + \def\@tempa{#1}\def\@tempb{page}% + \ifx\@tempa\@tempb + \global\bypage@Rtrue + \global\bypstart@Rfalse + \unless\ifnocritical@% + \Xpstart[][false]% + \fi% + \else + \def\@tempb{pstart}% + \ifx\@tempa\@tempb + \global\bypage@Rfalse + \global\bypstart@Rtrue + \unless\ifnocritical@% + \Xpstart% + \fi% + \else + \def@tempb{section} + \ifx\@tempa\@tempb + \global\bypage@Rfalse% + \global\bypstart@Rfalse% + \unless\ifnocritical@% + \Xpstart[][false]% + \fi% + \else + \led@warn@BadLineation + \fi% + \fi + \fi + \fi}} +\WithSuffix\newcommand\lineation*[1]{% + \lineation{#1}% + \lineationR{#1}% +}% + +\newcount\line@marginR +\line@marginR=\@ne + +\newcounter{firstlinenumR} + \setcounter{firstlinenumR}{5} +\newcounter{linenumincrementR} + \setcounter{linenumincrementR}{5} +\newcounter{firstsublinenumR} + \setcounter{firstsublinenumR}{5} +\newcounter{sublinenumincrementR} + \setcounter{sublinenumincrementR}{5} + +\WithSuffix\newcommand\firstlinenum*[1]{% + \setcounter{firstlinenumR}{#1}% + \setcounter{firstlinenum}{#1}% +} +\WithSuffix\newcommand\linenumincrement*[1]{% + \setcounter{linenumincrementR}{#1}% + \setcounter{linenumincrement}{#1}% +} +\WithSuffix\newcommand\firstsublinenum*[1]{% + \setcounter{subfirstlinenumR}{#1}% + \setcounter{subfirstlinenum}{#1}% +} +\WithSuffix\newcommand\sublinenumincrement*[1]{% + \setcounter{sublinenumincrementR}{#1}% + \setcounter{sublinenumincrement}{#1}% +} +\newcommand{\setRlineflag}[1]{% + \gdef\@Rlineflag{#1}% +} +\setRlineflag{R} +\newcommand*{\linenumrepR}[1]{\@arabic{#1}} +\newcommand*{\sublinenumrepR}[1]{\@arabic{#1}} + +\newcommand*{\leftlinenumR}{% + \l@dlinenumR + \kern\linenumsep} +\newcommand*{\rightlinenumR}{% + \kern\linenumsep + \l@dlinenumR} +\newcommand*{\l@dlinenumR}{% + \numlabfont\linenumrepR{\line@numR}\@Rlineflag% + \ifsublines@ + \ifnum\subline@num>\z@ + \unskip\fullstop\sublinenumrepR{\subline@numR}% + \fi + \fi} + +\newcount\line@numR +\newcount\subline@numR +\newcount\absline@numR + +\list@create{\line@listR} +\list@create{\insertlines@listR} +\list@create{\actionlines@listR} +\list@create{\actions@listR} + +\newcount\page@numR + +\list@create{\linesinpar@listL} +\list@create{\linesinpar@listR} +\list@create{\maxlinesinpar@list} + +\newcommand{\list@clearing@regR}{% + \list@clear{\line@listR}% + \list@clear{\insertlines@listR}% + \list@clear{\actionlines@listR}% + \list@clear{\actions@listR}% + \list@clear{\linesinpar@listR}% + \list@clear{\linesonpage@listR} +} +\newcommand{\@nl@regR}{% + \ifx\l@dchset@num\relax \else + \advance\absline@numR \@ne + \set@line@action + \let\l@dchset@num\relax + \advance\absline@numR \m@ne + \advance\line@numR \m@ne% % do we need this? + \fi + \advance\absline@numR \@ne + \ifx\next@page@numR\relax \else + \page@action + \let\next@page@numR\relax + \fi + \ifx\sub@change\relax \else + \ifnum\sub@change>\z@ + \sublines@true + \else + \sublines@false + \fi + \sub@action + \let\sub@change\relax + \fi + \ifcase\@lockR + \or + \@lockR \tw@ + \or\or + \@lockR \z@ + \fi + \ifcase\sub@lockR + \or + \sub@lockR \tw@ + \or\or + \sub@lockR \z@ + \fi + \ifsublines@ + \ifnum\sub@lockR<\tw@ + \advance\subline@numR \@ne + \fi + \else + \ifnum\@lockR<\tw@ + \advance\line@numR \@ne \subline@numR \z@ + \fi + \fi} + +\newcount\last@page@numR + \last@page@numR=-10000 + + + + +\newcount\@lockR +\newcount\sub@lockR + +\newcommand*{\do@lockonR}{% + \xright@appenditem{\the\absline@numR}\to\actionlines@listR + \ifsublines@ + \xright@appenditem{-1005}\to\actions@listR + \ifnum\sub@lockR=\z@ + \sub@lockR \@ne + \else + \ifnum\sub@lockR=\thr@@ + \sub@lockR \@ne + \fi + \fi + \else + \xright@appenditem{-1003}\to\actions@listR + \ifnum\@lockR=\z@ + \@lockR \@ne + \else + \ifnum\@lockR=\thr@@ + \@lockR \@ne + \fi + \fi + \fi} + + +\newcommand{\do@lockoffR}{% + \xright@appenditem{\the\absline@numR}\to\actionlines@listR + \ifsublines@ + \xright@appenditem{-1006}\to\actions@listR + \ifnum\sub@lockR=\tw@ + \sub@lockR \thr@@ + \else + \sub@lockR \z@ + \fi + \else + \xright@appenditem{-1004}\to\actions@listR + \ifnum\@lockR=\tw@ + \@lockR \thr@@ + \else + \@lockR \z@ + \fi + \fi} + +\newcount\insert@countR +\newcommand*{\@ref@regR}[2]{% + \global\advance\@edtext@level by 1% + \global\insert@countR=#1\relax + \loop\ifnum\insert@countR>\z@ + \xright@appenditem{\the\absline@numR}\to\insertlines@listR + \global\advance\insert@countR \m@ne + \repeat + \begingroup + \let\@ref=\dummy@ref + \let\@lopR\@gobble + \let\page@action=\relax + \let\sub@action=\relax + \let\set@line@action=\relax + \let\@lab=\relax + \let\@lemma=\relax + \let\@sw\@gobblethree% + #2 + \global\endpage@num=\page@numR + \global\endline@num=\line@numR + \global\endsubline@num=\subline@numR + \endgroup + \xright@appenditem% + {\the\page@numR|\the\line@numR|% + \ifsublines@ \the\subline@numR \else 0\fi|% + \the\endpage@num|\the\endline@num|% + \ifsublines@ \the\endsubline@num \else 0\fi}\to\line@listR + \expandafter\list@create\expandafter{\csname sw@list@edtext@tmp@\the\@edtext@level\endcsname}% + \providebool{lemmacommand@\the\@edtext@level}% + \boolfalse{lemmacommand@\the\@edtext@level}% + #2 + \ifnum\@edtext@level>0% + \def\create@this@edtext@level{\expandafter\list@create\expandafter{\csname sw@list@edtextR@\the\@edtext@level\endcsname}}% + \ifcsundef{sw@list@edtextR@\the\@edtext@level}{\create@this@edtext@level}{}% + \letcs{\@tmp}{sw@list@edtextR@\the\@edtext@level}% + \letcs{\@tmpp}{sw@list@edtext@tmp@\the\@edtext@level}% + \xright@appenditem{\expandonce\@tmpp}\to\@tmp% + \global\cslet{sw@list@edtextR@\the\@edtext@level}{\@tmp}% + \fi% + \global\advance\@edtext@level by -1% +} +\renewcommand*{\@pend}[1]{% + \ifbypstart@\global\line@num=0\fi% + \xright@appenditem{#1}\to\linesinpar@listL} +\renewcommand*{\@pendR}[1]{% + \ifbypstart@R\global\line@numR=0\fi + \xright@appenditem{#1}\to\linesinpar@listR} + +\renewcommand*{\@lopL}[1]{% + \xright@appenditem{#1}\to\linesonpage@listL} +\renewcommand*{\@lopR}[1]{% + \xright@appenditem{#1}\to\linesonpage@listR} + +\newwrite\linenum@outR +\newif\iffirst@linenum@out@R + \first@linenum@out@Rtrue +\newcommand*{\line@list@stuffR}[1]{% + \read@linelist{#1}% + \iffirst@linenum@out@R + \immediate\closeout\linenum@outR + \global\first@linenum@out@Rfalse + \immediate\openout\linenum@outR=#1 + \immediate\write\linenum@outR{\string\line@list@version{\this@line@list@version}}% + \else + \if@minipage% + \leavevmode% + \fi% + \closeout\linenum@outR% + \openout\linenum@outR=#1% + \fi} + +\newcommand*{\new@lineL}{% + \write\linenum@out{\string\@nl[\the\c@page][\thepage]}} +\newcommand*{\new@lineR}{% + \write\linenum@outR{\string\@nl[\the\c@page][\thepage]}} + +\newcommand{\newseries@par}[1]{% + \unless\ifnofamiliar@% + \csgdef{onlysideX@#1}{}% + \global\newbool{keepforsideX@#1}% + \fi% + \unless\ifnocritical@% + \global\newbool{keepforXside@#1}% + \csgdef{Xonlyside@#1}{}% + \fi% + \unless\ifnofamiliar@% + \expandafter\list@create\csname footnote#1@mk\endcsname% + \expandafter\newcommand\csname footnote#1nomk\endcsname[1]{% + \toggletrue{nomk@}% + \csuse{footnote#1}{##1}% + \togglefalse{nomk@}% + \letcs{\@tmp}{footnote#1@mk}% + \numdef\@tmpa{\csuse{c@footnote#1}}% + \global\xright@appenditem{\@tmpa}\to\@tmp% + \global\cslet{footnote#1@mk}{\@tmp}% + }% + \expandafter\newcommand\csname footnote#1mk\endcsname{% + \letcs{\@tmp}{footnote#1@mk}% + \gl@p\@tmp\to\@tmpa% + \global\cslet{footnote#1@mk}{\@tmp}% + \letcs{\old@footnote}{c@footnote#1}% + \setcounter{footnote#1}{\@tmpa}% + \protected@csxdef{@thefnmark#1}{\csuse{thefootnote#1}}% + \csuse{@footnotemark#1}% + \setcounter{footnote#1}{\old@footnote}% + \xspace% + }% + \fi +}% +\unless\ifnocritical@% + \newhookcommand@series{Xonlyside}% +\fi% +\unless\ifnofamiliar@% + \newhookcommand@series{onlysideX}% +\fi + +\newcommand{\init@series@par}{% + \def\do##1{\newseries@par{##1}}% + \dolistloop{\@series}% +}% +\init@series@par% + +\list@create{\list@pstartL@pc}% +\list@create{\list@pstartR@pc}% +\def\dump@pstartL@pc{% + \xright@appenditem{\the\c@pstartL}\to\list@pstartL@pc% + \global\cslet{numberpstart@L\the\l@dnumpstartsL}{\ifnumberpstart}% +}% + +\def\dump@pstartR@pc{% + \xright@appenditem{\the\c@pstartR}\to\list@pstartR@pc% + \global\cslet{numberpstart@R\the\l@dnumpstartsR}{\ifnumberpstart}% +}% + +\def\restore@pstartL@pc{% + \ifx\list@pstartL@pc\empty\else% + \gl@p\list@pstartL@pc\to\@temp% + \global\c@pstartL=\@temp% + \fi% +}% +\def\restore@pstartR@pc{% + \ifx\list@pstartR@pc\empty\else% + \gl@p\list@pstartR@pc\to\@temp% + \global\c@pstartR=\@temp% + \fi% +}% +\newenvironment{pairs}{%} + \l@dpairingtrue + \l@dpagingfalse + \initnumbering@quote + \at@begin@pairs% +}{% + \l@dpairingfalse +} + +\newcommand{\AtBeginPairs}[1]{\xdef\at@begin@pairs{#1}}% +\def\at@begin@pairs{}% + +\newenvironment{pages}{% + \l@dpairingtrue + \l@dpagingtrue + \initnumbering@quote + \setlength{\Lcolwidth}{\textwidth}% + \setlength{\Rcolwidth}{\textwidth}% +}{% + \l@dpairingfalse + \l@dpagingfalse +} + + \newif\ifinstanzaL + \newif\ifinstanzaR +\newenvironment{Leftside}{% + \expandafter\ifvoid\csname l@dLcolrawbox1\endcsname\else% + \led@err@Leftside@PreviousNotPrinted% + \fi% + \ledRcolfalse + \setcounter{pstartL}{1} + \let\pstart\pstartL + \let\thepstart\thepstartL + \let\pend\pendL + \let\memorydump\memorydumpL + \Leftsidehook + \let\old@startstanza\@startstanza + \def\@startstanza[##1]{\global\instanzaLtrue\old@startstanza[##1]} +}{ + \Leftsidehookend} +\newcommand*{\Leftsidehook}{} +\newcommand*{\Leftsidehookend}{} +\newcommand*{\Rightsidehook}{} +\newcommand*{\Rightsidehookend}{} + +\newenvironment{Rightside}{% + \expandafter\ifvoid\csname l@dRcolrawbox1\endcsname\else% + \led@err@Rightside@PreviousNotPrinted% + \fi% + \ledRcoltrue + \let\beginnumbering\beginnumberingR + \let\endnumbering\endnumberingR + \let\pausenumbering\pausenumberingR + \let\resumenumbering\resumenumberingR + \let\memorydump\memorydumpR + \let\thepstart\thepstartR + \let\pstart\pstartR + \let\pend\pendR + \let\ledpb\ledpbR + \let\lednopb\lednopbR + \let\lineation\lineationR + \Rightsidehook + \let\old@startstanza\@startstanza + \def\@startstanza[##1]{\global\instanzaRtrue\old@startstanza[##1]} +}{% + \ledRcolfalse + \Rightsidehookend +} + +\newcount\num@linesR +\newbox\one@lineR +\newcount\par@lineR + +\newcounter{pstartL} +\renewcommand{\thepstartL}{{\bfseries\@arabic\c@pstartL}. } +\newcounter{pstartR} +\renewcommand{\thepstartR}{{\bfseries\@arabic\c@pstartR}. } + +\newcommandx*{\pstartL}[1][1]{% + \if@nobreak% + \let\@oldnobreak\@nobreaktrue% + \else% + \let\@oldnobreak\@nobreakfalse% + \fi% + \@nobreaktrue% + \ifluatex% + \xdef\l@luatextextdir@L{\the\luatextextdir}% + \xdef\l@luatexpardir@L{\the\luatexpardir}% + \xdef\l@luatexbodydir@L{\the\luatexbodydir}% + \fi% + \ifnumbering \else% + \led@err@PstartNotNumbered% + \beginnumbering% + \fi% + \ifnumberedpar@% + \led@err@PstartInPstart% + \pend% + \fi% + \ifpst@rtedL\else% + \list@clear{\inserts@list}% + \global\let\next@insert=\empty% + \global\pst@rtedLtrue% + \fi% + \begingroup\normal@pars% + \global\advance\l@dnumpstartsL \@ne% + \ifnum\l@dnumpstartsL>\l@dc@maxchunks% + \led@err@TooManyPstarts% + \global\l@dnumpstartsL=\l@dc@maxchunks% + \fi% + \global\setnamebox{l@dLcolrawbox\the\l@dnumpstartsL}=\vbox\bgroup% + \l@dzeropenalties% + \ifautopar\else% + \ifnumberpstart% + \ifsidepstartnum% + \else% + \thepstartL% + \fi% + \fi% + \fi% + \hsize=\Lcolwidth% + \numberedpar@true% + \iflabelpstart\protected@edef\@currentlabel% + {\p@pstartL\thepstartL}\fi% + \ifstrempty{#1}% + {\csgdef{before@pstartL@\the\l@dnumpstartsL}{\at@every@pstart}}% + {\csgdef{before@pstartL@\the\l@dnumpstartsL}{\noindent#1}}% + \at@every@pstart@call% + } +\newcommandx*{\pstartR}[1][1]{% + \if@nobreak% + \let\@oldnobreak\@nobreaktrue% + \else% + \let\@oldnobreak\@nobreakfalse% + \fi% + \@nobreaktrue% + \ifluatex% + \xdef\l@luatextextdir@R{\the\luatextextdir}% + \xdef\l@luatexpardir@R{\the\luatexpardir}% + \xdef\l@luatexbodydir@R{\the\luatexbodydir}% + \fi% + \ifnumberingR \else% + \led@err@PstartNotNumbered% + \beginnumberingR% + \fi% + \ifnumberedpar@% + \led@err@PstartInPstart% + \pendR% + \fi% + \ifpst@rtedR\else% + \list@clear{\inserts@listR}% + \global\let\next@insertR=\empty% + \global\pst@rtedRtrue% + \fi% + \begingroup\normal@pars% + \global\advance\l@dnumpstartsR \@ne% + \ifnum\l@dnumpstartsR>\l@dc@maxchunks% + \led@err@TooManyPstarts% + \global\l@dnumpstartsR=\l@dc@maxchunks% + \fi% + \global\setnamebox{l@dRcolrawbox\the\l@dnumpstartsR}=\vbox\bgroup% + \l@dzeropenalties% + \ifautopar\else% + \ifnumberpstart% + \ifsidepstartnum\else% + \thepstartR% + \fi% + \fi% + \fi% + \hsize=\Rcolwidth% + \numberedpar@true% + \iflabelpstart\protected@edef\@currentlabel% + {\p@pstartR\thepstartR}\fi% + \ifstrempty{#1}% + {\csgdef{before@pstartR@\the\l@dnumpstartsR}{\at@every@pstart}}% + {\csgdef{before@pstartR@\the\l@dnumpstartsR}{\noindent#1}}% + \at@every@pstart@call% + } +\newcommandx*{\pendL}[1][1]{% + \ifnumbering \else% + \led@err@PendNotNumbered% + \fi% + \ifnumberedpar@ \else% + \led@err@PendNoPstart% + \fi% + \endgraf\global\num@lines=\prevgraf\egroup% + \global\par@line=0% + \endgroup% + \ignorespaces% + \@oldnobreak% + \dump@pstartL@pc% + \ifnumberpstart% + \addtocounter{pstartL}{1}% + \fi + \parledgroup@beforenotes@save{L}% + \ifstrempty{#1}% + {\csgdef{after@pendL@\the\l@dnumpstartsL}{\at@every@pend}}% + {\csgdef{after@pendL@\the\l@dnumpstartsL}{\noindent#1}}% + } +\newcommandx*{\pendR}[1][1]{% + \ifnumberingR \else% + \led@err@PendNotNumbered% + \fi% + \ifnumberedpar@ \else% + \led@err@PendNoPstart% + \fi% + \endgraf\global\num@linesR=\prevgraf\egroup% + \global\par@lineR=0% + \endgroup% + \ignorespaces% + \@oldnobreak% + \dump@pstartR@pc% + \ifnumberpstart% + \addtocounter{pstartR}{1}% + \fi% + \parledgroup@beforenotes@save{R}% + \ifstrempty{#1}% + {\csgdef{after@pendR@\the\l@dnumpstartsR}{\at@every@pend}}% + {\csgdef{after@pendR@\the\l@dnumpstartsR}{\noindent#1}}% +} + +\newcommand{\AtEveryPstartCall}[1]{\gdef\at@every@pstart@call{#1}}% +\gdef\at@every@pstart@call{}% +\newif\ifprint@last@after@pendL% +\newif\ifprint@last@after@pendR% +\newbox\l@dleftbox +\newbox\l@drightbox + +\newcount\countLline + \countLline \z@ +\newcount\countRline + \countRline \z@ + +\newcount\@donereallinesL +\newcount\@donetotallinesL +\newcount\@donereallinesR +\newcount\@donetotallinesR + +\newcommand*{\do@lineL}{% + \letcs{\ifnumberpstart}{numberpstart@L\the\l@dpscL}% + \advance\countLline \@ne% + \ifvbox\namebox{l@dLcolrawbox\the\l@dpscL}% + {\vbadness=10000% + \splittopskip=\z@% + \do@lineLhook% + \l@demptyd@ta% + \global\setbox\one@line=\vsplit\namebox{l@dLcolrawbox\the\l@dpscL}% + to\baselineskip}% + \IfStrEq{\splitfirstmarks\parledgroup@}{begin}{\parledgroup@notes@startL}{}% + \unvbox\one@line \global\setbox\one@line=\lastbox% + \getline@numL% + \ifnum\@lock>\@ne% + \inserthangingsymboltrue% + \else% + \inserthangingsymbolfalse% + \fi% + \setbox\l@dleftbox% + \hb@xt@ \Lcolwidth{% + \ifl@dhidenumber% + \global\l@dhidenumberfalse% + \f@x@l@cks% + \else% + \affixline@num% + \fi% + \xifinlist{\the\l@dpscL}{\eled@sections@@}% + {\add@inserts\affixside@note}% + {\print@lineL}}% + \add@penaltiesL% + \global\advance\@donereallinesL\@ne% + \global\advance\@donetotallinesL\@ne% +\else% + \setbox\l@dleftbox \hb@xt@ \Lcolwidth{\hspace*{\Lcolwidth}}% + \global\advance\@donetotallinesL\@ne% +\fi} + +\def\print@lineL{% + \affixpstart@numL% + \l@dld@ta %space kept for backward compatibility + \add@inserts\affixside@note% + \l@dlsn@te %space kept for backward compatibility + {\ledllfill\hb@xt@ \Lcolwidth{% + \do@insidelineLhook% + \ifluatex% + \luatextextdir\l@luatextextdir@L% + \fi% + \new@lineL% + \inserthangingsymbolL% + \l@dunhbox@line{\one@line}}\ledrlfill\l@drd@ta% + \l@drsn@te}} + +\def\print@eledsectionL{%% + \addtocounter{pstartL}{-1}% + \ifdefstring{\@eledsectnotoc}{L}{\ledsectnotoc}{} + \ifdefstring{\@eledsectmark}{L}{}{\ledsectnomark} + \numdef{\temp@}{\l@dpscL-1}% + \xifinlist{\temp@}{\eled@sections@@}{\@nobreaktrue}{\@nobreakfalse}% + \@eled@sectioningtrue% + \bgroup% + \ifluatex% + \luatextextdir\l@luatextextdir@L% + \luatexpardir\l@luatexpardir@L% + \luatexbodydir\l@luatexbodydir@L% + \ifdefstring{\l@luatextextdir@L}{TRT}{\@RTLtrue}{}% + \fi% + \csuse{eled@sectioning@\the\l@dpscL}% + \egroup% + \@eled@sectioningfalse% + \global\csundef{eled@sectioning@\the\l@dpscL}% + \if@RTL% + \hspace{-3\paperwidth}% + {\hbox{\l@dunhbox@line{\one@line}} \new@line}% + \else% + \hspace{3\paperwidth}% + {\new@line \hbox{\l@dunhbox@line{\one@line}}}% + \fi% + \vskip\eledsection@correcting@skip% +} + +\newcommand*{\dolineLhook}[1]{\gdef\do@lineLhook{#1}}% +\newcommand*{\dolineRhook}[1]{\gdef\do@lineRhook{#1}}% +\newcommand*{\doinsidelineLhook}[1]{\gdef\do@insidelineLhook{#1}}% +\newcommand*{\doinsidelineRhook}[1]{\gdef\do@insidelineRhook{#1}}% + +\newcommand*{\do@lineLhook}{} +\newcommand*{\do@lineRhook}{} +\newcommand*{\do@insidelineLhook}{} +\newcommand*{\do@insidelineRhook}{} + +\newcommand*{\do@lineR}{% + \letcs{\ifnumberpstart}{numberpstart@R\the\l@dpscR}% + \ledRcol@true% + \advance\countRline \@ne% + \ifvbox\namebox{l@dRcolrawbox\the\l@dpscR}% + {\vbadness=10000% + \splittopskip=\z@% + \do@lineRhook% + \l@demptyd@ta% + \global\setbox\one@lineR=\vsplit\namebox{l@dRcolrawbox\the\l@dpscR}% + to\baselineskip}% + \IfStrEq{\splitfirstmarks\parledgroup@}{begin}{\parledgroup@notes@startR}{}% + \unvbox\one@lineR \global\setbox\one@lineR=\lastbox% + \getline@numR% + \ifnum\@lockR>\@ne% + \inserthangingsymbolRtrue% + \else% + \inserthangingsymbolRfalse% + \fi% + \setbox\l@drightbox% + \hb@xt@ \Rcolwidth{% + \ifl@dhidenumber% + \global\l@dhidenumberfalse% + \f@x@l@cksR% + \else% + \affixline@numR% + \fi% + \xifinlist{\the\l@dpscR}{\eled@sectionsR@@}% + {\add@insertsR\affixside@noteR}% + {\print@lineR}% + }% + \add@penaltiesR% + \global\advance\@donereallinesR\@ne% + \global\advance\@donetotallinesR\@ne% +\else% + \setbox\l@drightbox \hb@xt@ \Rcolwidth{\hspace*{\Rcolwidth}}% + \global\advance\@donetotallinesR\@ne% +\fi% +\ledRcol@false% +} + +\def\print@lineR{% + \affixpstart@numR% + \l@dld@ta %space kept for backward compatibility + \add@insertsR\affixside@noteR% + \l@dlsn@te %space kept for backward compatibility + \ledllfill\hb@xt@ \Rcolwidth{% + \do@insidelineRhook% + \new@lineR% + \inserthangingsymbolR% + \ifluatex% + \luatextextdir\l@luatextextdir@R% + \fi% + \l@dunhbox@line{\one@lineR}}\ledrlfill\l@drd@ta% + \l@drsn@te% + } + +\def\print@eledsectionR{% + \addtocounter{pstartR}{-1}% + \initnumbering@sectcountR% + \ifdefstring{\@eledsectnotoc}{R}{\ledsectnotoc}{}% + \ifdefstring{\@eledsectmark}{R}{}{\ledsectnomark}% + \numdef{\temp@}{\l@dpscR-1}% + \xifinlist{\temp@}{\eled@sectionsR@@}{\@nobreaktrue}{\@nobreakfalse}% + \@eled@sectioningtrue% + \bgroup% + \ifluatex% + \luatextextdir\l@luatextextdir@R% + \luatexpardir\l@luatexpardir@R% + \luatexbodydir\l@luatexbodydir@R% + \ifdefstring{\l@luatextextdir@L}{TRT}{\@RTLtrue}{}% + \fi% + \csuse{eled@sectioning@\the\l@dpscR R}% + \egroup% + \@eled@sectioningfalse% + \global\csundef{eled@sectioning@\the\l@dpscR R}% + \if@RTL% + \hspace{-\paperwidth}% + {\hbox{\l@dunhbox@line{\one@lineR}} \new@lineR}% + \else% + \hspace{\paperwidth}% + {\new@lineR \hbox{\l@dunhbox@line{\one@lineR}}}% + \fi% + \vskip\eledsection@correcting@skip +} +\newcommand*{\getline@numR}{% + \global\advance\absline@numR \@ne + \do@actionsR + \do@ballastR + \ifledgroupnotesR@\else + \ifnumberline + \ifsublines@ + \ifnum\sub@lockR<\tw@ + \global\advance\subline@numR \@ne + \fi + \else + \ifnum\@lockR<\tw@ + \global\advance\line@numR \@ne + \global\subline@numR \z@ + \fi + \fi + \fi + \fi +} +\newcommand*{\getline@numL}{% + \global\advance\absline@num \@ne + \do@actions + \do@ballast + \ifledgroupnotesL@\else + \ifnumberline + \ifsublines@ + \ifnum\sub@lock<\tw@ + \global\advance\subline@num \@ne + \fi + \else + \ifnum\@lock<\tw@ + \global\advance\line@num \@ne + \global\subline@num \z@ + \fi + \fi + \fi + \fi +} + +\newcommand*{\do@ballastR}{\global\ballast@count=\z@ + \begingroup + \advance\absline@numR \@ne + \ifnum\next@actionlineR=\absline@numR + \ifnum\next@actionR>-1001 + \global\advance\ballast@count by -\c@ballast + \fi + \fi + \endgroup} + +\newif\ifl@dskipversenumberR +\newcommand*{\do@actions@fixedcodeR}{% + \ifcase\@l@dtempcnta% + \or% % 1001 + \global\sublines@true + \or% % 1002 + \global\sublines@false + \or% % 1003 + \global\@lockR=\@ne + \or% % 1004% + \ifnum\@lockR=\tw@ + \global\@lockR=\thr@@ + \else + \global\@lockR=\z@ + \fi + \or% % 1005 + \global\sub@lockR=\@ne + \or% % 1006 + \ifnum\sub@lockR=\tw@ + \global\sub@lockR=\thr@@ + \else + \global\sub@lockR=\z@ + \fi + \or% % 1007 + \l@dskipnumbertrue + \or% % 1008 + \l@dskipversenumberRtrue% + \or% % 1009 + \l@dhidenumbertrue% + \else% + \led@warn@BadAction + \fi% +} + +\newcommand*{\do@actionsR}{% + \global\let\do@actions@nextR=\relax + \@l@dtempcntb=\absline@numR + \ifnum\@l@dtempcntb<\next@actionlineR\else + \ifnum\next@actionR>-1001\relax + \global\page@numR=\next@actionR + \ifbypage@R + \global\line@numR \z@ \global\subline@numR \z@ + \fi + \else + \ifnum\next@actionR<-4999\relax % 9/05 added relax here + \@l@dtempcnta=-\next@actionR + \advance\@l@dtempcnta by -5001\relax + \ifsublines@ + \global\subline@numR=\@l@dtempcnta + \else + \global\line@numR=\@l@dtempcnta + \fi + \else + \@l@dtempcnta=-\next@actionR + \advance\@l@dtempcnta by -1000\relax + \do@actions@fixedcodeR + \fi + \fi + \ifx\actionlines@listR\empty + \gdef\next@actionlineR{1000000}% + \else + \gl@p\actionlines@listR\to\next@actionlineR + \gl@p\actions@listR\to\next@actionR + \global\let\do@actions@nextR=\do@actionsR + \fi + \fi + \do@actions@nextR} + + +\newcommand*{\l@dcalcnum}[3]{% + \ifnum #1 > #2\relax + \@l@dtempcnta = #1\relax + \advance\@l@dtempcnta by -#2\relax + \divide\@l@dtempcnta by #3\relax + \multiply\@l@dtempcnta by #3\relax + \advance\@l@dtempcnta by #2\relax + \else + \@l@dtempcnta=#2\relax + \fi} + +\newcommand*{\ch@cksub@l@ckR}{% + \ifcase\sub@lockR + \or + \ifnum\sublock@disp=\@ne + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \or + \ifnum\sublock@disp=\tw@ + \else + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \or + \ifnum\sublock@disp=\z@ + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \fi} + +\newcommand*{\ch@ck@l@ckR}{% + \ifcase\@lockR + \or + \ifnum\lock@disp=\@ne + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \or + \ifnum\lock@disp=\tw@ + \else + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \or + \ifnum\lock@disp=\z@ + \@l@dtempcntb \z@ \@l@dtempcnta \@ne + \fi + \fi} + +\newcommand*{\f@x@l@cksR}{% + \ifcase\@lockR + \or + \global\@lockR \tw@ + \or \or + \global\@lockR \z@ + \fi + \ifcase\sub@lockR + \or + \global\sub@lockR \tw@ + \or \or + \global\sub@lockR \z@ + \fi} + +\newcommand*{\affixline@numR}{% +\ifledgroupnotesR@\else\ifnumberline +\ifl@dskipnumber + \global\l@dskipnumberfalse +\else + \ifsublines@ + \@l@dtempcntb=\subline@numR + \l@dcalcnum{\subline@numR}{\c@firstsublinenumR}{\c@sublinenumincrementR}% + \ch@cksub@lockR + \else + \@l@dtempcntb=\line@numR + \ifx\linenumberlist\empty + \l@dcalcnum{\line@numR}{\c@firstlinenumR}{\c@linenumincrementR}% + \else + \@l@dtempcnta=\line@numR + \edef\rem@inder{,\linenumberlist,\number\line@numR,}% + \edef\sc@n@list{\def\noexpand\sc@n@list + ####1,\number\@l@dtempcnta,####2|{\def\noexpand\rem@inder{####2}}}% + \sc@n@list\expandafter\sc@n@list\rem@inder|% + \ifx\rem@inder\empty\advance\@l@dtempcnta\@ne\fi + \fi + \ch@ck@l@ckR + \fi + \ifnum\@l@dtempcnta=\@l@dtempcntb + \ifl@dskipversenumberR\else + \if@twocolumn + \if@firstcolumn + \gdef\l@dld@ta{\llap{{\leftlinenumR}}}% + \else + \gdef\l@drd@ta{\rlap{{\rightlinenumR}}}% + \fi + \else + \@l@dtempcntb=\line@marginR + \ifnum\@l@dtempcntb>\@ne + \advance\@l@dtempcntb by\page@numR + \fi + \ifodd\@l@dtempcntb + \gdef\l@drd@ta{\rlap{{\rightlinenumR}}}% + \else + \gdef\l@dld@ta{\llap{{\leftlinenumR}}}% + \fi + \fi + \fi + \fi + \f@x@l@cksR +\fi +\fi +\fi} + +\newcommand*{\affixpstart@numL}{% +\ifsidepstartnum +\if@twocolumn + \if@firstcolumn + \gdef\l@dld@ta{\llap{{\leftpstartnumL}}}% + \else + \gdef\l@drd@ta{\rlap{{\rightpstartnumL}}}% + \fi + \else + \@l@dtempcntb=\line@margin + \ifnum\@l@dtempcntb>\@ne + \advance\@l@dtempcntb \page@num + \fi + \ifodd\@l@dtempcntb + \gdef\l@drd@ta{\rlap{{\rightpstartnumL}}}% + \else + \gdef\l@dld@ta{\llap{{\leftpstartnumL}}}% + \fi + \fi +\fi +} +\newcommand*{\affixpstart@numR}{% +\ifsidepstartnum +\if@twocolumn + \if@firstcolumn + \gdef\l@dld@ta{\llap{{\leftpstartnumR}}}% + \else + \gdef\l@drd@ta{\rlap{{\rightpstartnumR}}}% + \fi + \else + \@l@dtempcntb=\line@marginR + \ifnum\@l@dtempcntb>\@ne + \advance\@l@dtempcntb \page@numR + \fi + \ifodd\@l@dtempcntb + \gdef\l@drd@ta{\rlap{{\rightpstartnumR}}}% + \else + \gdef\l@dld@ta{\llap{{\leftpstartnumR}}}% + \fi + \fi +\fi +} + +\newcommand*{\leftpstartnumL}{ +\ifpstartnum +\thepstartL +\kern\linenumsep\global\pstartnumfalse\fi +} +\newcommand*{\rightpstartnumL}{ +\ifpstartnum\kern\linenumsep +\thepstartL +\global\pstartnumfalse\fi +} +\newif\ifpstartnumR +\pstartnumRtrue +\newcommand*{\leftpstartnumR}{ +\ifpstartnumR +\thepstartR +\kern\linenumsep\global\pstartnumRfalse\fi +} +\newcommand*{\rightpstartnumR}{ +\ifpstartnumR\kern\linenumsep +\thepstartR +\global\pstartnumRfalse\fi +} +\list@create{\inserts@listR} +\newcommand*{\add@insertsR}{% + \global\let\add@inserts@nextR=\relax + \ifx\inserts@listR\empty \else + \ifx\next@insertR\empty + \ifx\insertlines@listR\empty + \global\noteschanged@true + \gdef\next@insertR{100000}% + \else + \gl@p\insertlines@listR\to\next@insertR + \fi + \fi + \ifnum\next@insertR=\absline@numR + \gl@p\inserts@listR\to\@insertR + \@insertR + \global\let\@insertR=\undefined + \global\let\next@insertR=\empty + \global\let\add@inserts@nextR=\add@insertsR + \fi + \fi + \add@inserts@nextR} + +\newcommand*{\add@penaltiesL}{} +\newcommand*{\add@penaltiesR}{} + +\newcommand*{\flush@notesR}{% + \@xloop + \ifx\inserts@listR\empty \else + \gl@p\inserts@listR\to\@insertR + \@insertR + \global\let\@insertR=\undefined + \repeat} + +\def\printlinesR#1|#2|#3|#4|#5|#6|#7|{\begingroup + \setprintlines{#1}{#2}{#3}{#4}{#5}{#6}% + \ifl@d@pnum #1\fullstop\fi + \ifledplinenum \linenumr@p{#2}\@Rlineflag\else \symplinenum\fi + \ifl@d@ssub \fullstop \sublinenumr@p{#3}\fi + \ifl@d@dash \endashchar\fi + \ifl@d@pnum #4\fullstop\fi + \ifl@d@elin \linenumr@p{#5}\@Rlineflag\fi + \ifl@d@esl \ifl@d@elin \fullstop\fi \sublinenumr@p{#6}\fi +\endgroup} + +\newcommand\print@Xnotes@forpages[1]{% + \ifcsempty{Xonlyside@#1}{% + \csuse{#1footstart}{#1}% + \csuse{#1footgroup}{#1}% + }% + {% + \ifboolexpr{% + ((test {\ifcsstring{Xonlyside@#1}{L}} and not test{\ifnumodd{\c@page}})% + or% + (test {\ifcsstring{Xonlyside@#1}{R}} and test{\ifnumodd{\c@page}}))% + }% + {% + \correct@Xfootins@box{#1}% + \csuse{#1footstart}{#1}% + \csuse{#1footgroup}{#1}% + \global\count\csuse{#1footins}=0% + \global\skip\csuse{#1footins}=0pt% + \csuse{Xnotefontsize@#1}% + \global\advance\dimen\csuse{#1footins} by -\baselineskip% + \global\boolfalse{keepforXside@#1}% + }% + {% + \global\booltrue{keepforXside@#1}% + \global\count\csuse{#1footins}=\csuse{default@#1footins}% + \global\skip\csuse{#1footins}=\csuse{Xbeforenotes@#1}% + \bgroup% + \csuse{Xnotefontsize@#1}% + \global\advance\dimen\csuse{#1footins} by \baselineskip% + \egroup% + }% + }% +}% +\newcommand{\correct@Xfootins@box}[1]{% + \ifbool{keepforXside@#1}{% + \csuse{Xnotefontsize@#1}% + \splittopskip=0pt% + \global\setbox\csuse{#1footins}=\vbox{% + \vsplit\csuse{#1footins} to \dimexpr\ht\csuse{#1footins}-1pt\relax% + \vskip \dimexpr-0.5\baselineskip-0.5\lineskip-0.5pt\relax% + \unvbox\csuse{#1footins}% + }% + }{}% +}% +\newcommand\print@notesX@forpages[1]{% + \ifcsempty{onlysideX@#1}{% + \csuse{footstart#1}{#1}% + \csuse{footgroup#1}{#1}% + }% + {% + \ifboolexpr{% + ((test {\ifcsstring{onlysideX@#1}{L}} and not test{\ifnumodd{\c@page}})% + or% + (test {\ifcsstring{onlysideX@#1}{R}} and test{\ifnumodd{\c@page}}))% + }% + {% + \correct@footinsX@box{#1}% + \csuse{footstart#1}{#1}% + \csuse{footgroup#1}{#1}% + \global\count\csuse{footins#1}=0% + \global\skip\csuse{footins#1}=0pt% + \csuse{notefontsizeX@#1}% + \global\advance\dimen\csuse{footins#1} by -\baselineskip% + \global\boolfalse{keepforsideX@#1}% + }% + {% + \global\booltrue{keepforsideX@#1}% + \global\count\csuse{footins#1}=\csuse{default@footins#1}% + \global\skip\csuse{footins#1}=\csuse{beforenotesX@#1}% + \bgroup% + \csuse{notefontsizeX@#1}% + \global\advance\dimen\csuse{footins#1} by \baselineskip% + \egroup% + }% + }% +}% +\newcommand{\correct@footinsX@box}[1]{% + \ifbool{keepforsideX@#1}{% + \csuse{notefontsizeX@#1}% + \splittopskip=0pt% + \global\setbox\csuse{footins#1}=\vbox{% + \vsplit\csuse{footins#1} to \dimexpr\ht\csuse{footins#1}-1pt\relax% + \vskip \dimexpr-0.5\baselineskip-0.5\lineskip-0.5pt\relax% + \unvbox\csuse{footins#1}% + }% + }{}% +}% +\list@create{\labelref@listR} + +\def\l@dmake@labelsR#1|#2|#3|#4|#5{% + \expandafter\ifx\csname the@label#5\endcsname \relax\else + \led@warn@DuplicateLabel{#4}% + \fi + \expandafter\gdef\csname the@label#5\endcsname{#1|#2\@Rlineflag|#3|#4}% + \ignorespaces} +\AtBeginDocument{% + \def\l@dmake@labelsR#1|#2|#3|#4|#5{}% +} + +\WithSuffix\newcommand\sidenotemargin*[1]{% + \l@dgetsidenote@margin{#1} + \global\sidenote@marginR=\@l@dtempcntb + \global\sidenote@margin=\@l@dtempcntb +} +\newcount\sidenote@marginR +\global\sidenote@margin=\@ne + + +\newcommand*{\affixside@noteR}{% + \def\sidenotecontent@{}% + \numgdef{\itemcount@}{0}% + \def\do##1{% + \ifnumequal{\itemcount@}{0}% + {% + \appto\sidenotecontent@{##1}}% Not print not separator before the 1st note + {\appto\sidenotecontent@{\sidenotesep ##1}% + }% + \numgdef{\itemcount@}{\itemcount@+1}% + }% + \dolistloop{\l@dcsnotetext}% + \ifnumgreater{\itemcount@}{1}{\led@err@ManySidenotes}{}% + \gdef\@templ@d{}% + \gdef\@templ@n{\l@dcsnotetext\l@dcsnotetext@l\l@dcsnotetext@r}% + \ifx\@templ@d\@templ@n \else% + \if@twocolumn% + \if@firstcolumn% + \setl@dlp@rbox{##1}{\sidenotecontent@}% + \else% + \setl@drp@rbox{\sidenotecontent@}% + \fi% + \else% + \@l@dtempcntb=\sidenote@marginR% + \ifnum\@l@dtempcntb>\@ne% + \advance\@l@dtempcntb by\page@numR% + \fi% + \ifodd\@l@dtempcntb% + \setl@drp@rbox{\sidenotecontent@}% + \gdef\sidenotecontent@{}% + \numdef{\itemcount@}{0}% + \dolistloop{\l@dcsnotetext@l}% + \ifnumgreater{\itemcount@}{1}{\led@err@ManyLeftnotes}{}% + \setl@dlp@rbox{\sidenotecontent@}% + \else% + \setl@dlp@rbox{\sidenotecontent@}% + \gdef\sidenotecontent@{}% + \numdef{\itemcount@}{0}% + \dolistloop{\l@dcsnotetext@r}% + \ifnumgreater{\itemcount@}{1}{\led@err@ManyRightnotes}{}% + \setl@drp@rbox{\sidenotecontent@}% + \fi% + \fi% + \fi% +} + + +\newif\ifinserthangingsymbolR +\newcommand{\inserthangingsymbolL}{% + \ifinserthangingsymbol% + \ifinstanzaL% + \hskip \@ifundefined{sza@0@}{0}{\expandafter% + \noexpand\csname sza@0@\endcsname}\stanzaindentbase% + \@hangingsymbol% + \fi% + \fi% +}% +\newcommand{\inserthangingsymbolR}{% + \ifinserthangingsymbolR% + \ifinstanzaR% + \hskip \@ifundefined{sza@0@}{0}{\expandafter% + \noexpand\csname sza@0@\endcsname}\stanzaindentbase% + \@hangingsymbol% + \fi% + \fi% +}% + + \chardef\next=\catcode`\& + \catcode`\&=\active + +\newenvironment{astanza}{% + \catcode`\&\active + \global\stanza@count\@ne\stanza@modulo\@ne + \ifnum\usenamecount{sza@0@}=\z@ + \let\stanza@hang\relax + \let\endlock\relax + \else + \rightskip\z@ plus 1fil\relax + \fi + \ifnum\usenamecount{szp@0@}=\z@ + \let\sza@penalty\relax + \fi + \def&{% + \endlock\mbox{}% + \sza@penalty + \global\advance\stanza@count\@ne + \@astanza@line}% + \def\&{\@stopastanza}% + \pstart + \@astanza@line +}{} + +\newcommandx{\@stopastanza}[1][1,usedefault]{% + \endlock\mbox{}% + \pend[#1]% +}% +\newcommand*{\@astanza@line}{% + \ifnum\value{stanzaindentsrepetition}=0 + \parindent=\csname sza@\number\stanza@count + @\endcsname\stanzaindentbase + \else + \parindent=\csname sza@\number\stanza@modulo + @\endcsname\stanzaindentbase + \managestanza@modulo + \fi + \par + \stanza@hang%\mbox{}% + \ignorespaces} + + \catcode`\&=\next + +\providecommand*{\newnamebox}[1]{% + \expandafter\newbox\csname #1\endcsname} +\providecommand*{\setnamebox}[1]{% + \expandafter\setbox\csname #1\endcsname} +\providecommand*{\unhnamebox}[1]{% + \expandafter\unhbox\csname #1\endcsname} +\providecommand*{\unvnamebox}[1]{% + \expandafter\unvbox\csname #1\endcsname} +\providecommand*{\namebox}[1]{% + \csname #1\endcsname} + +\providecommand*{\newnamecount}[1]{% + \expandafter\newcount\csname #1\endcsname} +\providecommand*{\usenamecount}[1]{% + \csname #1\endcsname} + +\newif\ifl@dusedbabel +\patchcmd{\bbl@set@language}% + {\select@language{\languagename}}% + {\edef\languagename{#1}\select@language{\languagename}}% + {}% + {}% + +\newcommand*{\l@duselanguage}[1]{} +\gdef\theledlanguageL{} +\gdef\theledlanguageR{} + +\AtBeginDocument{% + \@ifundefined{xpg@main@language}{% + \@ifundefined{bbl@main@language}{% + \l@dusedbabelfalse + }{% + \l@dusedbabeltrue + \let\l@doldselectlanguage\selectlanguage + \let\l@doldbbl@set@language\bbl@set@language + \renewcommand{\selectlanguage}[1]{% + \l@doldselectlanguage{#1}% + \ifledRcol \gdef\theledlanguageR{#1}% + \else \gdef\theledlanguageL{#1}% + \fi} + \renewcommand*{\l@duselanguage}[1]{% + \l@doldselectlanguage{#1}} + \gdef\theledlanguageL{\bbl@main@language}% + \gdef\theledlanguageR{\bbl@main@language}% + }% + } + { \let\old@otherlanguage\otherlanguage% + \renewcommand{\otherlanguage}[2][]{% + \selectlanguage[#1]{#2}% + \ifledRcol \gdef\theledlanguageR{#2}% + \else \gdef\theledlanguageL{#2}% + \fi}% + \let\l@duselanguage\select@language% + \gdef\theledlanguageL{\xpg@main@language}% + \gdef\theledlanguageR{\xpg@main@language}% +}} +\newcount\l@dc@maxchunks +\newcommand{\maxchunks}[1]{\l@dc@maxchunks=#1} + \maxchunks{5120} + +\newcount\l@dnumpstartsR + +\newcount\l@dpscL +\newcount\l@dpscR + +\newcommand*{\l@dsetuprawboxes}{% + \@l@dtempcntb=\l@dc@maxchunks + \loop\ifnum\@l@dtempcntb>\z@ + \newnamebox{l@dLcolrawbox\the\@l@dtempcntb} + \newnamebox{l@dRcolrawbox\the\@l@dtempcntb} + \advance\@l@dtempcntb \m@ne + \repeat} + +\newcommand*{\l@dsetupmaxlinecounts}{% + \@l@dtempcntb=\l@dc@maxchunks + \loop\ifnum\@l@dtempcntb>\z@ + \newnamecount{l@dmaxlinesinpar\the\@l@dtempcntb} + \advance\@l@dtempcntb \m@ne + \repeat} +\newcommand*{\l@dzeromaxlinecounts}{% + \begingroup + \@l@dtempcntb=\l@dc@maxchunks + \loop\ifnum\@l@dtempcntb>\z@ + \global\usenamecount{l@dmaxlinesinpar\the\@l@dtempcntb}=\z@ + \advance\@l@dtempcntb \m@ne + \repeat + \endgroup} + +\AtBeginDocument{% + \l@dsetuprawboxes + \l@dsetupmaxlinecounts + \l@dzeromaxlinecounts + \l@dnumpstartsL=\z@ + \l@dnumpstartsR=\z@ + \l@dpscL=\z@ + \l@dpscR=\z@} + +\newif\if@pstarts +\newcommand*{\check@pstarts}{% + \@pstartsfalse + \ifnum\l@dnumpstartsL>\l@dpscL + \@pstartstrue + \else + \ifnum\l@dnumpstartsR>\l@dpscR + \@pstartstrue + \fi + \fi +} + +\newif\ifaraw@text +\newcommand*{\checkraw@text}{% + \araw@textfalse + \ifvbox\namebox{l@dLcolrawbox\the\l@dpscL} + \araw@texttrue + \else + \ifvbox\namebox{l@dRcolrawbox\the\l@dpscR} + \araw@texttrue + \fi + \fi +} + +\newcommand*{\@writelinesinparL}{% + \edef\next{% + \write\linenum@out{\string\@pend[\the\@donereallinesL]}}% + \next + \global\@donereallinesL \z@} +\newcommand*{\@writelinesinparR}{% + \edef\next{% + \write\linenum@outR{\string\@pendR[\the\@donereallinesR]}}% + \next + \global\@donereallinesR \z@} + +\newsavebox{\@eledsectionL}% +\newsavebox{\@eledsectionR}% +\newcommand*{\Columns}{% + \ifl@dpairing% + \led@err@Columns@InsideEnv% + \fi% + \l@dprintingcolumnstrue% + \eledsection@correcting@skip=-\baselineskip% Correction for sections' titles + \ifnum\l@dnumpstartsL=\l@dnumpstartsR\else + \led@err@BadLeftRightPstarts{\the\l@dnumpstartsL}{\the\l@dnumpstartsR}% + \fi + \begingroup + \l@dzeropenalties + \endgraf\global\num@lines=\prevgraf + \global\num@linesR=\prevgraf + \global\par@line=\z@ + \global\par@lineR=\z@ + \global\l@dpscL=\z@ + \global\l@dpscR=\z@ + \check@pstarts + \loop\if@pstarts + \global\pstartnumtrue + \global\pstartnumRtrue + \global\advance\l@dpscL \@ne + \global\advance\l@dpscR \@ne + \restore@pstartL@pc% + \restore@pstartR@pc% + \Columns@print@before@pstart% + \checkraw@text +{ \loop\ifaraw@text + \l@duselanguage{\theledlanguageL}% + \do@lineL + \xifinlist{\the\l@dpscL}{\eled@sections@@} + {% + \ifdefstring{\@eledsectmark}{L}% + {\csuse{eled@sectmark@\the\l@dpscL}% + }{}% + \global\csundef{eled@sectmark@\the\l@dpscL}% + \savebox{\@eledsectionL}{\parbox[t][][t]{\Lcolwidth}{\vbox{}\print@eledsectionL}}%\vbox{}-> prevent alignment troubles with RTL language + }% + {}% + \l@duselanguage{\theledlanguageR}% + \do@lineR + \xifinlist{\the\l@dpscR}{\eled@sectionsR@@} + {% + \ifdefstring{\@eledsectmark}{R}% + {\csuse{eled@sectmark@\the\l@dpscR R}% + }{}% + \global\csundef{eled@sectmark@\the\l@dpscR R}% + \savebox{\@eledsectionR}{\parbox[t][][t]{\Rcolwidth}{\vbox{}\print@eledsectionR}}}%\vbox{}-> prevent alignment troubles with RTL language + {}% + \hb@xt@ \hsize{% + \ifdefstring{\columns@position}{L}{}{\hfill }% + \unhbox\l@dleftbox% + \ifhbox\@eledsectionL% + \usebox{\@eledsectionL}% + \fi% + \print@columnseparator% + \unhbox\l@drightbox% + \ifhbox\@eledsectionR% + \usebox{\@eledsectionR}% + \fi% + \ifdefstring{\columns@position}{R}{}{\hfill}% + }% + \checkraw@text + \checkverseL + \checkverseR + \checkpb@columns + \repeat} + \@writelinesinparL + \@writelinesinparR + \check@pstarts + \ifbypstart@% + \write\linenum@out{\string\@set[1]} + \resetprevline@ + \fi + \ifbypstart@R + \write\linenum@outR{\string\@set[1]} + \resetprevline@ + \fi + \Columns@print@after@pend% + \repeat + \flush@notes + \flush@notesR + \endgroup + \global\l@dpscL=\z@ + \global\l@dpscR=\z@ + \global\l@dnumpstartsL=\z@ + \global\l@dnumpstartsR=\z@ + \l@dprintingcolumnsfalse% + \ignorespaces + \global\instanzaLfalse + \global\instanzaRfalse} + +\def\print@columnseparator{% + \ifdim\beforecolumnseparator<0pt% + \hfill% + \else% + \hspace{\beforecolumnseparator}% + \fi% + \columnseparator% + \ifdim\aftercolumnseparator<0pt% + \hfill% + \else% + \hspace{\beforecolumnseparator}% + \fi% +}% + +\newcommand{\checkpb@columns}{% + \newif\if@pb + \newif\if@nopb + \IfStrEq{\led@pb@setting}{before}{ + \numdef{\next@absline}{\the\absline@num+1}% + \numdef{\next@abslineR}{\the\absline@numR+1}% + \xifinlistcs{\next@absline}{l@prev@pb}{\@pbtrue}{}% + \xifinlistcs{\next@abslineR}{l@prev@pbR}{\@pbtrue}{} + \xifinlistcs{\next@absline}{l@prev@nopb}{\@nopbtrue}{}% + \xifinlistcs{\next@abslineR}{l@prev@nopbR}{\@nopbtrue}{} + }{} + \IfStrEq{\led@pb@setting}{after}{ + \xifinlistcs{\the\absline@num}{l@prev@pb}{\@pbtrue}{}% + \xifinlistcs{\the\absline@numR}{l@prev@pbR}{\@pbtrue}{} + \xifinlistcs{\the\absline@num}{l@prev@nopb}{\@nopbtrue}{}% + \xifinlistcs{\the\absline@numR}{l@prev@nopbR}{\@nopbtrue}{} + }{} +\if@nopb\nopagebreak[4]\enlargethispage{\baselineskip}\fi +\if@pb\pagebreak[4]\fi +} +\newcommand*{\columnseparator}{% + \smash{\rule[-0.2\baselineskip]{\columnrulewidth}{1.05\baselineskip}}} +\newdimen\columnrulewidth + \columnrulewidth=\z@ + +\newcommand*{\columnsposition}[1]{% + \xdef\columns@position{#1}% + }% +\xdef\columns@position{R}% +\newlength{\beforecolumnseparator}% +\setlength{\beforecolumnseparator}{-2pt}% + +\newlength{\aftercolumnseparator}% +\setlength{\aftercolumnseparator}{-2pt}% + +\newcommand{\setwidthliketwocolumns@L}{% + \newdimen\temp% + \temp=\hsize% + \hsize=\Lcolwidth% + \advance\hsize\Rcolwidth% + \advance\temp-\hsize% + \multiply\temp by 2% + \divide\temp by 3% + \advance\hsize\temp% +}% + +\newcommand{\setpositionliketwocolumns@L}{% + \renewcommand{\ledrlfill}{\hfill}% +}% + +\newcommand{\setnotespositionliketwocolumns@L}{% +}% + +\newcommand{\setwidthliketwocolumns@C}{% + \newdimen\temp% + \temp=\hsize% + \hsize=\Lcolwidth% + \advance\hsize\Rcolwidth% + \advance\temp-\hsize% + \divide\temp by 2% + \advance\hsize\temp% +}% + +\newcommand{\setpositionliketwocolumns@C}{% + \doinsidelinehook{\hfill}% + \renewcommand{\ledrlfill}{\hfill}% +}% + +\newcommand{\setnotespositionliketwocolumns@C}{% + \newdimen\temp% + \newdimen\tempa% + \temp=\hsize% + \tempa=\Lcolwidth% + \advance\tempa\Rcolwidth% + \advance\temp-\tempa% + \divide\temp by 2% + \leftskip=\temp% + \rightskip=-\temp% +}% + +\newcommand{\setwidthliketwocolumns@R}{% + \newdimen\temp% + \temp=\hsize% + \hsize=\Lcolwidth% + \advance\hsize\Rcolwidth% + \advance\temp-\hsize% + \multiply\temp by 2% + \divide\temp by 3% + \advance\hsize\temp% +}% + +\newcommand{\setpositionliketwocolumns@R}{% + \doinsidelinehook{\hfill}% +}% + +\newcommand{\setnotespositionliketwocolumns@R}{% + \newdimen\temp% + \newdimen\tempa% + \temp=\hsize% + \tempa=\Lcolwidth% + \advance\tempa\Rcolwidth% + \advance\temp-\tempa% + \divide\temp by 2% + \leftskip=\temp% + \rightskip=-\temp% +}% + +\newcommand{\Columns@print@before@pstart}{% + \ifboolexpr{% + test{\ifcsstring{before@pstartL@\the\l@dpscL}{\at@every@pstart}}% + and test {\ifcsstring{before@pstartR@\the\l@dpscR}{\at@every@pstart}}% + and test {\ifdefempty{\at@every@pstart}}}% + {}% + {% + \hb@xt@ \hsize{% + \ifdefstring{\columns@position}{L}{}{\hfill }% + \par\parbox[t][][t]{\Lcolwidth}{% + \csuse{before@pstartL@\the\l@dpscL}% + }% + \print@columnseparator% + \parbox[t][][t]{\Rcolwidth}{% + \csuse{before@pstartR@\the\l@dpscR}% + }% + \ifdefstring{\columns@position}{R}{}{\hfill}% + }% + }% + \global\csundef{before@pstartL@\the\l@dpscL}% + \global\csundef{before@pstartR@\the\l@dpscR}% +}% +\newcommand{\Columns@print@after@pend}{% + \ifboolexpr{% + test{\ifcsstring{after@pendL@\the\l@dpscL}{\at@every@pend}}% + and test {\ifcsstring{after@pendR@\the\l@dpscR}{\at@every@pend}}% + and test {\ifdefempty{\at@every@pend}}}% + {}% + {% + \hb@xt@ \hsize{% + \ifdefstring{\columns@position}{L}{}{\hfill }% + \parbox[t][][t]{\Lcolwidth}{% + \csuse{after@pendL@\the\l@dpscL}% + }% + \print@columnseparator% + \parbox[t][][t]{\Rcolwidth}{% + \csuse{after@pendR@\the\l@dpscR}% + }% + \ifdefstring{\columns@position}{R}{}{\hfill}% + }% + }% + \global\csundef{after@pendL@\the\l@dpscL}% + \global\csundef{after@pendR@\the\l@dpscR}% +}% +\newcount\numpagelinesL +\newcount\numpagelinesR +\newcount\l@dminpagelines + +\newcommand*{\Pages}{% + \ifl@dpairing% + \led@err@Pages@InsideEnv% + \fi% + \eledsection@correcting@skip=-2\baselineskip% line correcting for section titles. + \parledgroup@notespacing@set@correction% + \typeout{}% + \typeout{*************************** PAGES ***************************}% + \ifnum\l@dnumpstartsL=\l@dnumpstartsR\else% + \led@err@BadLeftRightPstarts{\the\l@dnumpstartsL}{\the\l@dnumpstartsR}% + \fi% + \setlength{\Lcolwidth}{\textwidth}% + \setlength{\Rcolwidth}{\textwidth}% + \cleartol@devenpage% + \l@dprintingpagestrue% + \begingroup% + \l@dzeropenalties% + \endgraf\global\num@lines=\prevgraf% + \global\num@linesR=\prevgraf% + \global\par@line=\z@% + \global\par@lineR=\z@% + \global\l@dpscL=\z@% + \global\l@dpscR=\z@% + \writtenlinesLfalse% + \writtenlinesRfalse% + \let\print@Xnotes\print@Xnotes@forpages% + \let\print@notesX\print@notesX@forpages% + \check@pstarts% + \loop\if@pstarts% + \global\advance\l@dpscL \@ne% + \global\advance\l@dpscR \@ne% + \getlinesfromparlistL% + \getlinesfromparlistR% + \l@dcalc@maxoftwo{\@cs@linesinparL}{\@cs@linesinparR}% + {\usenamecount{l@dmaxlinesinpar\the\l@dpscL}}% + \check@pstarts% + \repeat% + \global\l@dpscL=\z@% + \global\l@dpscR=\z@% + \getlinesfrompagelistL% + \getlinesfrompagelistR% + \l@dcalc@minoftwo{\@cs@linesonpageL}{\@cs@linesonpageR}% + {\l@dminpagelines}% + \check@pstarts% + \if@pstarts% + \global\advance\l@dpscL \@ne% + \global\advance\l@dpscR \@ne% + \restore@pstartL@pc% + \restore@pstartR@pc% + \global\@donereallinesL=\z@% + \global\@donetotallinesL=\z@% + \global\@donereallinesR=\z@% + \global\@donetotallinesR=\z@% + \checkraw@text% +{ \loop\ifaraw@text% + \checkpageL% + \l@duselanguage{\theledlanguageL}% +{ \loop\ifl@dsamepage% + \ifdefstring{\@eledsectnotoc}{L}{\ledsectnotoc}{}% + \csuse{before@pstartL@\the\l@dpscL}% + \global\csundef{before@pstartL@\the\l@dpscL}% + \do@lineL% + \xifinlist{\the\l@dpscL}{\eled@sections@@} + {\print@eledsectionL}% + {}% + \advance\numpagelinesL \@ne% + \ifshiftedpstarts% + \ifdim\ht\l@dleftbox>0pt\hb@xt@% + \hsize{\ledstrutL\unhbox\l@dleftbox}% + \else% + \dimen0=\pagetotal% + \advance\dimen0 by \baselineskip% + \global\pagetotal=\dimen0% + \fi% + \else% + \parledgroup@correction@notespacing{L} + \hb@xt@ \hsize{\ledstrutL\unhbox\l@dleftbox}% + \fi% + \get@nextboxL% + \global\l@dskipversenumberfalse% + \ifprint@last@after@pendL% + \csuse{after@pendL@\the\l@dpscL}% + \global\csundef{after@pendL@\the\l@dpscL}% + \fi% + \checkpageL% + \checkverseL% + \checkpbL% + \repeat% + \ifl@dpagefull% + \@writelinesonpageL{\the\numpagelinesL}% + \else% + \@writelinesonpageL{1000}% + \fi% + \numpagelinesL \z@% + \parledgroup@correction@notespacing@init% + \clearl@dleftpage }% + \checkpageR% + \l@duselanguage{\theledlanguageR}% +{ \loop\ifl@dsamepage% + \initnumbering@sectcountR% + \ifdefstring{\@eledsectnotoc}{R}{\ledsectnotoc}{}% + \csuse{before@pstartR@\the\l@dpscR}% + \global\csundef{before@pstartR@\the\l@dpscR}% + \do@lineR% + \xifinlist{\the\l@dpscR}{\eled@sectionsR@@}% + {\print@eledsectionR}% + {}% + \advance\numpagelinesR \@ne% + \ifshiftedpstarts% + \ifdim\ht\l@drightbox>0pt\hb@xt@% + \hsize{\ledstrutR\unhbox\l@drightbox}% + \else% + \dimen0=\pagetotal% + \advance\dimen0 by \baselineskip% + \global\pagetotal=\dimen0% + \fi% + \else% + \parledgroup@correction@notespacing{R}% + \hb@xt@ \hsize{\ledstrutR\unhbox\l@drightbox}% + \fi% + \get@nextboxR% + \global\l@dskipversenumberRfalse% + \ifprint@last@after@pendR% + \csuse{after@pendR@\the\l@dpscR}% + \global\csundef{after@pendR@\the\l@dpscR}% + \fi% + \checkpageR% + \checkverseR% + \checkpbR% + \repeat% + \ifl@dpagefull% + \@writelinesonpageR{\the\numpagelinesR}% + \else% + \@writelinesonpageR{1000}% + \fi% + \numpagelinesR=\z@% + \parledgroup@correction@notespacing@init% + \clearl@drightpage}% + \checkraw@text% + \ifaraw@text% + \getlinesfrompagelistL% + \getlinesfrompagelistR% + \l@dcalc@minoftwo{\@cs@linesonpageL}{\@cs@linesonpageR}% + {\l@dminpagelines}% + \fi% + \repeat}% + \fi% + \flush@notes% + \flush@notesR% + \endgroup% + \global\l@dpscL=\z@% + \global\l@dpscR=\z@% + \global\l@dnumpstartsL=\z@% + \global\l@dnumpstartsR=\z@% + \global\instanzaLfalse% + \global\instanzaRfalse% + \l@dprintingpagesfalse% + \finish@Pages@notes%Needed to prevent final notes overlap line number + \ignorespaces} + +\newcommand{\finish@Pages@notes}{% + \def\do##1{% + \ifnocritical@% + \global\newnamebox{##1footins} + \fi + \ifnofamiliar@% + \global\newnamebox{footins##1} + \fi + \ifvoid\csuse{##1footins}% + \ifvoid\csuse{footins##1}\else% + \newpage\null% + \listbreak% + \fi% + \else% + \newpage\null% + \listbreak% + \fi% + }% + \dolistloop{\@series}% +}% +\newcommand*{\ledstrutL}{\strut} +\newcommand*{\ledstrutR}{\strut} + +\providecommand{\cleartoevenpage}[1][\@empty]{% + \clearpage + \ifodd\c@page\hbox{}#1\clearpage\fi} +\newcommand*{\cleartol@devenpage}{% + \ifdim\pagetotal<\topskip% on an empty page + \else + \clearpage + \fi + \ifodd\c@page\hbox{}\clearpage\fi% +}% +\newcommand*{\clearl@dleftpage}{% + \ifdim\pagetotal=0pt\hbox{}\fi% + \newpage% + \ifodd\c@page\else + \led@err@LeftOnRightPage + \hbox{}% + \cleardoublepage + \fi} + +\newcommand*{\clearl@drightpage}{% + \ifdim\pagetotal=0pt\hbox{}\fi% + \newpage% + \ifodd\c@page + \led@err@RightOnLeftPage + \hbox{}% + \cleartoevenpage + \fi} + +\newcommand*{\getlinesfromparlistL}{% + \ifx\linesinpar@listL\empty + \gdef\@cs@linesinparL{0}% + \else + \gl@p\linesinpar@listL\to\@cs@linesinparL + \fi} +\newcommand*{\getlinesfromparlistR}{% + \ifx\linesinpar@listR\empty + \gdef\@cs@linesinparR{0}% + \else + \gl@p\linesinpar@listR\to\@cs@linesinparR + \fi} + +\newcommand*{\getlinesfrompagelistL}{% + \ifx\linesonpage@listL\empty + \gdef\@cs@linesonpageL{1000}% + \else + \gl@p\linesonpage@listL\to\@cs@linesonpageL + \fi} +\newcommand*{\getlinesfrompagelistR}{% + \ifx\linesonpage@listR\empty + \gdef\@cs@linesonpageR{1000}% + \else + \gl@p\linesonpage@listR\to\@cs@linesonpageR + \fi} + +\newcommand*{\@writelinesonpageL}[1]{% + \edef\next{\write\linenum@out{\string\@lopL{#1}}}% + \next} +\newcommand*{\@writelinesonpageR}[1]{% + \edef\next{\write\linenum@outR{\string\@lopR{#1}}}% + \next} + +\newcommand*{\l@dcalc@maxoftwo}[3]{% + \ifnum #2>#1\relax + #3=#2\relax + \else + #3=#1\relax + \fi} +\newcommand*{\l@dcalc@minoftwo}[3]{% + \ifnum #2<#1\relax + #3=#2\relax + \else + #3=#1\relax + \fi} + +\newif\ifl@dsamepage + \l@dsamepagetrue +\newif\ifl@dpagefull + +\newcommand*{\checkpageL}{% + \l@dpagefulltrue + \l@dsamepagetrue + \check@goal + \ifdim\pagetotal<\ledthegoal + \ifnum\numpagelinesL<\l@dminpagelines + \else + \l@dsamepagefalse + \l@dpagefullfalse + \fi + \else + \l@dsamepagefalse + \l@dpagefulltrue + \fi% + \ifprint@last@after@pendL% + \l@dpagefullfalse% + \l@dsamepagefalse% + \print@last@after@pendLfalse% + \fi% + }% + +\newcommand*{\checkpageR}{% + \l@dpagefulltrue + \l@dsamepagetrue + \check@goal + \ifdim\pagetotal<\ledthegoal + \ifnum\numpagelinesR<\l@dminpagelines + \else + \l@dsamepagefalse + \l@dpagefullfalse + \fi + \else + \l@dsamepagefalse + \l@dpagefulltrue + \fi% + \ifprint@last@after@pendR% + \l@dpagefullfalse% + \l@dsamepagefalse% + \print@last@after@pendRfalse% + \fi% + }% + +\newcommand{\checkpbL}{ + \IfStrEq{\led@pb@setting}{after}{ + \xifinlistcs{\the\absline@num}{l@prev@pb}{\l@dpagefulltrue\l@dsamepagefalse}{} + \xifinlistcs{\the\absline@num}{l@prev@nopb}{\l@dpagefullfalse\l@dsamepagetrue}{} + }{} + \IfStrEq{\led@pb@setting}{before}{ + \numdef{\next@absline}{\the\absline@num+1} + \xifinlistcs{\next@absline}{l@prev@pb}{\l@dpagefulltrue\l@dsamepagefalse}{} + \xifinlistcs{\next@absline}{l@prev@nopb}{\l@dpagefullfalse\l@dsamepagetrue}{} + }{} +} + +\newcommand{\checkpbR}{ + \IfStrEq{\led@pb@setting}{after}{ + \xifinlistcs{\the\absline@numR}{l@prev@pbR}{\l@dpagefulltrue\l@dsamepagefalse}{} + \xifinlistcs{\the\absline@numR}{l@prev@nopbR}{\l@dpagefullfalse\l@dsamepagetrue}{} + }{} + \IfStrEq{\led@pb@setting}{before}{ + \numdef{\next@abslineR}{\the\absline@numR+1} + \xifinlistcs{\next@abslineR}{l@prev@pbR}{\l@dpagefulltrue\l@dsamepagefalse}{} + \xifinlistcs{\next@abslineR}{l@prev@nopbR}{\l@dpagefullfalse\l@dsamepagetrue}{} + }{} +} +\newcommand{\checkverseL}{ +\ifinstanzaL + \iflednopbinverse + \ifinserthangingsymbol + \numgdef{\prev@abslineverse}{\the\absline@num-1} + \IfStrEq{\led@pb@setting}{after}{\lednopbnum{\prev@abslineverse}}{} + \IfStrEq{\led@pb@setting}{before}{\ifnum\numpagelinesL<3\ledpbnum{\prev@abslineverse}\fi}{} + \fi + \fi +\fi +} +\newcommand{\checkverseR}{ +\ifinstanzaR + \iflednopbinverse + \ifinserthangingsymbolR + \numgdef{\prev@abslineverse}{\the\absline@numR-1} + \IfStrEq{\led@pb@setting}{after}{\lednopbnumR{\prev@abslineverse}}{} + \IfStrEq{\led@pb@setting}{before}{\ifnum\numpagelinesR<3\ledpbnumR{\prev@abslineverse}\fi}{} + \fi + \fi +\fi +} +\newdimen\ledthegoal +\ifshiftedpstarts + \newcommand*{\@goalfraction}{0.95} +\else + \newcommand*{\@goalfraction}{0.9} +\fi + +\newcommand*{\check@goal}{% + \ledthegoal=\@goalfraction\pagegoal} +\newcommand{\setgoalfraction}[1]{% + \xdef\@goalfraction{#1}% +} +\newif\ifwrittenlinesL +\newif\ifwrittenlinesR + +\newcommand*{\get@nextboxL}{% + \ifvbox\namebox{l@dLcolrawbox\the\l@dpscL}% box is not empty + \else% box is empty + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscL}>\@donetotallinesL + \parledgroup@notes@endL + \else + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscL}=\@donetotallinesL + \parledgroup@notes@endL + \fi + \ifwrittenlinesL\else + \@writelinesinparL + \writtenlinesLtrue + \fi + \ifnum\l@dnumpstartsL>\l@dpscL + \writtenlinesLfalse + \ifbypstart@ + \global\line@num=0% + \resetprevline@% + \fi + \csuse{after@pendL@\the\l@dpscL}% + \global\csundef{after@pendL@\the\l@dpscL}% + \l@dcalc@maxoftwo{\the\usenamecount{l@dmaxlinesinpar\the\l@dpscL}}% + {\the\@donetotallinesL}% + {\usenamecount{l@dmaxlinesinpar\the\l@dpscL}}% + \global\@donetotallinesL \z@ + \global\advance\l@dpscL \@ne + \global\pstartnumtrue% + \restore@pstartL@pc% + \parledgroup@notes@endL + \parledgroup@correction@notespacing@final{L} + \else + \fi + \fi + \fi} +\newcommand*{\get@nextboxR}{% + \ifvbox\namebox{l@dRcolrawbox\the\l@dpscR}% box is not empty + \else% box is empty + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscR}>\@donetotallinesR + \parledgroup@notes@endR + \else + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscR}=\@donetotallinesR + \parledgroup@notes@endR + \fi + \ifwrittenlinesR\else + \@writelinesinparR + \writtenlinesRtrue + \fi + \ifnum\l@dnumpstartsR>\l@dpscR + \writtenlinesRfalse + \ifbypstart@R + \global\line@numR=0% + \resetprevline@% + \fi + \csuse{after@pendR@\the\l@dpscR}% + \global\csundef{after@pendR@\the\l@dpscR}% + \l@dcalc@maxoftwo{\the\usenamecount{l@dmaxlinesinpar\the\l@dpscR}}% + {\the\@donetotallinesR}% + {\usenamecount{l@dmaxlinesinpar\the\l@dpscR}}% + \global\@donetotallinesR \z@ + \global\advance\l@dpscR \@ne + \global\pstartnumRtrue% + \restore@pstartR@pc% + \parledgroup@notes@endR + \parledgroup@correction@notespacing@final{R} + \else + \print@last@after@pendRtrue% + \fi + \fi + \fi} + + + + +\newcommand{\par@patch@thepage}{% + \ifsameparallelpagenumber% + \patchcmd{\thepage}% + {page}{sameparallelpage@number}% + {}% + {\led@error@fail@patch@thepage}% + \fi% +}% +\apptocmd{\pagenumbering}{% + \par@patch@thepage% + }% + {}% + {\led@error@fail@patch@pagenumbering}% + +\AtBeginDocument{\par@patch@thepage}% + +\AtBeginDocument{% + \apptocmd{\@outputpage}{% + \ifsameparallelpagenumber% + \ifl@dprintingpages% + \ifodd\c@page\else% + \stepcounter{sameparallelpage@number}% + \fi% + \else% + \stepcounter{sameparallelpage@number}% + \fi% + \else% + \stepcounter{sameparallelpage@number}% + \fi% + }% + {}% + {\led@error@fail@patch@@outputpage}% +} +\newcounter{sameparallelpage@number}% +\setcounter{sameparallelpage@number}{1}% +\pretocmd{\chapter}{% + \ifl@dprintingpages% + \vbox{}% + \fi% + }% + {}% + {}% +\newcommand{\eledsectnotoc}[1]{\xdef\@eledsectnotoc{#1}} +\eledsectnotoc{R} +\newcommand{\eledsectmark}[1]{\xdef\@eledsectmark{#1}} +\eledsectmark{L} +\newskip\eledsection@correcting@skip +\newwrite\eled@sectioningR@out +\def\l@prev@pbR{} +\def\l@prev@nopbR{} +\newcommand{\ledpbR}{\write\linenum@outR{\string\led@pbR}} +\newcommand{\ledpbnumR}[1]{\write\linenum@outR{\string\led@pbnumR{#1}}} +\newcommand{\lednopbR}{\write\linenum@outR{\string\led@nopbR}} +\newcommand{\lednopbnumR}[1]{\write\linenum@outR{\string\led@nopbnumR{#1}}} +\newcommand{\led@pbR}{\listxadd{\l@prev@pbR}{\the\absline@numR}} +\newcommand{\led@pbnumR}[1]{\listxadd{\l@prev@pbR}{#1}} +\newcommand{\led@nopbR}{\listxadd{\l@prev@nopbR}{\the\absline@numR}} +\newcommand{\led@nopbnumR}[1]{\listxadd{\l@prev@nopbR}{#1}} +\newmarks\parledgroup@ +\newmarks\parledgroup@series +\newmarks\parledgroup@type +\newcommand{\parledgroup@notes@startL}{% + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscL}>0% + \IfStrEq{\splitfirstmarks\parledgroup@type}{footnoteX}{\csuse{bhooknoteX@\splitfirstmarks\parledgroup@series}}{}% + \IfStrEq{\splitfirstmarks\parledgroup@type}{Xfootnote}{\csuse{bhookXnote@\splitfirstmarks\parledgroup@series}}{}% + \fi% + \global\ledgroupnotesL@true% + \insert@noterule@ledgroup{L}% +} +\newcommand{\parledgroup@notes@startR}{% + \ifnum\usenamecount{l@dmaxlinesinpar\the\l@dpscR}>0% + \IfStrEq{\splitfirstmarks\parledgroup@type}{footnoteX}{\csuse{bhooknoteX@\splitfirstmarks\parledgroup@series}}{}% + \IfStrEq{\splitfirstmarks\parledgroup@type}{Xfootnote}{\csuse{bhookXnote@\splitfirstmarks\parledgroup@series}}{}% + \fi% + \global\ledgroupnotesR@true% + \insert@noterule@ledgroup{R}% +} +\newcommand{\parledgroup@notes@endL}{% + \global\ledgroupnotesL@false% +} +\newcommand{\parledgroup@notes@endR}{% + \global\ledgroupnotesR@false% +} +\newcommand{\insert@noterule@ledgroup}[1]{ + \IfStrEq{\splitbotmarks\parledgroup@}{begin}{% + \IfStrEq{\splitbotmarks\parledgroup@type}{Xfootnote}{ + \csuse{ifledgroupnotes#1@} + \vskip\skip\csuse{mp\splitbotmarks\parledgroup@series footins} + \csuse{\splitbotmarks\parledgroup@series footnoterule} + \fi + } + {} + \IfStrEq{\splitbotmarks\parledgroup@type}{footnoteX}{ + \csuse{ifledgroupnotes#1@} + \vskip\skip\csuse{mpfootins\splitbotmarks\parledgroup@series} + \csuse{footnoterule\splitbotmarks\parledgroup@series} + \fi + }{} + } + {} +} +\newcommand{\setparledgroupnotespacing}[1]{\gdef\@parledgroupnotespacing{#1}} +\newcommand{\@parledgroupnotespacing}{} +\dimdef{\parledgroup@notespacing@correction}{0pt} +\newcommand{\parledgroup@notespacing@set@correction}{% + {\@getfirstseries\csuse{Xnotefontsize@\@firstseries}%We suppose all the series has the same footnote size setup + \@parledgroupnotespacing\dimgdef{\temp@spacing}{\baselineskip}}% + \dimgdef{\parledgroup@notespacing@correction}{\baselineskip-\temp@spacing}% +} +\newcommand{\parledgroup@correction@notespacing@init}{ + \dimdef{\parledgroup@notespacing@correction@accumulated}{0pt} + \dimdef{\parledgroup@notespacing@correction@modulo}{0pt} +} +\parledgroup@correction@notespacing@init +\newcommand{\parledgroup@correction@notespacing@final}[1]{ + \ifparledgroup + \vspace{\parledgroup@notespacing@correction@accumulated} + \parledgroup@correction@notespacing@init% + \ifstrequal{#1}{L}{ + \numdef{\@checking}{\the\l@dpscL-1} + }{ + \numdef{\@checking}{\the\l@dpscR-1} + } + \dimdef{\@beforenotes@current@diff}{\csuse{@parledgroup@beforenotes@\@checking L}-\csuse{@parledgroup@beforenotes@\@checking R}}% + \ifstrequal{#1}{L}% + {% Left + \ifdimgreater{\@beforenotes@current@diff}{0pt}{}{\vspace{-\@beforenotes@current@diff}}% + }% + {% Right + \ifdimgreater{\@beforenotes@current@diff}{0pt}{\vspace{\@beforenotes@current@diff}}{} + }% + \fi +} +\newcommand{\parledgroup@correction@notespacing}[1]{% + \csuse{ifledgroupnotes#1@}% + \vspace{-\parledgroup@notespacing@correction}% + \dimdef{\parledgroup@notespacing@correction@accumulated}{\parledgroup@notespacing@correction@accumulated+\parledgroup@notespacing@correction}% + \dimdef{\parledgroup@notespacing@correction@modulo}{\parledgroup@notespacing@correction@modulo+\parledgroup@notespacing@correction}% + \ifdimless{\parledgroup@notespacing@correction@modulo}{\baselineskip}{}{\advance\numpagelinesL -\@ne% + \dimdef{\parledgroup@notespacing@correction@modulo}{\parledgroup@notespacing@correction@modulo-\baselineskip}% + }% mean greater than equal + \fi% +} +\dimdef\parledgroup@beforenotesL{0pt} +\dimdef\parledgroup@beforenotesR{0pt} +\newcommand{\parledgroup@beforenotes@save}[1]{ + \ifparledgroup + \csdimgdef{@parledgroup@beforenotes@\the\csuse{l@dnumpstarts#1}#1}{\csuse{parledgroup@beforenotes#1}} + \csdimgdef{parledgroup@beforenotes#1}{0pt} + \fi +} + +\ifeledmaccompat@% + + \unless\ifnocritical@ + \let\onlyXside\Xonlyside + \fi +\fi +\endinput +%% +%% End of file `reledpar.sty'. |