aboutsummaryrefslogtreecommitdiff
path: root/ekdosis.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'ekdosis.dtx')
-rw-r--r--ekdosis.dtx134
1 files changed, 104 insertions, 30 deletions
diff --git a/ekdosis.dtx b/ekdosis.dtx
index 1b794b6..e285197 100644
--- a/ekdosis.dtx
+++ b/ekdosis.dtx
@@ -61,7 +61,7 @@ along with this program. If not, see
61%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] 61%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
62%<package>\ProvidesPackage{ekdosis} 62%<package>\ProvidesPackage{ekdosis}
63%<*package> 63%<*package>
64 [2022/05/04 v1.5-dev Typesetting TEI xml-compliant critical editions] 64 [2022/05/09 v1.5-dev Typesetting TEI xml-compliant critical editions]
65%</package> 65%</package>
66%<*driver> 66%<*driver>
67\begin{filecontents}[noheader,overwrite]{bibdata.xml} 67\begin{filecontents}[noheader,overwrite]{bibdata.xml}
@@ -638,7 +638,7 @@ along with this program. If not, see
638\babeltags{ancientgreek = greek} 638\babeltags{ancientgreek = greek}
639\def\sg#1{\textancientgreek{#1}} 639\def\sg#1{\textancientgreek{#1}}
640\usepackage[biblatex=true]{embrac} 640\usepackage[biblatex=true]{embrac}
641\usepackage[nospace,american]{varioref} 641\usepackage[nospace,american,draft]{varioref}
642\usepackage{addlines} 642\usepackage{addlines}
643\newcommand\phts{\phantomsection} 643\newcommand\phts{\phantomsection}
644\usepackage{chifoot} 644\usepackage{chifoot}
@@ -1327,8 +1327,9 @@ along with this program. If not, see
1327% characters is reduced to allow for additional entries. As a 1327% characters is reduced to allow for additional entries. As a
1328% consequence of this rationale, the total number of entries on a 1328% consequence of this rationale, the total number of entries on a
1329% given page must not be too high. It is therefore advisable to use 1329% given page must not be too high. It is therefore advisable to use
1330% |layout=fitapp| conjointly with |maxentries| as described below 1330% |layout=fitapp| conjointly with |maxentries| as described below on
1331% \vpageref{ref:maxentries} and in \vref{sec:oscillating-problem}. % 1331% pages~\pageref{ref:glimit} and~\pageref{ref:maxentries} and in
1332% \vref{sec:oscillating-problem}.
1332% \danger If used appropriately, this mechanism gives excellent 1333% \danger If used appropriately, this mechanism gives excellent
1333% typographical results, notably with complex edition texts of which 1334% typographical results, notably with complex edition texts of which
1334% the entries in the associated apparatus can be quite abundant in 1335% the entries in the associated apparatus can be quite abundant in
@@ -3647,6 +3648,29 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
3647% An example of the way these hooks may be used is provided below in 3648% An example of the way these hooks may be used is provided below in
3648% \vref{lst:shak-sonnet1}. 3649% \vref{lst:shak-sonnet1}.
3649% 3650%
3651% \medskip\noindent\textbf{Limiting the Number of Entries per Page}
3652% \phts\label{ref:glimit}\\
3653% \DescribeOption{maxentries} |maxentries|=\meta{n} (where
3654% $n \geq 10$) \hfill\tcboxverb{Default: not set}\\
3655% \newfeature[v1.5] This option may be used to set a limit to the
3656% number of entries per page that \emph{all layers of critical notes
3657% taken together} may accept, notably when entries are so abundant in
3658% number that \pkg{ekdosis} may oscillate indefinitely between
3659% different sets of page decisions without being able to settle down.
3660% \danger It is also possible to restrict this option to a given layer
3661% of the apparatus criticus as described below
3662% \vpageref{ref:maxentries}. If |maxentries| be set both globally in
3663% \cs{SetHooks} and in \cs{DeclareApparatus} for specific layers, then
3664% the page will break when \emph{any} of the values defined as
3665% |maxentries| has been reached.
3666%
3667% If |maxentries|$=$\meta{n} be set, then \pkg{ekdosis} will issue
3668% \cs{pagebreak} (namely \cs{penalty}|-10000|) just after the
3669% \emph{n\textsuperscript{th}} entry has been inserted in whichever
3670% layer of the apparatus criticus. As a result, the page will actually
3671% break at the end of the current line. The particulars of this
3672% technique will be discussed below in \vref{sec:oscillating-problem}.
3673%
3650% \medskip 3674% \medskip
3651% \noindent\textbf{Option Specific to the |layout=keyfloat| Global 3675% \noindent\textbf{Option Specific to the |layout=keyfloat| Global
3652% Setting}\footnote{See above \vref{ref:keyfloat-opt}.}\\ 3676% Setting}\footnote{See above \vref{ref:keyfloat-opt}.}\\
@@ -3991,14 +4015,24 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
3991% may oscillate indefinitely between different sets of page decisions 4015% may oscillate indefinitely between different sets of page decisions
3992% without being able to settle down.\\ 4016% without being able to settle down.\\
3993% \DescribeOption{maxentries} |maxentries|=\meta{n} (where $n \geq 4017% \DescribeOption{maxentries} |maxentries|=\meta{n} (where $n \geq
3994% 10$) \hfill\tcboxverb{Default: not set}\\ 4018% 10$) \hfill\tcboxverb{Default: not set}
4019% \danger It is also possible to set a maximum number of entries for
4020% all layers of critical notes taken together as described above
4021% \vpageref{ref:glimit}. If |maxentries| be set both globally in
4022% \cs{SetHooks} and in \cs{DeclareApparatus} for specific layers, then
4023% the page will break when \emph{any} of the values defined as
4024% |maxentries| has been reached.
4025%
3995% If |maxentries|$=$\meta{n} be set, then \pkg{ekdosis} will issue 4026% If |maxentries|$=$\meta{n} be set, then \pkg{ekdosis} will issue
3996% \cs{pagebreak} (namely \cs{penalty}|-10000|) just after the 4027% \cs{pagebreak} (namely \cs{penalty}|-10000|) just after the
3997% \emph{n\textsuperscript{th}} entry has been inserted in the layer of 4028% \emph{n\textsuperscript{th}} entry has been inserted in the layer of
3998% the apparatus criticus this option is related to. As a result, the 4029% the apparatus criticus this option is related to. As a result, the
3999% page will actually break at the end of the current line. The 4030% page will actually break at the end of the current line. The
4000% particulars of this technique will be discussed below in 4031% particulars of this technique will be discussed below in
4001% \vref{sec:oscillating-problem}. 4032% \vref{sec:oscillating-problem}.\\
4033% \DescribeOption{nomaxentries}\hfill\tcboxverb{Default: not set}\\
4034% |nomaxentries| does not accept any value and is equivalent to
4035% |maxentries=none|.\\
4002% 4036%
4003% \section{Inserting Notes in Multiple-Layer Apparatus} 4037% \section{Inserting Notes in Multiple-Layer Apparatus}
4004% \label{sec:notes-in-multilayer-app} 4038% \label{sec:notes-in-multilayer-app}
@@ -6145,11 +6179,13 @@ subtype="arabtex">'inna 'abI kAna mina
6145% 6179%
6146% \paragraph{Using \texttt{maxentries}} 6180% \paragraph{Using \texttt{maxentries}}
6147% Another way\---should the edition text fall into the vicious circle 6181% Another way\---should the edition text fall into the vicious circle
6148% too often\---is to limit the number of entries per page that a given 6182% too often\---is to limit the number of entries per page that all
6149% layer of apparatus criticus may accept as described above 6183% layers of critical notes taken together or a given layer of
6150% \vpageref{ref:maxentries}. As a result, \pkg{ekdosis} will take care 6184% apparatus criticus may accept as described above on
6151% of inserting automatic breakpoints between pages whenever the number 6185% pages~\pageref{ref:glimit} and~\pageref{ref:maxentries}. As a result,
6152% of entries on a given page reaches the value set as |maxentries|. 6186% \pkg{ekdosis} will take care of inserting automatic breakpoints
6187% between pages whenever the number of entries on a given page reaches
6188% the value set as |maxentries|.
6153% 6189%
6154% |maxentries| must not be too small: otherwise offensive to look at 6190% |maxentries| must not be too small: otherwise offensive to look at
6155% vertical spaces may come between the edition text and the apparatus 6191% vertical spaces may come between the edition text and the apparatus
@@ -8200,7 +8236,7 @@ Sample text with a \textcolor{red}{word} in red.
8200\fi 8236\fi
8201\if@pkg@fitapp 8237\if@pkg@fitapp
8202 \RequirePackage{tcolorbox} 8238 \RequirePackage{tcolorbox}
8203 \tcbuselibrary{fitting,skins} 8239 \tcbuselibrary{fitting,skins} %,breakable}
8204\fi 8240\fi
8205\RequirePackage{refcount} 8241\RequirePackage{refcount}
8206\RequirePackage{zref-user} 8242\RequirePackage{zref-user}
@@ -8226,7 +8262,7 @@ Sample text with a \textcolor{red}{word} in red.
8226% \end{macrocode} 8262% \end{macrocode}
8227% \paragraph{\textsf{ekdosis} Symbol} 8263% \paragraph{\textsf{ekdosis} Symbol}
8228% \begin{macro}{\eKd} 8264% \begin{macro}{\eKd}
8229% \changes{v1.5}{2022/05/04}{Prints \textsf{ekdosis} indentifying 8265% \changes{v1.5}{2022/05/09}{Prints \textsf{ekdosis} indentifying
8230% symbol} As of v1.5, \pkg{ekdosis} has its own identifying 8266% symbol} As of v1.5, \pkg{ekdosis} has its own identifying
8231% symbol. It is produced by \cs{eKd} and best printed with the Old 8267% symbol. It is produced by \cs{eKd} and best printed with the Old
8232% Standard Greek font. 8268% Standard Greek font.
@@ -8272,6 +8308,11 @@ Sample text with a \textcolor{red}{word} in red.
8272 code familysep = \luadirect{ekdosis.setfamilysep(\luastringN{#1})}, 8308 code familysep = \luadirect{ekdosis.setfamilysep(\luastringN{#1})},
8273 store lemmastyle = \ekd@lemmastyle, 8309 store lemmastyle = \ekd@lemmastyle,
8274 store readingstyle = \ekd@readingstyle, 8310 store readingstyle = \ekd@readingstyle,
8311 code initialrule = \def\ekd@initial@rule{#1\NLS},
8312 default initialrule = \rule{0.4\columnwidth}{0.4pt},
8313 noval noinitialrule = \undef\ekd@initial@rule,
8314 code maxentries = \luadirect{ekdosis.setglimit(\luastringN{#1})},
8315 nmeta nomaxentries = {maxentries=none},
8275 code keyparopts = \if@pkg@keyfloat\ekd@keyparopts{#1}\fi, 8316 code keyparopts = \if@pkg@keyfloat\ekd@keyparopts{#1}\fi,
8276 dimen appheight = \ekd@app@height, 8317 dimen appheight = \ekd@app@height,
8277 initial appheight = .5\textheight, 8318 initial appheight = .5\textheight,
@@ -8283,9 +8324,6 @@ Sample text with a \textcolor{red}{word} in red.
8283 unknown-choice fitalgorithm = \PackageError{ekdosis}{unknown 8324 unknown-choice fitalgorithm = \PackageError{ekdosis}{unknown
8284 fitalgorithm=#1}{`fitalgorithm' must be either `fontsize', 8325 fitalgorithm=#1}{`fitalgorithm' must be either `fontsize',
8285 `hybrid', `areasize' or `squeeze'.}, 8326 `hybrid', `areasize' or `squeeze'.},
8286 code initialrule = \def\ekd@initial@rule{#1\NLS},
8287 default initialrule = \rule{0.4\columnwidth}{0.4pt},
8288 noval noinitialrule = \undef\ekd@initial@rule,
8289 initial appfontsize = \footnotesize, 8327 initial appfontsize = \footnotesize,
8290 initial refnumstyle = \bfseries, 8328 initial refnumstyle = \bfseries,
8291 initial postrefnum = ~, 8329 initial postrefnum = ~,
@@ -8487,7 +8525,7 @@ Sample text with a \textcolor{red}{word} in red.
8487% \begin{macro}{\teidirectE} 8525% \begin{macro}{\teidirectE}
8488% \changes{v1.3}{2021/08/18}{direct insertion of elements in the 8526% \changes{v1.3}{2021/08/18}{direct insertion of elements in the
8489% \texttt{TEI xml} file} 8527% \texttt{TEI xml} file}
8490% \changes{v1.5}{2022/05/04}{direct insertion of empty elements in the 8528% \changes{v1.5}{2022/05/09}{direct insertion of empty elements in the
8491% \texttt{TEI xml} file} 8529% \texttt{TEI xml} file}
8492% \cs{teidirect}\oarg{xml attributes}\marg{xml element}\marg{code} 8530% \cs{teidirect}\oarg{xml attributes}\marg{xml element}\marg{code}
8493% does nothing in \LaTeX. It is only used to insert elements in the 8531% does nothing in \LaTeX. It is only used to insert elements in the
@@ -8502,7 +8540,7 @@ Sample text with a \textcolor{red}{word} in red.
8502% \end{macro} 8540% \end{macro}
8503% \end{macro} 8541% \end{macro}
8504% \begin{macro}{\getTEIxmlid} 8542% \begin{macro}{\getTEIxmlid}
8505% \changes{v1.5}{2022/05/04}{returns \texttt{TEI xml:ids} from a 8543% \changes{v1.5}{2022/05/09}{returns \texttt{TEI xml:ids} from a
8506% csv-list of ids} This command returns from a csv-list of unique 8544% csv-list of ids} This command returns from a csv-list of unique
8507% identifiers declared in commands such as \cs{DeclareWitness} and the 8545% identifiers declared in commands such as \cs{DeclareWitness} and the
8508% like a space-separated list of their corresponding |xml:id|s, each 8546% like a space-separated list of their corresponding |xml:id|s, each
@@ -8975,6 +9013,7 @@ Sample text with a \textcolor{red}{word} in red.
8975\if@pkg@fitapp 9013\if@pkg@fitapp
8976 \newtcboxfit{\ekd@fitapp}{% 9014 \newtcboxfit{\ekd@fitapp}{%
8977 blankest, 9015 blankest,
9016 % breakable,
8978 fit basedim = \f@size pt, 9017 fit basedim = \f@size pt,
8979 fit fontsize macros, 9018 fit fontsize macros,
8980 fit height from=0pt to \ekd@app@height, 9019 fit height from=0pt to \ekd@app@height,
@@ -10078,7 +10117,7 @@ Sample text with a \textcolor{red}{word} in red.
10078% \end{macro} 10117% \end{macro}
10079% \paragraph{Lacunae} 10118% \paragraph{Lacunae}
10080% \begin{macro}{\ilabel} 10119% \begin{macro}{\ilabel}
10081% \changes{v1.5}{2022/05/04}{recalls and sets the ending label of 10120% \changes{v1.5}{2022/05/09}{recalls and sets the ending label of
10082% lemmas used to mark lacunae in witnesses} When \cs{lem} has been 10121% lemmas used to mark lacunae in witnesses} When \cs{lem} has been
10083% used with the optional argument |ilabel=<label>|, 10122% used with the optional argument |ilabel=<label>|,
10084% \cs{ilabel}\marg{label} must be used to mark the point where the 10123% \cs{ilabel}\marg{label} must be used to mark the point where the
@@ -10393,7 +10432,7 @@ Sample text with a \textcolor{red}{word} in red.
10393% \end{macrocode} 10432% \end{macrocode}
10394% \end{macro} 10433% \end{macro}
10395% \begin{macro}{\ekdEOprint} 10434% \begin{macro}{\ekdEOprint}
10396% \changes{v1.5}{2022/05/04}{Sets headers and footers on 10435% \changes{v1.5}{2022/05/09}{Sets headers and footers on
10397% \enquote{paired} facing pages} 10436% \enquote{paired} facing pages}
10398% To set headers and footers on \enquote{paired} facing pages, 10437% To set headers and footers on \enquote{paired} facing pages,
10399% \cs{ekdEOprint} accepts two mandatory, self-evident arguments, like 10438% \cs{ekdEOprint} accepts two mandatory, self-evident arguments, like
@@ -10433,7 +10472,7 @@ Sample text with a \textcolor{red}{word} in red.
10433% counter to set the value of the page numbers. This counter should be 10472% counter to set the value of the page numbers. This counter should be
10434% incremented every two pages. 10473% incremented every two pages.
10435% \begin{counter}{pairedpage} 10474% \begin{counter}{pairedpage}
10436% \changes{v1.5}{2022/05/04}{A counter incremented every two pages} 10475% \changes{v1.5}{2022/05/09}{A counter incremented every two pages}
10437% |pairedpage| is first set as a global counter:--- 10476% |pairedpage| is first set as a global counter:---
10438% \begin{macrocode} 10477% \begin{macrocode}
10439\newcounter{pairedpage} 10478\newcounter{pairedpage}
@@ -10441,19 +10480,19 @@ Sample text with a \textcolor{red}{word} in red.
10441% \end{macrocode} 10480% \end{macrocode}
10442% \end{counter} 10481% \end{counter}
10443% \begin{macro}{\setpairedpagenum} 10482% \begin{macro}{\setpairedpagenum}
10444% \changes{v1.5}{2022/05/04}{sets the same page number on paired 10483% \changes{v1.5}{2022/05/09}{sets the same page number on paired
10445% pages} \cs{setpairedpagenum}\marg{number} is used just ahead of 10484% pages} \cs{setpairedpagenum}\marg{number} is used just ahead of
10446% the alignment environment to set the number of the first left-hand 10485% the alignment environment to set the number of the first left-hand
10447% paired page. 10486% paired page.
10448% \begin{macro}{\setpairedpage} 10487% \begin{macro}{\setpairedpage}
10449% \changes{v1.5}{2022/05/04}{sets the page number of the first paired 10488% \changes{v1.5}{2022/05/09}{sets the page number of the first paired
10450% page} \cs{setpairedpage} is an argument-less command meant to be 10489% page} \cs{setpairedpage} is an argument-less command meant to be
10451% issued in commands used to set headers or footers before 10490% issued in commands used to set headers or footers before
10452% \cs{thepage}. This command has the counter |pairedpage| 10491% \cs{thepage}. This command has the counter |pairedpage|
10453% incremented on right-hand pages only, and sets |page| $\leftarrow$ 10492% incremented on right-hand pages only, and sets |page| $\leftarrow$
10454% |pairedpage| on every page. 10493% |pairedpage| on every page.
10455% \begin{macro}{\resetpagenumber} 10494% \begin{macro}{\resetpagenumber}
10456% \changes{v1.5}{2022/05/04}{resets normal running page numbers} 10495% \changes{v1.5}{2022/05/09}{resets normal running page numbers}
10457% \cs{resetpagenumber} must be used right out of \enquote{mirrored} 10496% \cs{resetpagenumber} must be used right out of \enquote{mirrored}
10458% paired pages alignment environments. This argument-less command 10497% paired pages alignment environments. This argument-less command
10459% corrects any numbering error on the page following the edition 10498% corrects any numbering error on the page following the edition
@@ -12785,6 +12824,8 @@ end
12785-- 12824--
12786local apparatuses = {} 12825local apparatuses = {}
12787local bagunits = {} 12826local bagunits = {}
12827local glimit = nil
12828local gunits = 0
12788 12829
12789function ekdosis.newapparatus(teitype, 12830function ekdosis.newapparatus(teitype,
12790 appdir, 12831 appdir,
@@ -12877,28 +12918,61 @@ end
12877 12918
12878function ekdosis.limit_bagunits(teitype) 12919function ekdosis.limit_bagunits(teitype)
12879 local limit = tonumber(getapplimit(teitype)) 12920 local limit = tonumber(getapplimit(teitype))
12880 if limit >= 10 and bagunits[teitype] >= limit 12921 if glimit then
12881 then 12922 glimit = tonumber(glimit)
12882 bagunits[teitype] = 2 12923 gunits = tonumber(gunits)
12883 return "\\pagebreak" 12924 if glimit >= 10 and gunits >= glimit
12925 then
12926 bagunits[teitype] = 2
12927 gunits = 0
12928 return "\\pagebreak"
12929 else
12930 if limit >= 10 and bagunits[teitype] >= limit
12931 then
12932 bagunits[teitype] = 2
12933 gunits = 0
12934 return "\\pagebreak"
12935 else
12936 return ""
12937 end
12938 end
12884 else 12939 else
12885 return "" 12940 if limit >= 10 and bagunits[teitype] >= limit
12941 then
12942 bagunits[teitype] = 2
12943 gunits = 1
12944 return "\\pagebreak"
12945 else
12946 return ""
12947 end
12886 end 12948 end
12887end 12949end
12888 12950
12889function ekdosis.addto_bagunits(teitype, n) 12951function ekdosis.addto_bagunits(teitype, n)
12952 n = tonumber(n)
12953 if glimit then gunits = gunits - n end
12890 if tonumber(getapplimit(teitype)) ~= 0 12954 if tonumber(getapplimit(teitype)) ~= 0
12891 then 12955 then
12892 n = tonumber(n)
12893 bagunits[teitype] = bagunits[teitype] - n 12956 bagunits[teitype] = bagunits[teitype] - n
12894 end 12957 end
12895end 12958end
12896 12959
12897function ekdosis.increment_bagunits(teitype) 12960function ekdosis.increment_bagunits(teitype)
12961 if glimit then gunits = gunits + 1 end
12898 bagunits[teitype] = (bagunits[teitype] or 0) + 1 12962 bagunits[teitype] = (bagunits[teitype] or 0) + 1
12899end 12963end
12900 12964
12965function ekdosis.setglimit(n)
12966 if math.tointeger(n)
12967 then
12968 glimit = math.tointeger(math.abs(n))
12969 else
12970 glimit = nil
12971 end
12972end
12973
12901local function reset_bagunits() 12974local function reset_bagunits()
12975 if glimit then gunits = 0 end
12902 for i = 1,#apparatuses 12976 for i = 1,#apparatuses
12903 do 12977 do
12904 bagunits[apparatuses[i].a] = 1 12978 bagunits[apparatuses[i].a] = 1