texlive[61113] Master/texmf-dist: ekdosis (21nov21)

commits+karl at tug.org commits+karl at tug.org
Sun Nov 21 22:13:16 CET 2021


Revision: 61113
          http://tug.org/svn/texlive?view=revision&revision=61113
Author:   karl
Date:     2021-11-21 22:13:16 +0100 (Sun, 21 Nov 2021)
Log Message:
-----------
ekdosis (21nov21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/lualatex/ekdosis/README.md
    trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.el
    trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf
    trunk/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf
    trunk/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx
    trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua
    trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty

Modified: trunk/Master/texmf-dist/doc/lualatex/ekdosis/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/ekdosis/README.md	2021-11-21 21:13:03 UTC (rev 61112)
+++ trunk/Master/texmf-dist/doc/lualatex/ekdosis/README.md	2021-11-21 21:13:16 UTC (rev 61113)
@@ -30,12 +30,12 @@
 
 -   email: <alessi at robertalessi.net>
 
--   website: <http://www.robertalessi.net/ekdosis>
+-   website: <http://www.ekdosis.org>
 
 -   comments, feature requests, bug reports:
-    <https://gitlab.com/ralessi/ekdosis/issues>
+    <http://www.ekdosis.org/issues>
 
--   mailing list, support: <http://www.robertalessi.net/mailman/listinfo/ekdosis> [[mailing list archives](http://www.robertalessi.net/pipermail/ekdosis/)]
+-   mailing list, support: <http://www.ekdosis.org/mailman/listinfo/ekdosis> [[mailing list archives](http://www.ekdosis.org/pipermail/ekdosis/)]
 
 This program is free software: you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by the
@@ -98,7 +98,7 @@
 
 Comments, Feature Requests, Bug Reports
 ---------------------------------------
-<https://gitlab.com/ralessi/ekdosis/issues>
+<http://www.ekdosis.org/issues>
 
 
 Download the Repository

Modified: trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.el
===================================================================
--- trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.el	2021-11-21 21:13:03 UTC (rev 61112)
+++ trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.el	2021-11-21 21:13:16 UTC (rev 61113)
@@ -105,6 +105,8 @@
     ("post")
     ("prewit")
     ("postwit")
+    ("subsep")
+    ("nosubsep")
     ("type")
     ("nordg" ("true" "false")))
   "Local options for rdg macro.")
@@ -116,6 +118,7 @@
     ("labele")
     ("sep")
     ("nosep")
+    ("subsep")
     ("num")
     ("nonum")
     ("pre")
@@ -138,7 +141,8 @@
     ("delend")
     ("sicbegin")
     ("sicend")
-    ("gapmark"))
+    ("gapmark")
+    ("keepinapp"))
   "List of local options for setcritsymbols macro.")
 
 (defvar LaTeX-ekdosis-sethooks-options
@@ -147,6 +151,7 @@
     ("postrefnum")
     ("lemmastyle")
     ("readingstyle")
+    ("familysep")
     ("initialrule")
     ("noinitialrule")
     ("keyparopts")
@@ -164,6 +169,7 @@
 (defvar LaTeX-ekdosis-setapparatus-options
   '(("direction" ("LR" "RL"))
     ("sep")
+    ("subsep")
     ("delim")
     ("bhook")
     ("ehook")
@@ -176,6 +182,7 @@
 (defvar LaTeX-ekdosis-declareapparatus-options
   '(("direction" ("LR" "RL"))
     ("sep")
+    ("subsep")
     ("delim")
     ("bhook")
     ("ehook")
@@ -195,6 +202,7 @@
     ("numbers" ("elided" "full"))
     ("vlineation" ("page" "document"))
     ("vmodulo")
+    ("vnumbrokenlines" ("true" "false"))
     ("vmargin" ("right" "left"))
     ("continuousvnum"))
   "List of local options for setlineation macro.")
@@ -329,6 +337,7 @@
     '("SetLTRapp" 0)
     '("SetRTLapp" 0)
     '("SetSeparator" "separator" 0)
+    '("SetSubseparator" "subseparator" 0)
     '("SetBeginApparatus" "chars|commands" 0)
     '("SetEndApparatus" "chars" 0)
     '("SetUnitDelimiter" "delimiter" 0)
@@ -338,6 +347,8 @@
     '("SetApparatus" (TeX-arg-key-val LaTeX-ekdosis-setapparatus-options))
     '("footnoteruletrue" 0)
     '("footnoterulefalse" 0)
+    '("ekdsep" 0)
+    '("ekdsubsep" 0)
     '("SetDefaultApparatus" "apparatus name" 0)
     '("DeclareApparatus" "apparatus name"
       [ TeX-arg-key-val LaTeX-ekdosis-declareapparatus-options ] 0)
@@ -347,6 +358,7 @@
     '("innerlinenumbers" 0)
     '("outerlinenumbers" 0)
     '("modulolinenumbers" [ "number" ] )
+    '("vmodulolinenumbers" [ "number" ] )
     '("resetlinenumber" [ "number" ] )
     '("resetvlinenumber" [ "number" ] )
     '("verselinenumfont" "commands" 0)
@@ -355,6 +367,7 @@
     '("MkBodyDivs" "div1" "div2" "div3" "div4" "div5" "div6" 0)
     '("ekddiv" (LaTeX-ekdosis-long-key-val LaTeX-ekdosis-ekddiv-options))
     '("FormatDiv" "number" "code before" "code after" 0)
+    '("ekdpage" 0)
     '("ekdmark" 0)
     '("endmark" 0)
     '("ekdprintmark"

Modified: trunk/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx	2021-11-21 21:13:03 UTC (rev 61112)
+++ trunk/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx	2021-11-21 21:13:16 UTC (rev 61113)
@@ -61,7 +61,7 @@
 %<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
 %<package>\ProvidesPackage{ekdosis}
 %<*package>
-    [2021/08/18 v1.3 Typesetting TEI xml-compliant critical editions]
+    [2021/11/21 v1.4 Typesetting TEI xml-compliant critical editions]
 %</package>
 %<*driver>
 \begin{filecontents}[noheader,overwrite]{bibdata.xml}
@@ -441,8 +441,13 @@
 }
 \end{filecontents}
 \begin{filecontents}[overwrite]{\jobname-ekd.cfg}
+%% fixfoot:---
+\DeclareFixedFootnote{\seeekdsep}{See below
+  \vpageref{ref:ekdsep-subsep} for more information and
+  \vref{lst:emend-coni-corr}, ll.~23--5 for an illustrative example.}
+%% ekdosis:---
 \footnotelayout{m}
-\SetCritSymbols{suppbegin = 〈,suppend = 〉}
+\SetCritSymbols{suppbegin = ⟨,suppend = ⟩}
 \EnvtoTEI{ancientgreek}{p}[xml:lang="grc"]
 \DeclareApparatus{fontium}[
         delim=\hskip0.75em,
@@ -558,14 +563,14 @@
 \defaultfontfeatures{Renderer=Harfbuzz}
 \usepackage[latin.classic,greek.ancient,american]{babel}
 \babelfont{rm}{Old Standard}
-\babelfont{sf}{NewComputerModernSans10}
-\babelfont{tt}{NewComputerModernMono10}
+\babelfont{sf}{NewCMSans10-Book}
+\babelfont{tt}{NewCMMono10-Book}
 \babelfont[greek]{rm}[
       Script=Greek,
       RawFeature={+ss05;+ss06}
       ]{Old Standard}
-\babelfont[greek]{sf}[Script=Greek]{NewComputerModernSans10}
-\babelfont[greek]{tt}[Script=Greek]{NewComputerModernMono10}
+\babelfont[greek]{sf}[Script=Greek]{NewCMSans10-Book}
+\babelfont[greek]{tt}[Script=Greek]{NewCMMono10-Book}
 \newfontfamily{\junicode}{Junicode}[
                 Ligatures=TeX,
                 RawFeature={+hist}]
@@ -575,6 +580,10 @@
 \usepackage[Old Standard]{mathfont}
 \usepackage[biblatex=true]{embrac}
 \usepackage{chifoot}
+\usepackage{fixfoot}
+\usepackage[nospace,american]{varioref}
+\newcommand\phts{\phantomsection}
+\usepackage{nameref}
 \usepackage{arabluatex}
 \usepackage[parnotes=roman, teiexport=tidy, poetry=verse]{ekdosis}
 \AddxmlBibResource{bibdata.xml}
@@ -628,9 +637,6 @@
 \labelformat{figure}{fig.~#1}
 \usepackage[defaultindex=none,citecmd=autocite]{icite}
 \bibinput{ekdosis}
-\usepackage[nospace,american]{varioref}
-\newcommand\phts{\phantomsection}
-\usepackage{nameref}
 \newcommand\vnref[1]{\vref{#1}, \enquote{\nameref{#1}}}
 \usepackage[style=oxnotes-inote,dashed]{biblatex}
 \DefineBibliographyStrings{english}{
@@ -805,7 +811,7 @@
 \usepackage{needspace}
 \NewDocumentCommand{\captof}{O{listing} m O{}}{%
   \bgroup
-  \needspace{5\baselineskip}%
+  \nobreak
   \vskip 1ex plus 2pt minus 2pt%
   \captionof{#1}{#2}%
   #3%
@@ -849,7 +855,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{2519}
+% \CheckSum{2635}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -927,10 +933,10 @@
 % Alessi:
 % \begin{itemize}
 % \item email: \mailto[ekdosis package]{Robert Alessi <alessi at roberalessi.net>}
-% \item website: \url{http://www.robertalessi.net/ekdosis}
+% \item website: \url{http://www.ekdosis.org}
 % \item development: \url{http://git.robertalessi.net/ekdosis}
 % \item comments, feature requests, bug reports:
-% \url{https://gitlab.com/ralessi/ekdosis/issues}
+% \url{http://www.ekdosis.org/issues}
 % \end{itemize}
 %
 % \leavevmode\marginpar{\hfill\texttt{gpl3+}}
@@ -1822,8 +1828,8 @@
 % \DescribeOption{type} |type|$=$\meta{type}\phts\label{ref:app-type}
 % \hfill\tcboxverb{Default: default}\\
 % As will be described below in \vref{sec:multilayer-apparatus},
-% \pkg{ekdosis} initially sets one layer of notes\--- the |default|
-% layer\---in the apparatus criticus. This layer is fit to receive
+% \pkg{ekdosis} initially sets one layer of notes\===the |default|
+% layer\===in the apparatus criticus. This layer is fit to receive
 % notes related to variant readings from witnesses and sources used by
 % the editor to establish the edition text. Additional layers can be
 % defined to receive other kinds of notes, such as references to texts
@@ -1855,8 +1861,8 @@
 % apparatus criticus, preceded by the line number where it occurs or a
 % broad space when the entry refers to the same line as the preceding
 % entry. \phts\label{ref:lem-opts-b}The optional argument of \cs{lem}
-% accepts the following
-% comma-separated list of \enquote{name$=$value} arguments:---\\
+% accepts the following comma-separated list of \enquote{name$=$value}
+% arguments:---\\
 % \DescribeOption{wit} |wit|$=$\meta{csv list of
 % witnesses}\phts\label{ref:lem-wit}\\
 % While a single witness may be recorded as in |wit=A|,
@@ -1864,11 +1870,16 @@
 % enclosed in curly braces, like so:
 % |wit={A,B,C}|. \phts\label{ref:mss-sep-families}It must be noted
 % that witnesses can be grouped by using spaces as separators, like
-% so: \verb*|wit={A,B,C, D,E,F}|. Although any unique identifiers or
-% labels used to \enquote{declare} sources and scholars as described
-% above \vpagerefrange{ref:declare-source}{ref:declare-scholar} can
-% also be used as values of the |wit| optional argument, it is
-% recommended to use |sources| and |resp| to refer to either category
+% so: \verb*|wit={A,B,C, D,E,F}|. \danger In the apparatus criticus in
+% print, it is customary to remind the reader of the manuscript
+% groupings by spaces or commas. \pkg{ekdosis} prints spaces by
+% default, but can be instructed to print any other symbol
+% instead.\footnote{See below \vpageref{ref:familysep} for details.}
+% \danger Although any unique identifiers or labels used to
+% \enquote{declare} sources and scholars as described above
+% \vpagerefrange{ref:declare-source}{ref:declare-scholar} can also be
+% used as values of the |wit| optional argument, it is recommended to
+% use |sources| and |resp| to refer to either category
 % respectively as described below.\\
 % \DescribeOption{source} |source|$=$\meta{csv list of
 % sources}\phts\label{ref:lem-source}\newfeature[v1.1]\\
@@ -1904,15 +1915,12 @@
 % if used. |nosep| removes the separator mentioned above. Obviously,
 % |nosep| must be used when for some reason no \cs{rdg} command
 % follows a \cs{lem} command that has just been used, as shown below
-% in \vref{lst:emend-coni-corr}, l.~7.
-% 
-% \needspace{2\baselineskip}
-% \danger \DescribeMacro{\ekdsep} If |nosep| be used so as to insert
-% an explanatory note after the lemma text with the \cs{note} command
-% described below \vpageref{ref:editorial-notes}, then \cs{ekdsep} can
-% be used\---for instance as value of the |post| optional argument of
-% the note\---to put back in the separator. This technique is
-% demonstrated below in \vref{lst:emend-coni-corr}, ll.~23--5.\\
+% in \vref{lst:emend-coni-corr}, l.~7.  \danger If |nosep| be used so
+% as to insert an explanatory note after the lemma text with the
+% \cs{note} command described below \vpageref{ref:editorial-notes},
+% then the |sep| optional argument of \cs{note} can be used to put
+% back in the separator. This technique is demonstrated below in
+% \vref{lst:emend-coni-corr}, ll.~23--5.\\
 % \DescribeOption{nolem} |nolem|$=$\verb+true|false+\\
 % This named argument does not need a value as it defaults to |true|
 % if used. |nolem| completely removes the lemma text from the related
@@ -1987,6 +1995,19 @@
 % \DescribeOption{post} |post|$=$\meta{words}\\
 % \DescribeOption{prewit} |prewit|$=$\meta{words}\\
 % \DescribeOption{postwit} |postwit|$=$\meta{words}\\
+% \DescribeOption{subsep} |subsep|$=$\meta{subseparator}\\
+% \newfeature[v1.4] |subsep| inserts a subseparator to be printed
+% \emph{before} the current entry as described below
+% \vpageref{ref:setsubseparator}. This option is supposed to be used
+% when no subseparator is defined, or when one is defined but for some
+% reason a different subseparator is needed for the current
+% entry.\\
+% \DescribeOption{nosubsep} This argument-less option removes the
+% subseparator from the current entry, provided one has been set by
+% means of \cs{SetSubseparator}, \cs{SetApparatus} or
+% \cs{DeclareApparatus}.\footnote{See
+% \vpagerefrange{ref:setsubseparator}{ref:apparatus-settings-e} and
+% \vref{sec:declaring-layers} for details.}
 %
 % \paragraph{Notes}
 % \DescribeMacro{\note}\phts\label{ref:notes-b}\DescribeMacro{\note*}
@@ -2007,6 +2028,10 @@
 % |pre| inserts \meta{words} immediately before the note.\\
 % \DescribeOption{post} |post|$=$\meta{words}\\
 % |post| inserts \meta{words} immediately after the note.\\
+% \DescribeOption{sep} This argument-less option is equivalent to
+% |post=\ekdsep|.\seeekdsep\\
+% \DescribeOption{subsep} This argument-less option is equivalent to
+% |pre=\ekdsubsep|.\seeekdsep\\
 %
 % \danger Under no circumstances is it permitted to insert this
 % command \cs{note} or \cs{note*} inside the argument of \cs{lem} or
@@ -2537,6 +2562,14 @@
 % \DescribeOption{gapmark}|gapmark|$=$\meta{symbols}
 % \hfill\tcboxverb{Default: ***}\\
 % The symbols used to mark lacunae.\\
+% \DescribeOption{keepinapp} |keepinapp|$=$\verb+true|false+
+% \hfill\tcboxverb{Default: false}\\
+% \newfeature[v1.4] This named argument does not need a value as it
+% defaults to |true| if used. By default, the critical symbols used by
+% \cs{supplied}, \cs{surplus} and \cs{sic} described below
+% \vpagerefrange{ref:corr-cmds-b}{ref:corr-cmds-e} are printed in the
+% edition text but removed from the apparatus. |keepinapp| instructs
+% \pkg{ekdosis} to print these symbols in both places.
 %
 % As an example, what follows sets |[]| for deletions and |...| for
 % lacunae:---
@@ -2564,6 +2597,7 @@
 % used to perform the test.
 %
 % \paragraph{Editorial Addition}
+% \phts\label{ref:corr-cmds-b}
 % \DescribeMacro{\supplied}\newfeature[v1.1]\cs{supplied}\marg{text}
 % is used to mark \meta{text} that is by definition missing from the
 % tradition as supplied by the editor or some other scholar. This
@@ -2581,6 +2615,7 @@
 % mandatory argument the text deemed by the editor to be readable but
 % not understandable. \cs{sic} inserts \meta{text} between cruces
 % while \cs{sic*} prints only one crux before \meta{text}.
+% \phts\label{ref:corr-cmds-e}
 %
 % \paragraph{Lacuna}
 % \DescribeMacro{\gap}\newfeature[v1.1] \cs{gap}\marg{csv list of
@@ -2639,7 +2674,7 @@
 
   Πάντων δὲ \app{
     \lem[resp=egomute, type=emendation, nosep]{\supplied{τῶν πυρετῶν}}
-    \note[post=\ekdsep]{addidi (\arb{^gamI`a 'l-.hummayAti}
+    \note[sep]{addidi (\arb{^gamI`a 'l-.hummayAti}
       \getsiglum{Gal})}
     \rdg[nordg, source=Gal]{\arb{al-.hummayAti}}
     \rdg[wit=codd, source=edd, alt=om.]{}
@@ -2676,7 +2711,7 @@
 %
 %  Πάντων δὲ \app{
 %    \lem[resp=egomute, type=emendation, nosep]{\supplied{τῶν πυρετῶν}}
-%    \note[post=\ekdsep]{addidi (\arb{^gamI`a 'l-.hummayAti}
+%    \note[sep]{addidi (\arb{^gamI`a 'l-.hummayAti}
 %      \getsiglum{Gal})}
 %    \rdg[nordg, source=Gal]{\arb{al-.hummayAti}}
 %    \rdg[wit=hcodd, source=hedd, alt=om.]{}
@@ -2985,7 +3020,7 @@
 %   \emph{semicolons}, as shown in red in the listing below at the end
 %   of lines~1 and 2.
 %   \begin{enumerate}
-%   \item[\dbend] The colon at the end of line~3 closes the whole
+%   \item[\dbend] The comma at the end of line~3 closes the whole
 %     value of |text| and acts as a higher level separator.
 %   \end{enumerate}
 % \item \phts\label{it:lang-subopt} Each name may be followed by a
@@ -3318,6 +3353,20 @@
 % \hfill\tcboxverb{Default: not set}\\
 % \newfeature[v1.2] |readingstyle| operates in the same way as
 % |lemmastyle| but applies to variant readings.\\
+% \DescribeOption{familysep} |familysep|$=$\meta{symbol}\verb+|reset+
+% \phts\label{ref:familysep}\hfill\tcboxverb{Default: not set}\\
+% \newfeature[v1.4] As described above \vpageref{ref:lem-wit},
+% multiple witnesses must be recorded in the |wit| optional argument
+% of the \cs{lem} and \cs{rdg} commands as comma-separated lists of
+% sigla which can be further grouped into families by inserting spaces
+% as separators just after commas at specific places. \pkg{ekdosis}
+% saves and prints these spaces in the apparatus criticus but can be
+% instructed to print any other symbol instead by means of
+% |familysep|. For instance, |familysep={,}| has the separating spaces
+% replaced with commas and |familysep={,\allowbreak}| does the same
+% while further allowing breaks after commas at the end of
+% lines. Finally, |familysep=reset| can be used to restore the default
+% behavior.\\
 % \DescribeOption{initialrule} |initialrule|$=$\meta{command}
 % \phts\label{ref:initialrule}\hfill\bgroup\footnotesize
 % \tcboxverb{Default: \rule{0.4\columnwidth}{0.4pt} (initially not set)}%
@@ -3325,8 +3374,7 @@
 % between the edition text and all subsequent layers of critical
 % notes. Of course, this option only makes sense when multiple-layer
 % apparatus criticus are set. Therefore, it has no effect on
-% single-layer apparatus
-% criticus.\\
+% single-layer apparatus criticus.\\
 % \DescribeOption{noinitialrule}\hfill\tcboxverb{Default: not set}\\
 % This is a no-value option. It removes any previously set
 % |initialrule|.
@@ -3386,10 +3434,38 @@
 % right-to-left.
 %
 % \DescribeMacro{\SetSeparator} \cs{SetSeparator}\marg{separator} is
-% used to change the separator between lemma texts and variants
+% used to change the separator between lemma texts and variant
 % readings. By default, the separator is a closing square bracket
 % followed by a space (\verb*+] +).
 %
+% \DescribeMacro{\SetSubseparator}\label{ref:setsubseparator}
+% \newfeature[v1.4] \cs{SetSubseparator}\marg{subseparator} is used to
+% set or change the \enquote{subseparator} between succeeding variant
+% readings. By default, no subseparator is set.
+%
+% \danger As the subseparator applies to subsequent variant readings
+% only, it is naturally preceded by a breakable space. This space can
+% be removed by \cs{unskip}. As an example, what follows replaces the
+% breakable space with an unbreakable space, then prints a colon as
+% subseparator followed by a space:---
+% 
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+\SetSubseparator{\unskip~: }
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \danger \DescribeMacro{\ekdsep} \DescribeMacro{\ekdsubsep}
+% \phts\label{ref:ekdsep-subsep} Once the separator and if applicable
+% the subseparator have been set, they can be accessed by \cs{ekdsep}
+% and \cs{ekdsubsep} respectively. It is therefore advisable to use
+% these commands instead of the mere symbols at whatever place one
+% would have them printed.
+%
 % \DescribeMacro{\SetBeginApparatus}
 % \cs{SetBeginApparatus}\marg{characters\textbar commands} can be used
 % to append \meta{characters} or \meta{commands} at the beginning of
@@ -3452,6 +3528,9 @@
 % \DescribeOption{sep} |sep|$=$\meta{command \textbar\ chars}
 % \hfill\tcboxverb{Default: ]␣}\\
 % The separator between lemma texts and variant readings.\\
+% \DescribeOption{subsep} |subsep|$=$\meta{command \textbar\ chars}
+% \hfill\tcboxverb{Default: not set}\\
+% The \enquote{subseparator} between succeeding variant readings.\\
 % \DescribeOption{delim} |delim|$=$\meta{delimiter}
 % \hfill\tcboxverb{Default: not set}\\
 % The delimiter between entries in the apparatus criticus. As said
@@ -3470,7 +3549,7 @@
 % between the edition text and the apparatus criticus.\\
 % \DescribeOption{norule}\hfill\tcboxverb{Default: not set}\\
 % |norule| does not accept any value and is used to remove the
-% line.\phts\label{ref:apparatus-settings-e}\\
+% line.\\
 % \DescribeOption{lang} |lang|$=$\meta{languagename}
 % \newfeature[v1.2]\phts\label{ref:app-lang-opt}
 % \hfill\tcboxverb{Default: not set}\\
@@ -3489,7 +3568,8 @@
 % \cs{note}\oarg{options}\marg{text}\===a language different from the
 % one that is selected in the edition text. |languagename| can be any
 % value accepted by \pkg{babel} or \pkg{polyglossia}.
-% 
+% \phts\label{ref:apparatus-settings-e}
+%
 % As an example, an apparatus criticus with references to line numbers
 % printed in normal font, a colon as a separator between lemma texts
 % and variant readings, a broad space as a delimiter between entries
@@ -3578,6 +3658,7 @@
 % \label{sec:layout-layers}
 % \DescribeOption{direction}
 % \DescribeOption{sep}
+% \DescribeOption{subsep}
 % \DescribeOption{delim}
 % \DescribeOption{bhook}
 % \DescribeOption{ehook}
@@ -3603,7 +3684,7 @@
 % \iffalse
 %<*example>
 % \fi
-\begin{minted}{latex}
+\begin{minted}[numbersep=6pt]{latex}
 \SetHooks{
   refnumstyle=\normalfont,
   initialrule=\rule{0.7in}{0.4pt}
@@ -4087,14 +4168,18 @@
 %   instead of |\\|.
 % \item |\\*| does the same as |\\| except that it prohibits a page
 %   break after the line.
-% \item |\\>| is for line breaks within a verse line.
+% \item |\\>| \label{ref:vlinebreak-indent}is for line breaks within a
+%   verse line.
+% \item |\\+| \newfeature[v1.4] \label{ref:vlinebreak-noindent}does
+%   the same as |\\>| but without indenting the subsequent line which
+%   further complies to any already defined indent pattern.
 % \end{enumerate}
 %
 % All of these commands can take a dimension as optional argument,
-% like so: |\\[30pt]|, |\\![30pt]|, |\\*[30pt]| or |\\>[30pt]|. If
-% |\\|, |\\!| or |\\*| be used, a vertical space of the dimension
-% specified is added between lines, whereas |\\>[...]| adds an
-% horizontal space after the line break.
+% like so: |\\[30pt]|, |\\![30pt]|, |\\*[30pt]|, |\\>[30pt]| or
+% |\\+[30pt]|. If |\\|, |\\!|, |\\*| or |\\+| be used, a vertical
+% space of the dimension specified is added between lines, whereas
+% |\\>[...]| adds an horizontal space after the line break.
 %
 % \DescribeMacro{\vin} \phts\label{ref:verse-vin}\cs{vin} indents a
 % verse line by a length which is by default \unit[1.5]{em}. This
@@ -4716,6 +4801,16 @@
 % verse printed in the margin. If used without value, this option is
 % equivalent to |vmodulo=5|. |vmodulo=0| prevents the
 % numbers from being printed.\\
+% \DescribeOption{vnumbrokenlines}
+% |vnumbrokenlines|$=$\verb+true|false+ %
+% \hfill\tcboxverb{Initially: false}\\
+% \newfeature[v1.4] This named argument does not need a value as it
+% defaults to |true| if used. |vnumbrokenlines| has both parts of lines
+% broken by |\\>| or |\\+|\footnote{See above
+% \vrefrange{ref:vlinebreak-indent}{ref:vlinebreak-noindent} for more
+% information.} numbered with the same number for disambiguation
+% purposes. By default, only the second part of broken lines is
+% numbered.\\
 % \DescribeOption{vmargin} |vmargin|$=$\verb+right|left+
 % \hfill\tcboxverb{Default: right}\\
 % |vmargin| sets the margin in which the verse line numbers are to be
@@ -4726,13 +4821,13 @@
 % numbered continuously, irrespective of whether they are lines of
 % prose or poetry text.
 %
-%
 % \paragraph{Useful Lineation Commands}
 % As implied above, pretty much all commands that are provided by the
 % \enquote{running} mode of operation of the \pkg{lineno} package will
 % work with \pkg{ekdosis}, notably the following:---\\
 % \DescribeMacro{\modulolinenumbers} \cs{modulolinenumbers}\oarg{n}
-% can be used to enable modulo line numbering as described above.\\
+% can be used to enable or modify modulo line numbering as described
+% above.\\
 % \DescribeMacro{\resetlinenumber} \cs{resetlinenumber}\oarg{n} resets
 % the line number to one or to \emph{n} if specified.\\
 % \DescribeMacro{\linenumberfont}
@@ -4750,6 +4845,9 @@
 % global option |poetry=verse| as described above in
 % \vref{sec:verse-package}, the commands dedicated to line numbering
 % that are provided by the \pkg{verse} package can be used.\\
+% \DescribeMacro{\vmodulolinenumbers} \newfeature[v1.4]
+% \cs{vmodulolinenumbers}\oarg{n} can be used to enable or modify
+% verse modulo line numbering as described above.\\
 % \DescribeMacro{\resetvlinenumber} \cs{resetvlinenumber}\oarg{n} has
 % for lines of verse the same effect as \cs{resetlinenumber} for
 % lines of prose text.\\
@@ -4756,9 +4854,7 @@
 % \DescribeMacro{\verselinenumfont}
 % \cs{verselinenumfont}\marg{commands} can be used to set the font
 % used for lines of verse. By default, the definition is
-% |\normalfont\footnotesize|. \danger If the \cls{memoir} class be
-% loaded, this command is replaced with \cs{linenumberfont} described
-% above.\\
+% |\normalfont\footnotesize|.\\
 % \DescribeMacro{\vrightskip} The \pkg{verse} package prints the
 % numbers at the distance \cs{vrightskip} into the right margin. This
 % distance can be redefined by means of \cs{setlength} like so:
@@ -7563,7 +7659,7 @@
 \newif\if at pkg@float
 \newif\if at pkg@footins
 \newif\if at pkg@keyfloat
-\newif\if at pkg@fitfloat
+\newif\if at pkg@fitapp
 \newif\if at pkg@ekddivs
 \newif\if at parnotesroman
 \newif\if at pkg@parnotes
@@ -7573,7 +7669,7 @@
   choice layout = {float = {\@pkg at floattrue},
     footins = {\@pkg at floatfalse\@pkg at footinstrue},
     keyfloat = {\@pkg at floatfalse\@pkg at keyfloattrue},
-    fitfloat = {\@pkg at floatfalse\@pkg at fitfloattrue}},
+    fitapp = {\@pkg at floatfalse\@pkg at fitapptrue}},
   initial layout = float,
   unknown-choice layout = \PackageError{ekdosis}{unknown
     layout=#1}{`layout' must be either `float' or `footins'.},
@@ -7632,7 +7728,7 @@
       \keyparbox[!b]{#1}{\ekd at insert@apparatus}}}
   \ekd at keyparopts{}
 \fi
-\if at pkg@fitfloat
+\if at pkg@fitapp
   \RequirePackage{tcolorbox}
   \tcbuselibrary{fitting,skins}
 \fi
@@ -7690,6 +7786,7 @@
   store appfontsize = \ekd at appfontsize,
   store refnumstyle = \ekd at refnumstyle,
   store postrefnum = \ekd at postrefnum,
+  code familysep = \luadirect{ekdosis.setfamilysep(\luastringN{#1})},
   store lemmastyle = \ekd at lemmastyle,
   store readingstyle = \ekd at readingstyle,
   code keyparopts = \if at pkg@keyfloat\ekd at keyparopts{#1}\fi,
@@ -8008,6 +8105,7 @@
   nmeta norule = {rule=none},
   code delim = \def\delim at val{\unexpanded{#1}},
   store sep = \sep at val,
+  store subsep = \subsep at val,
   store bhook = \bhook at val,
   store ehook = \ehook at val,
   store maxentries = \limit at val,
@@ -8042,6 +8140,7 @@
     \luastringO{\rule at val},
     \luastringO{\delim at val},
     \luastringO{\sep at val},
+    \luastringO{\subsep at val},
     \luastringO{\bhook at val},
     \luastringO{\ehook at val},
     \luastringO{\limit at val},
@@ -8181,6 +8280,7 @@
 %    \begin{macrocode}
 \newif\ifrtl at app
 \edef\ekdsep{] }
+\edef\ekdsubsep{}
 \ekvdefinekeys{default at app}{
   choice direction = {LR = \rtl at appfalse,
     RL = \rtl at apptrue},
@@ -8187,6 +8287,7 @@
   unknown-choice direction = \PackageError{ekdosis}{unknown
     direction=#1}{`direction' must be either `LR' or `RL'.},
   code sep = \edef\ekdsep{#1},
+  code subsep = \edef\ekdsubsep{#1},
   store bhook = \ekd at begin@apparatus,
   initial bhook = {},
   store ehook = \ekd at end@apparatus,
@@ -8232,6 +8333,15 @@
 \NewDocumentCommand{\SetSeparator}{m}{\edef\ekdsep{#1}}
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\SetSubseparator}
+% \changes{v1.4}{2021/11/21}{New command for subseparators}
+% \cs{SetSubseparator}\marg{sub-separator} allows to change the
+% \enquote{subseparator} between variant readings. By default,
+% no subseparator is set:---
+%    \begin{macrocode}
+\NewDocumentCommand{\SetSubseparator}{m}{\edef\ekdsubsep{#1}}
+%    \end{macrocode}
+% \end{macro}
 % \begin{macro}{\SetBeginApparatus}
 %   \cs{SetBeginApparatus}\marg{characters} can be used to append
 %   characters at the beginning of the apparatus block. By default,
@@ -8352,13 +8462,14 @@
 % either in the footnote floating block or in a float of its own,
 % depending on the value set in the |layout| global option. As some
 % commands need to know whether they are called from inside the
-% apparatus criticus, a conditional is first defined.
+% apparatus criticus, two conditionals are first defined.
 %    \begin{macrocode}
 \newif\ifekd at inside@app
+\newif\ifekd at keepinapp
 %    \end{macrocode}
 % Then \cs{ekd at fitapp} is defined for |layout=fitapp|:---
 %    \begin{macrocode}
-\if at pkg@fitfloat
+\if at pkg@fitapp
   \newtcboxfit{\ekd at fitapp}{%
     blankest,
     fit basedim = \f at size pt,
@@ -8425,7 +8536,7 @@
   \if at pkg@keyfloat
     \ekd at insert@keyparapp
   \fi
-  \if at pkg@fitfloat
+  \if at pkg@fitapp
     \ekd at fitapp{\ekd at insert@apparatus}%
   \fi
 }
@@ -8521,6 +8632,7 @@
                  \else\if at pkg@poetry at verse\poemlines{#1}\fi\fi,
   initial vmodulo = 1,
   default vmodulo = 5,
+  bool vnumbrokenlines = \ifnum at brokenline,
   bool continuousvnum = \if at continuous@vnum,
   choice numbers = {elided = \ekd at elidednumberstrue,
     full = \ekd at elidednumbersfalse},
@@ -8552,6 +8664,22 @@
 }
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\vmodulolinenumbers}
+% \changes{v1.4}{2021/11/21}{New command to adjust modulo verse line
+% numbering}
+%    \begin{macrocode}
+\NewDocumentCommand{\vmodulolinenumbers}{O{5}}{%
+  \ifekd at memoir@loaded
+    \linenumberfrequency{#1}%
+  \else
+    \if at pkg@poetry at verse
+      \poemlines{#1}%
+    \fi
+  \fi
+  \ignorespaces
+}
+%    \end{macrocode}
+% \end{macro}
 % Use |\normalfont| for line numbers:---
 %    \begin{macrocode}
 \renewcommand\linenumberfont{\normalfont\footnotesize}
@@ -8593,6 +8721,19 @@
   \endgroup}
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\ekdpage}
+% \changes{v1.4}{2021/11/21}{prints page marks used internally by
+% \textsf{ekdosis} to generate the apparatus blocks on pages}
+% Instead of absolute page numbers, \pkg{ekdosis} now marks the
+% entries of the apparatus with its own page numbering
+% scheme. \cs{ekdpage} can be used at any point of the document to
+% retrieve and print the current number.
+%    \begin{macrocode}
+\NewDocumentCommand{\ekdpage}{}{%
+  \luadirect{tex.sprint(ekdosis.getekdabspg())}%
+}
+%    \end{macrocode}
+% \end{macro}
 % \cs{current at ref@arg} is used outside \cs{app} by \cs{note}. It takes
 % two mandatory arguments: the beginning line label and the ending
 % line label\---which are manually inserted---and returns the formatted
@@ -8817,6 +8958,9 @@
   code post = \def\ekdlr at post{#1},
   code prewit = \def\ekdlr at prewit{#1},
   code postwit = \def\ekdlr at postwit{#1},
+  store subsep = \ekdr at subsep,
+  initial subsep = \ekdsubsep,
+  bool nosubsep = \ifekdr at nosubsep,
   store type = \ekdlr at type,
   bool nordg = \ifekdr at nordg
 }
@@ -8987,8 +9131,11 @@
 % \cs{rdg}\oarg{options}\marg{variant reading} inserts \meta{variant
 % reading} in the second part of the entry, after the lemma text and
 % the separator, in the apparatus criticus. This command accepts the
-% optional key-value arguments defined above.
+% optional key-value arguments defined above. This command sets
+% \cs{ifekd at subsq@rdg} to true, which instructs \pkg{ekdosis} that
+% \enquote{subseparators} may be used for subsequent entries.
 %    \begin{macrocode}
+\newif\ifekd at subsq@rdg
 \NewDocumentCommand{\rdg}{O{} m}{%
   \bgroup%
   \ekvset{rdg}{#1}%
@@ -9005,6 +9152,9 @@
   \else%
   \ifbool{al at rlmode}{%
     \edef\rdg at app{%
+      \ifekd at subsq@rdg
+        \unless\ifekdr at nosubsep\unexpanded\expandafter{\ekdr at subsep}\fi
+      \fi
       \ifdefined\ekdlr at alt%
         \ifdefined\ekdlr at post%
           \space\unexpanded\expandafter{\ekdlr at post}\space\else\fi
@@ -9031,6 +9181,9 @@
   }%
   {%
     \edef\rdg at app{%
+      \ifekd at subsq@rdg
+        \unless\ifekdr at nosubsep\unexpanded\expandafter{\ekdr at subsep}\fi
+      \fi
       \ifdefined\ekdlr at alt%
         \ifdefined\ekdlr at pre%
           \space\unexpanded\expandafter{\ekdlr at pre}\space\else\fi
@@ -9061,13 +9214,14 @@
         \space\unexpanded\expandafter{\ekdlr at postwit}\else\fi
     }%
   }%
-  \ifekd at mapps%
+  \ifekd at mapps
       \append at app[\ekdan at type]{\rdg at app}%
-  \else%
+  \else
   \append at app{\rdg at app}%
-  \fi%
-  \fi%
-  \egroup%
+  \fi
+  \fi
+  \egroup
+  \ekd at subsq@rdgtrue
 }
 %    \end{macrocode}
 % \end{macro}
@@ -9177,7 +9331,9 @@
 %    \begin{macrocode}
 \ekvdefinekeys{ekd at note}{
   store pre = \pre at value,
-  store post = \post at value
+  store post = \post at value,
+  nmeta sep = {post=\ekdsep},
+  nmeta subsep = {pre=\ekdsubsep}
 }
 %    \end{macrocode}
 % The following three commands, \cs{note at app}, \cs{ekd at note} and
@@ -9276,7 +9432,8 @@
   initial delend = \ifbool{al at rlmode}{\{}{\}},
   initial sicbegin = \dag,
   initial sicend = \dag,
-  initial gapmark = ***
+  initial gapmark = ***,
+  bool keepinapp = \ifekd at keepinapp
 }
 %    \end{macrocode}
 % \begin{macro}{\supplied}
@@ -9286,9 +9443,13 @@
 %    \begin{macrocode}
 \NewDocumentCommand{\supplied}{m}{%
   \ifekd at inside@app
-  #1%
+    \ifekd at keepinapp
+      \suppb at value #1\suppe at value
+    \else
+      #1%
+    \fi
   \else
-  \suppb at value #1\suppe at value
+    \suppb at value #1\suppe at value
   \fi
 }
 %    \end{macrocode}
@@ -9302,9 +9463,13 @@
 %    \begin{macrocode}
 \NewDocumentCommand{\surplus}{m}{%
   \ifekd at inside@app
-  #1%
+    \ifekd at keepinapp
+      \delb at value #1\dele at value
+    \else
+      #1%
+    \fi
   \else
-  \delb at value #1\dele at value
+    \delb at value #1\dele at value
   \fi
 }
 %    \end{macrocode}
@@ -9319,11 +9484,17 @@
 %    \begin{macrocode}
 \NewDocumentCommand{\sic}{s m}{%
   \ifekd at inside@app
-  #2%
+    \ifekd at keepinapp
+      \IfBooleanTF{#1}
+        {\sicb at value #2}
+        {\sicb at value #2\sice at value}%
+    \else
+      #2%
+    \fi
   \else
-  \IfBooleanTF{#1}
-    {\sicb at value #2}
-    {\sicb at value #2\sice at value}%
+    \IfBooleanTF{#1}
+      {\sicb at value #2}
+      {\sicb at value #2\sice at value}%
   \fi
 }
 %    \end{macrocode}
@@ -9767,6 +9938,35 @@
 }
 %    \end{macrocode}
 % \end{macro}
+% \begin{macro}{\\+}
+% \changes{v1.4}{2021/11/21}{New macro for poetry}
+% |\\+| comes in addition to the verse commands that are provided by
+% the \pkg{verse} package. |\\+| causes a linebreak within a verse
+% line. In contrast to |\\>|, the subsequent line is not indented and
+% complies to any already defined indent pattern. \cs{@vscentercr}
+% must be redefined accordingly.
+%    \begin{macrocode}
+\ifboolexpr{bool {@pkg at poetry@verse} or bool {ekd at memoir@loaded}}
+ {\newcommand{\@vsifplus}[1]{\@ifnextchar +{\@firstoftwo{#1}}}
+   \renewcommand{\@vscentercr}{%
+     \ifhmode \unskip\else \@nolnerr\fi
+     \@vsifgt{\ifnum at brokenline\@vstypelinenum\fi\verselinebreak}{%
+       \@vsifplus{\ifnum at brokenline\@vstypelinenum\fi\stepcounter{vslineno}%
+         \par\@ifstar{\nobreak\@vsxcentercr}{%
+           \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
+         }%      
+       }{%
+         \@vstypelinenum
+         \incr at vsline%
+         \par\@ifstar{\nobreak\@vsxcentercr}{%
+           \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
+         }%
+       }%
+     }%
+   }
+ }{}
+%    \end{macrocode}
+% \end{macro}
 % A small patch is applied to the \pkg{verse} package, then
 % \env{ekdverse} is defined:---
 %    \begin{macrocode}
@@ -9781,7 +9981,8 @@
   code type = \def\type at value{#1},
 }
 \ifekd at memoir@loaded
-  \linenumberfont{\normalfont\footnotesize}
+  \def\vlvnumfont{\normalfont\footnotesize}
+  \def\verselinenumfont#1{\def\vlvnumfont{#1}}
 \else
   \verselinenumfont{\normalfont\footnotesize}
 \fi
@@ -9927,7 +10128,7 @@
 local inopeningnote = lpeg.Cs{ "<note" * ((1 - (lpeg.P"<" + lpeg.P">")) + lpeg.V(1))^0 * ">" }
 local lnbrk = lpeg.Cs("\\\\")
 local poemline = lpeg.Cs(lnbrk * spcenc^-1 * lpeg.S("*!")^-1 * bsqbrackets^-1 * spcenc^-1)
-local poemlinebreak = lpeg.Cs(lnbrk * spcenc^-1 * lpeg.P(">") * bsqbrackets^-1 * spcenc^-1)
+local poemlinebreak = lpeg.Cs(lnbrk * spcenc^-1 * (lpeg.P(">") + lpeg.P("+")) * bsqbrackets^-1 * spcenc^-1)
 local linegroup = lpeg.Cs{ "<lg" * ((1 - lpeg.S"<>") + lpeg.V(1))^0 * ">" }
 local bclinegroup = lpeg.Cs(linegroup + lpeg.P("</lg>"))
 local endpoem = lpeg.Cs(lnbrk * lpeg.S("*!") * bsqbrackets^-1) -- not used
@@ -10227,6 +10428,18 @@
    return true
 end
 
+local familysep = nil
+
+function ekdosis.setfamilysep(str)
+   if str == "reset"
+   then
+      familysep = nil
+   else
+      familysep = str
+   end
+   return true
+end
+
 function ekdosis.getsiglum(str, opt)
    str = str..","
    str = string.gsub(str, "%s-(%,)", "%1")
@@ -10250,6 +10463,10 @@
 	 str  = string.gsub(str, tempc.."%,", idsRend[i].abbr)
 	 ctrl = string.gsub(ctrl, tempc.."%,", "")
       end
+      if familysep ~= nil
+      then
+	 str = string.gsub(str, "%s+", familysep)
+      end
    end
    -- if string.find(ctrl, "[A-Za-z0-9]")
    if string.find(ctrl, "%S")
@@ -10289,6 +10506,10 @@
 local texpatttotags = {
    {a="\\addentries%s+%[(.-)%]{(.-)}", b=""},
    {a="\\addentries%s+{(.-)}", b=""},
+   {a="\\vmodulolinenumbers%s+%[(.-)%]", b=""},
+   {a="\\vmodulolinenumbers%s+", b=""},
+   {a="\\modulolinenumbers%s+%[(.-)%]", b=""},
+   {a="\\modulolinenumbers%s+", b=""},
    {a="\\setverselinenums%s+{(.-)}{(.-)}", b=""},
    {a="\\resetvlinenumber%s+%[(.-)%]", b=""},
    {a="\\resetvlinenumber%s+", b=""},
@@ -10630,6 +10851,9 @@
    end)
    str = string.gsub(str, "\\begin%s?%{ekdverse%}(.-)\\end%s?%{ekdverse%}", function(arg)
 			arg = string.gsub(arg, "\\par%s?", "")
+			arg = string.gsub(arg, "\\begin%s?%{patverse%*?%}", "")
+			arg = string.gsub(arg, "\\end%s?%{patverse%*?%}", "")
+			arg = string.gsub(arg, "\\indentpattern%s?%b{}", "")
 			return "\\p at rb "..linestotei(string.format("<lg>%s</lg>", arg)).."\\p at ra "
    end)
    str = string.gsub(str, "\\begin%s?%{verse%}%b[](.-)\\end%s?%{verse%}", function(arg)
@@ -11546,6 +11770,7 @@
 end
 
 local cur_abs_pg = 0
+local ekd_abs_pg = 0
 local pg_i = nil
 local pg_ii = nil
 local prevcol = nil
@@ -11559,6 +11784,12 @@
 end
 
 function ekdosis.storeabspg(n, pg)
+   if tonumber(n) > tonumber(cur_abs_pg)
+   then
+      ekd_abs_pg = ekd_abs_pg + 1
+   end
+   cur_abs_pg = n
+   n = ekd_abs_pg
    if pg == "pg_i" then
       pg_i = n
    elseif pg == "pg_ii" then
@@ -11565,10 +11796,13 @@
       pg_ii = n
       table.insert(check_resetlineno, curcol.."-"..pg_ii)
    end
-   cur_abs_pg = n
    return true
 end
 
+function ekdosis.getekdabspg()
+   return ekd_abs_pg
+end
+
 function ekdosis.checkresetlineno()
    if isfound(check_resetlineno, curcol.."-"..pg_i)
    then
@@ -11806,6 +12040,7 @@
 			      apprule,
 			      appdelim,
 			      appsep,
+			      appsubsep,
 			      appbhook,
 			      appehook,
 			      applimit,
@@ -11822,6 +12057,7 @@
 				 rule = apprule,
 				 delim = appdelim,
 				 sep = appsep,
+				 subsep = appsubsep,
 				 bhook = appbhook,
 				 ehook = appehook,
 				 limit = applimit,
@@ -11922,8 +12158,8 @@
    local f = io.open(tex.jobname.."_tmp.ekd", "a+")
    if next(apparatuses) == nil
    then
-      f:write("<", cur_abs_pg, cur_alignment, curcol, "-0>", str, "</",
-	      cur_abs_pg, cur_alignment, curcol, "-0>\n")
+      f:write("<", ekd_abs_pg, cur_alignment, curcol, "-0>", str, "</",
+	      ekd_abs_pg, cur_alignment, curcol, "-0>\n")
    else
       for i = 1,#apparatuses
       do
@@ -11932,8 +12168,8 @@
 	    break
 	 end
       end
-      f:write("<", cur_abs_pg, cur_alignment, curcol, "-",
-	      appno, ">", str, "</", cur_abs_pg, cur_alignment, curcol, "-", appno, ">\n")
+      f:write("<", ekd_abs_pg, cur_alignment, curcol, "-",
+	      appno, ">", str, "</", ekd_abs_pg, cur_alignment, curcol, "-", appno, ">\n")
    end
    f:close()
    return true
@@ -11951,10 +12187,10 @@
 	 table.insert(output, "\\csname ekd at begin@apparatus\\endcsname\\ignorespaces")
 --	 table.insert(output, "\\noindent ")
 	 for i in string.gmatch(t,
-				"<"..cur_abs_pg
+				"<"..ekd_abs_pg
 				   ..cur_alignment_patt
 				   ..curcol.."%-0>.-</"
-				   ..cur_abs_pg
+				   ..ekd_abs_pg
 				   ..cur_alignment_patt
 				   ..curcol.."%-0>")
 	 do
@@ -11966,10 +12202,10 @@
 	 local n = 1
 	 while apparatuses[n]
 	 do
-	    if string.match(t, "<"..cur_abs_pg
+	    if string.match(t, "<"..ekd_abs_pg
 			       ..cur_alignment_patt
 			       ..curcol.."%-"..n..">.-</"
-			       ..cur_abs_pg
+			       ..ekd_abs_pg
 			       ..cur_alignment_patt
 			       ..curcol.."%-"..n..">")
 	    then
@@ -12026,6 +12262,10 @@
 		  table.insert(output, "\\edef\\ekdsep{" .. apparatuses[n].sep .. "}")
 	       else
 	       end
+	       if apparatuses[n].subsep ~= ""
+	       then
+		  table.insert(output, "\\edef\\ekdsubsep{" .. apparatuses[n].subsep .. "}")
+	       end
 	       if apparatuses[n].bhook ~= ""
 	       then
 		  table.insert(output, apparatuses[n].bhook)
@@ -12033,10 +12273,10 @@
 		  table.insert(output, "\\relax")
 	       end
 	       for i in string.gmatch(t,
-				      "<"..cur_abs_pg
+				      "<"..ekd_abs_pg
 					 ..cur_alignment_patt
 					 ..curcol.."%-"..n..">.-</"
-					 ..cur_abs_pg
+					 ..ekd_abs_pg
 					 ..cur_alignment_patt
 					 ..curcol.."%-"..n..">")
 	       do
@@ -12056,8 +12296,8 @@
       end
       f:close()
       str = table.concat(output)
-      str = string.gsub(str, "</"..cur_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", "")
-      str = string.gsub(str, "<"..cur_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", " ")
+      str = string.gsub(str, "</"..ekd_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", "")
+      str = string.gsub(str, "<"..ekd_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", " ")
       return str
    else
    end
@@ -12077,7 +12317,7 @@
 local curcol_curabspg = {}
 
 function ekdosis.testapparatus()
-   if isfound(curcol_curabspg, curcol.."-"..cur_abs_pg)
+   if isfound(curcol_curabspg, curcol.."-"..ekd_abs_pg)
    then
       if newalignment
       then
@@ -12090,7 +12330,7 @@
 	 return "\\boolfalse{do at app}"
       end
    else
-      table.insert(curcol_curabspg, curcol.."-"..cur_abs_pg)
+      table.insert(curcol_curabspg, curcol.."-"..ekd_abs_pg)
       if next(apparatuses) ~= nil then
 	 reset_bagunits()
       end

Modified: trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua	2021-11-21 21:13:03 UTC (rev 61112)
+++ trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua	2021-11-21 21:13:16 UTC (rev 61113)
@@ -56,7 +56,7 @@
 local inopeningnote = lpeg.Cs{ "<note" * ((1 - (lpeg.P"<" + lpeg.P">")) + lpeg.V(1))^0 * ">" }
 local lnbrk = lpeg.Cs("\\\\")
 local poemline = lpeg.Cs(lnbrk * spcenc^-1 * lpeg.S("*!")^-1 * bsqbrackets^-1 * spcenc^-1)
-local poemlinebreak = lpeg.Cs(lnbrk * spcenc^-1 * lpeg.P(">") * bsqbrackets^-1 * spcenc^-1)
+local poemlinebreak = lpeg.Cs(lnbrk * spcenc^-1 * (lpeg.P(">") + lpeg.P("+")) * bsqbrackets^-1 * spcenc^-1)
 local linegroup = lpeg.Cs{ "<lg" * ((1 - lpeg.S"<>") + lpeg.V(1))^0 * ">" }
 local bclinegroup = lpeg.Cs(linegroup + lpeg.P("</lg>"))
 local endpoem = lpeg.Cs(lnbrk * lpeg.S("*!") * bsqbrackets^-1) -- not used
@@ -356,6 +356,18 @@
    return true
 end
 
+local familysep = nil
+
+function ekdosis.setfamilysep(str)
+   if str == "reset"
+   then
+      familysep = nil
+   else
+      familysep = str
+   end
+   return true
+end
+
 function ekdosis.getsiglum(str, opt)
    str = str..","
    str = string.gsub(str, "%s-(%,)", "%1")
@@ -379,6 +391,10 @@
 	 str  = string.gsub(str, tempc.."%,", idsRend[i].abbr)
 	 ctrl = string.gsub(ctrl, tempc.."%,", "")
       end
+      if familysep ~= nil
+      then
+	 str = string.gsub(str, "%s+", familysep)
+      end
    end
    -- if string.find(ctrl, "[A-Za-z0-9]")
    if string.find(ctrl, "%S")
@@ -418,6 +434,10 @@
 local texpatttotags = {
    {a="\\addentries%s+%[(.-)%]{(.-)}", b=""},
    {a="\\addentries%s+{(.-)}", b=""},
+   {a="\\vmodulolinenumbers%s+%[(.-)%]", b=""},
+   {a="\\vmodulolinenumbers%s+", b=""},
+   {a="\\modulolinenumbers%s+%[(.-)%]", b=""},
+   {a="\\modulolinenumbers%s+", b=""},
    {a="\\setverselinenums%s+{(.-)}{(.-)}", b=""},
    {a="\\resetvlinenumber%s+%[(.-)%]", b=""},
    {a="\\resetvlinenumber%s+", b=""},
@@ -759,6 +779,9 @@
    end)
    str = string.gsub(str, "\\begin%s?%{ekdverse%}(.-)\\end%s?%{ekdverse%}", function(arg)
 			arg = string.gsub(arg, "\\par%s?", "")
+			arg = string.gsub(arg, "\\begin%s?%{patverse%*?%}", "")
+			arg = string.gsub(arg, "\\end%s?%{patverse%*?%}", "")
+			arg = string.gsub(arg, "\\indentpattern%s?%b{}", "")
 			return "\\p at rb "..linestotei(string.format("<lg>%s</lg>", arg)).."\\p at ra "
    end)
    str = string.gsub(str, "\\begin%s?%{verse%}%b[](.-)\\end%s?%{verse%}", function(arg)
@@ -1675,6 +1698,7 @@
 end
 
 local cur_abs_pg = 0
+local ekd_abs_pg = 0
 local pg_i = nil
 local pg_ii = nil
 local prevcol = nil
@@ -1688,6 +1712,12 @@
 end
 
 function ekdosis.storeabspg(n, pg)
+   if tonumber(n) > tonumber(cur_abs_pg)
+   then
+      ekd_abs_pg = ekd_abs_pg + 1
+   end
+   cur_abs_pg = n
+   n = ekd_abs_pg
    if pg == "pg_i" then
       pg_i = n
    elseif pg == "pg_ii" then
@@ -1694,10 +1724,13 @@
       pg_ii = n
       table.insert(check_resetlineno, curcol.."-"..pg_ii)
    end
-   cur_abs_pg = n
    return true
 end
 
+function ekdosis.getekdabspg()
+   return ekd_abs_pg
+end
+
 function ekdosis.checkresetlineno()
    if isfound(check_resetlineno, curcol.."-"..pg_i)
    then
@@ -1935,6 +1968,7 @@
 			      apprule,
 			      appdelim,
 			      appsep,
+			      appsubsep,
 			      appbhook,
 			      appehook,
 			      applimit,
@@ -1951,6 +1985,7 @@
 				 rule = apprule,
 				 delim = appdelim,
 				 sep = appsep,
+				 subsep = appsubsep,
 				 bhook = appbhook,
 				 ehook = appehook,
 				 limit = applimit,
@@ -2051,8 +2086,8 @@
    local f = io.open(tex.jobname.."_tmp.ekd", "a+")
    if next(apparatuses) == nil
    then
-      f:write("<", cur_abs_pg, cur_alignment, curcol, "-0>", str, "</",
-	      cur_abs_pg, cur_alignment, curcol, "-0>\n")
+      f:write("<", ekd_abs_pg, cur_alignment, curcol, "-0>", str, "</",
+	      ekd_abs_pg, cur_alignment, curcol, "-0>\n")
    else
       for i = 1,#apparatuses
       do
@@ -2061,8 +2096,8 @@
 	    break
 	 end
       end
-      f:write("<", cur_abs_pg, cur_alignment, curcol, "-",
-	      appno, ">", str, "</", cur_abs_pg, cur_alignment, curcol, "-", appno, ">\n")
+      f:write("<", ekd_abs_pg, cur_alignment, curcol, "-",
+	      appno, ">", str, "</", ekd_abs_pg, cur_alignment, curcol, "-", appno, ">\n")
    end
    f:close()
    return true
@@ -2080,10 +2115,10 @@
 	 table.insert(output, "\\csname ekd at begin@apparatus\\endcsname\\ignorespaces")
 --	 table.insert(output, "\\noindent ")
 	 for i in string.gmatch(t,
-				"<"..cur_abs_pg
+				"<"..ekd_abs_pg
 				   ..cur_alignment_patt
 				   ..curcol.."%-0>.-</"
-				   ..cur_abs_pg
+				   ..ekd_abs_pg
 				   ..cur_alignment_patt
 				   ..curcol.."%-0>")
 	 do
@@ -2095,10 +2130,10 @@
 	 local n = 1
 	 while apparatuses[n]
 	 do
-	    if string.match(t, "<"..cur_abs_pg
+	    if string.match(t, "<"..ekd_abs_pg
 			       ..cur_alignment_patt
 			       ..curcol.."%-"..n..">.-</"
-			       ..cur_abs_pg
+			       ..ekd_abs_pg
 			       ..cur_alignment_patt
 			       ..curcol.."%-"..n..">")
 	    then
@@ -2155,6 +2190,10 @@
 		  table.insert(output, "\\edef\\ekdsep{" .. apparatuses[n].sep .. "}")
 	       else
 	       end
+	       if apparatuses[n].subsep ~= ""
+	       then
+		  table.insert(output, "\\edef\\ekdsubsep{" .. apparatuses[n].subsep .. "}")
+	       end
 	       if apparatuses[n].bhook ~= ""
 	       then
 		  table.insert(output, apparatuses[n].bhook)
@@ -2162,10 +2201,10 @@
 		  table.insert(output, "\\relax")
 	       end
 	       for i in string.gmatch(t,
-				      "<"..cur_abs_pg
+				      "<"..ekd_abs_pg
 					 ..cur_alignment_patt
 					 ..curcol.."%-"..n..">.-</"
-					 ..cur_abs_pg
+					 ..ekd_abs_pg
 					 ..cur_alignment_patt
 					 ..curcol.."%-"..n..">")
 	       do
@@ -2185,8 +2224,8 @@
       end
       f:close()
       str = table.concat(output)
-      str = string.gsub(str, "</"..cur_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", "")
-      str = string.gsub(str, "<"..cur_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", " ")
+      str = string.gsub(str, "</"..ekd_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", "")
+      str = string.gsub(str, "<"..ekd_abs_pg..cur_alignment_patt..curcol.."%-[0-9]>", " ")
       return str
    else
    end
@@ -2206,7 +2245,7 @@
 local curcol_curabspg = {}
 
 function ekdosis.testapparatus()
-   if isfound(curcol_curabspg, curcol.."-"..cur_abs_pg)
+   if isfound(curcol_curabspg, curcol.."-"..ekd_abs_pg)
    then
       if newalignment
       then
@@ -2219,7 +2258,7 @@
 	 return "\\boolfalse{do at app}"
       end
    else
-      table.insert(curcol_curabspg, curcol.."-"..cur_abs_pg)
+      table.insert(curcol_curabspg, curcol.."-"..ekd_abs_pg)
       if next(apparatuses) ~= nil then
 	 reset_bagunits()
       end

Modified: trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty
===================================================================
--- trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty	2021-11-21 21:13:03 UTC (rev 61112)
+++ trunk/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty	2021-11-21 21:13:16 UTC (rev 61113)
@@ -41,7 +41,7 @@
 %% Running "make inst" installs the files in the user's TeX tree.
 \NeedsTeXFormat{LaTeX2e}[1999/12/01]
 \ProvidesPackage{ekdosis}
-    [2021/08/18 v1.3 Typesetting TEI xml-compliant critical editions]
+    [2021/11/21 v1.4 Typesetting TEI xml-compliant critical editions]
 \RequirePackage{iftex}
 \RequireLuaTeX
 \RequirePackage{expkv-opt}
@@ -49,7 +49,7 @@
 \newif\if at pkg@float
 \newif\if at pkg@footins
 \newif\if at pkg@keyfloat
-\newif\if at pkg@fitfloat
+\newif\if at pkg@fitapp
 \newif\if at pkg@ekddivs
 \newif\if at parnotesroman
 \newif\if at pkg@parnotes
@@ -59,7 +59,7 @@
   choice layout = {float = {\@pkg at floattrue},
     footins = {\@pkg at floatfalse\@pkg at footinstrue},
     keyfloat = {\@pkg at floatfalse\@pkg at keyfloattrue},
-    fitfloat = {\@pkg at floatfalse\@pkg at fitfloattrue}},
+    fitapp = {\@pkg at floatfalse\@pkg at fitapptrue}},
   initial layout = float,
   unknown-choice layout = \PackageError{ekdosis}{unknown
     layout=#1}{`layout' must be either `float' or `footins'.},
@@ -110,7 +110,7 @@
       \keyparbox[!b]{#1}{\ekd at insert@apparatus}}}
   \ekd at keyparopts{}
 \fi
-\if at pkg@fitfloat
+\if at pkg@fitapp
   \RequirePackage{tcolorbox}
   \tcbuselibrary{fitting,skins}
 \fi
@@ -143,6 +143,7 @@
   store appfontsize = \ekd at appfontsize,
   store refnumstyle = \ekd at refnumstyle,
   store postrefnum = \ekd at postrefnum,
+  code familysep = \luadirect{ekdosis.setfamilysep(\luastringN{#1})},
   store lemmastyle = \ekd at lemmastyle,
   store readingstyle = \ekd at readingstyle,
   code keyparopts = \if at pkg@keyfloat\ekd at keyparopts{#1}\fi,
@@ -293,6 +294,7 @@
   nmeta norule = {rule=none},
   code delim = \def\delim at val{\unexpanded{#1}},
   store sep = \sep at val,
+  store subsep = \subsep at val,
   store bhook = \bhook at val,
   store ehook = \ehook at val,
   store maxentries = \limit at val,
@@ -314,6 +316,7 @@
     \luastringO{\rule at val},
     \luastringO{\delim at val},
     \luastringO{\sep at val},
+    \luastringO{\subsep at val},
     \luastringO{\bhook at val},
     \luastringO{\ehook at val},
     \luastringO{\limit at val},
@@ -402,6 +405,7 @@
     \hb at xt@0em{\hss\@makefnmark}#1}
 \newif\ifrtl at app
 \edef\ekdsep{] }
+\edef\ekdsubsep{}
 \ekvdefinekeys{default at app}{
   choice direction = {LR = \rtl at appfalse,
     RL = \rtl at apptrue},
@@ -408,6 +412,7 @@
   unknown-choice direction = \PackageError{ekdosis}{unknown
     direction=#1}{`direction' must be either `LR' or `RL'.},
   code sep = \edef\ekdsep{#1},
+  code subsep = \edef\ekdsubsep{#1},
   store bhook = \ekd at begin@apparatus,
   initial bhook = {},
   store ehook = \ekd at end@apparatus,
@@ -430,6 +435,7 @@
 \NewDocumentCommand{\SetRTLapp}{}{\rtl at apptrue}
 \NewDocumentCommand{\SetLTRapp}{}{\rtl at appfalse}
 \NewDocumentCommand{\SetSeparator}{m}{\edef\ekdsep{#1}}
+\NewDocumentCommand{\SetSubseparator}{m}{\edef\ekdsubsep{#1}}
 \NewDocumentCommand{\SetBeginApparatus}{m}{\edef\ekd at begin@apparatus{#1}}
 \NewDocumentCommand{\SetEndApparatus}{m}{\edef\ekd at end@apparatus{#1}}
 \NewDocumentCommand{\SetUnitDelimiter}{m}{\def\ekd at unit@delim{#1}}
@@ -469,7 +475,8 @@
 \newif\ifsubsq at unit
 \subsq at unittrue
 \newif\ifekd at inside@app
-\if at pkg@fitfloat
+\newif\ifekd at keepinapp
+\if at pkg@fitapp
   \newtcboxfit{\ekd at fitapp}{%
     blankest,
     fit basedim = \f at size pt,
@@ -532,7 +539,7 @@
   \if at pkg@keyfloat
     \ekd at insert@keyparapp
   \fi
-  \if at pkg@fitfloat
+  \if at pkg@fitapp
     \ekd at fitapp{\ekd at insert@apparatus}%
   \fi
 }
@@ -599,6 +606,7 @@
                  \else\if at pkg@poetry at verse\poemlines{#1}\fi\fi,
   initial vmodulo = 1,
   default vmodulo = 5,
+  bool vnumbrokenlines = \ifnum at brokenline,
   bool continuousvnum = \if at continuous@vnum,
   choice numbers = {elided = \ekd at elidednumberstrue,
     full = \ekd at elidednumbersfalse},
@@ -621,6 +629,16 @@
 \NewDocumentCommand{\SetLineation}{m}{
   \ekvset{ekd at lineation}{#1}
 }
+\NewDocumentCommand{\vmodulolinenumbers}{O{5}}{%
+  \ifekd at memoir@loaded
+    \linenumberfrequency{#1}%
+  \else
+    \if at pkg@poetry at verse
+      \poemlines{#1}%
+    \fi
+  \fi
+  \ignorespaces
+}
 \renewcommand\linenumberfont{\normalfont\footnotesize}
 \ekvdefinekeys{appnote}{
    store type = \ekdan at type,
@@ -643,6 +661,9 @@
   \ekd at isinappfalse
   \ekd at appinappfalse
   \endgroup}
+\NewDocumentCommand{\ekdpage}{}{%
+  \luadirect{tex.sprint(ekdosis.getekdabspg())}%
+}
 \def\current at ref@arg#1#2{{%\textdir TLT%
     \unexpanded\expandafter{\ekd at refnumstyle}%
     \ifnum%
@@ -853,6 +874,9 @@
   code post = \def\ekdlr at post{#1},
   code prewit = \def\ekdlr at prewit{#1},
   code postwit = \def\ekdlr at postwit{#1},
+  store subsep = \ekdr at subsep,
+  initial subsep = \ekdsubsep,
+  bool nosubsep = \ifekdr at nosubsep,
   store type = \ekdlr at type,
   bool nordg = \ifekdr at nordg
 }
@@ -990,6 +1014,7 @@
   \ekd at isinlemfalse%
   \subsq at unittrue%
 }
+\newif\ifekd at subsq@rdg
 \NewDocumentCommand{\rdg}{O{} m}{%
   \bgroup%
   \ekvset{rdg}{#1}%
@@ -1006,6 +1031,9 @@
   \else%
   \ifbool{al at rlmode}{%
     \edef\rdg at app{%
+      \ifekd at subsq@rdg
+        \unless\ifekdr at nosubsep\unexpanded\expandafter{\ekdr at subsep}\fi
+      \fi
       \ifdefined\ekdlr at alt%
         \ifdefined\ekdlr at post%
           \space\unexpanded\expandafter{\ekdlr at post}\space\else\fi
@@ -1032,6 +1060,9 @@
   }%
   {%
     \edef\rdg at app{%
+      \ifekd at subsq@rdg
+        \unless\ifekdr at nosubsep\unexpanded\expandafter{\ekdr at subsep}\fi
+      \fi
       \ifdefined\ekdlr at alt%
         \ifdefined\ekdlr at pre%
           \space\unexpanded\expandafter{\ekdlr at pre}\space\else\fi
@@ -1062,13 +1093,14 @@
         \space\unexpanded\expandafter{\ekdlr at postwit}\else\fi
     }%
   }%
-  \ifekd at mapps%
+  \ifekd at mapps
       \append at app[\ekdan at type]{\rdg at app}%
-  \else%
+  \else
   \append at app{\rdg at app}%
-  \fi%
-  \fi%
-  \egroup%
+  \fi
+  \fi
+  \egroup
+  \ekd at subsq@rdgtrue
 }
 \newif\ifekdn at forcenum
 \ekvdefinekeys{note}{
@@ -1160,7 +1192,9 @@
 }
 \ekvdefinekeys{ekd at note}{
   store pre = \pre at value,
-  store post = \post at value
+  store post = \post at value,
+  nmeta sep = {post=\ekdsep},
+  nmeta subsep = {pre=\ekdsubsep}
 }
 \NewDocumentCommand{\ekd at note}{O{} m}{%
   \bgroup%
@@ -1237,29 +1271,44 @@
   initial delend = \ifbool{al at rlmode}{\{}{\}},
   initial sicbegin = \dag,
   initial sicend = \dag,
-  initial gapmark = ***
+  initial gapmark = ***,
+  bool keepinapp = \ifekd at keepinapp
 }
 \NewDocumentCommand{\supplied}{m}{%
   \ifekd at inside@app
-  #1%
+    \ifekd at keepinapp
+      \suppb at value #1\suppe at value
+    \else
+      #1%
+    \fi
   \else
-  \suppb at value #1\suppe at value
+    \suppb at value #1\suppe at value
   \fi
 }
 \NewDocumentCommand{\surplus}{m}{%
   \ifekd at inside@app
-  #1%
+    \ifekd at keepinapp
+      \delb at value #1\dele at value
+    \else
+      #1%
+    \fi
   \else
-  \delb at value #1\dele at value
+    \delb at value #1\dele at value
   \fi
 }
 \NewDocumentCommand{\sic}{s m}{%
   \ifekd at inside@app
-  #2%
+    \ifekd at keepinapp
+      \IfBooleanTF{#1}
+        {\sicb at value #2}
+        {\sicb at value #2\sice at value}%
+    \else
+      #2%
+    \fi
   \else
-  \IfBooleanTF{#1}
-    {\sicb at value #2}
-    {\sicb at value #2\sice at value}%
+    \IfBooleanTF{#1}
+      {\sicb at value #2}
+      {\sicb at value #2\sice at value}%
   \fi
 }
 \NewDocumentCommand{\gap}{m}{%
@@ -1502,6 +1551,25 @@
   \global\ekd at test@vpnumtrue
   \fi
 }
+\ifboolexpr{bool {@pkg at poetry@verse} or bool {ekd at memoir@loaded}}
+ {\newcommand{\@vsifplus}[1]{\@ifnextchar +{\@firstoftwo{#1}}}
+   \renewcommand{\@vscentercr}{%
+     \ifhmode \unskip\else \@nolnerr\fi
+     \@vsifgt{\ifnum at brokenline\@vstypelinenum\fi\verselinebreak}{%
+       \@vsifplus{\ifnum at brokenline\@vstypelinenum\fi\stepcounter{vslineno}%
+         \par\@ifstar{\nobreak\@vsxcentercr}{%
+           \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
+         }%
+       }{%
+         \@vstypelinenum
+         \incr at vsline%
+         \par\@ifstar{\nobreak\@vsxcentercr}{%
+           \@vsifbang{\@ifnextchar[ {\@vsicentercr}{}}{\@vsxcentercr}%
+         }%
+       }%
+     }%
+   }
+ }{}
 \if at pkg@poetry at verse
 \patchcmd{\start at vsline}{%
   \ifaltindent}{%
@@ -1513,7 +1581,8 @@
   code type = \def\type at value{#1},
 }
 \ifekd at memoir@loaded
-  \linenumberfont{\normalfont\footnotesize}
+  \def\vlvnumfont{\normalfont\footnotesize}
+  \def\verselinenumfont#1{\def\vlvnumfont{#1}}
 \else
   \verselinenumfont{\normalfont\footnotesize}
 \fi



More information about the tex-live-commits mailing list.