summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-11-04 21:36:41 +0000
committerKarl Berry <karl@freefriends.org>2020-11-04 21:36:41 +0000
commit234af88f61d26cbe510fea4b4ad9dd5d7a2bc940 (patch)
treea87d70c9856cc164b46b7a5a58959ea8ae6d48f6 /Master
parent4fd48367b332a49ef36193de6bf329ec365573c3 (diff)
ekdosis (4nov20)
git-svn-id: svn://tug.org/texlive/trunk@56856 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/lualatex/ekdosis/README.md6
-rw-r--r--Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdfbin600804 -> 707134 bytes
-rw-r--r--Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdfbin17992 -> 17992 bytes
-rw-r--r--Master/texmf-dist/source/lualatex/ekdosis/Makefile2
-rw-r--r--Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx2183
-rw-r--r--Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua324
-rw-r--r--Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty174
7 files changed, 2230 insertions, 459 deletions
diff --git a/Master/texmf-dist/doc/lualatex/ekdosis/README.md b/Master/texmf-dist/doc/lualatex/ekdosis/README.md
index 8b54b9dc963..9d9e5d06055 100644
--- a/Master/texmf-dist/doc/lualatex/ekdosis/README.md
+++ b/Master/texmf-dist/doc/lualatex/ekdosis/README.md
@@ -12,7 +12,7 @@ critical notes in any direction accepted by LuaTeX. Texts can be
arranged in running paragraphs or on facing pages, in any number of
columns which in turn can be synchronized or not. In addition to
printed texts, `ekdosis` can convert `.tex` source files so as to
-produce `TEI xml` compliant critical editions. Database-driven
+produce `TEI xml`-compliant critical editions. Database-driven
encoding under LaTeX then allows extraction of texts entered segment
by segment according to various criteria: main edited text, variant
readings, translations or annotated borrowings between texts. It is
@@ -21,7 +21,7 @@ version 3.
License and Disclamer
=====================
-ekdosis – Typesetting TEI xml Compliant Critical Editions
+ekdosis – Typesetting TEI xml-Compliant Critical Editions
Copyright ⓒ 2020 Robert Alessi
@@ -81,7 +81,7 @@ Installation
`ekdosis.lua` files.
2. To finish the installation you have to move the `ekdosis.sty` and
- `ekdosis.lua` files into a directory where LaTeX can find it. See
+ `ekdosis.lua` files into a directory where LaTeX can find them. See
the FAQ on `texfaq.org` at <https://texfaq.org/FAQ-inst-wlcf> for
more on this.
diff --git a/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf b/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf
index a13dd5b571a..588e219534e 100644
--- a/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf
+++ b/Master/texmf-dist/doc/lualatex/ekdosis/ekdosis.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf b/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf
index 3e394efb862..4ffd23516b4 100644
--- a/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf
+++ b/Master/texmf-dist/doc/lualatex/ekdosis/samples/Caesar_BG-6-13-1.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/lualatex/ekdosis/Makefile b/Master/texmf-dist/source/lualatex/ekdosis/Makefile
index 550ae95d129..694b884d813 100644
--- a/Master/texmf-dist/source/lualatex/ekdosis/Makefile
+++ b/Master/texmf-dist/source/lualatex/ekdosis/Makefile
@@ -34,6 +34,8 @@ $(NAME).pdf: testsamples $(NAME).dtx
if [ -f $(NAME).glo ]; then makeindex -q -s gglo.ist -o $(NAME).gls $(NAME).glo; fi
if [ -f $(NAME).idx ]; then makeindex -q -s gind.ist -o $(NAME).ind $(NAME).idx; fi
$(CMP) --shell-escape --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ $(CMP) --shell-escape --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
+ $(CMP) --shell-escape --recorder --interaction=nonstopmode $(NAME).dtx > /dev/null
samples: clean sty
$(MAKE) --directory=$(SAMPLES)
diff --git a/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx b/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx
index 5eb4844caa0..10400c83965 100644
--- a/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx
+++ b/Master/texmf-dist/source/lualatex/ekdosis/ekdosis.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% ekdosis -- Typesetting TEI xml compliant critical editions
+% ekdosis -- Typesetting TEI xml-compliant critical editions
% Copyright (C) 2020 Robert Alessi
%
% Please send error reports and suggestions for improvements to Robert
@@ -27,7 +27,7 @@
--[[
This file is part of the `ekdosis' package
-ekdosis -- Typesetting TEI xml compliant critical editions
+ekdosis -- Typesetting TEI xml-compliant critical editions
Copyright (C) 2020 Robert Alessi
Please send error reports and suggestions for improvements to Robert
@@ -61,11 +61,11 @@ along with this program. If not, see
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{ekdosis}
%<*package>
- [2020/08/14 v1.0 Typesetting TEI xml compliant critical editions]
+ [2020/11/04 v1.1 Typesetting TEI xml-compliant critical editions]
%</package>
%<*driver>
\begin{filecontents}[noheader,overwrite]{bibdata.xml}
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<listBibl xmlns="http://www.tei-c.org/ns/1.0">
<biblStruct type="book" xml:id="ReynoldsWilson1991">
<monogr>
@@ -86,13 +86,31 @@ along with this program. If not, see
</imprint>
</monogr>
</biblStruct>
+ <biblStruct type="book" xml:id="sDrak">
+ <monogr>
+ <title level="m">Punicorum libri septemdecim</title>
+ <author>
+ <forename>Tiberius Catius</forename>
+ <surname>Silius Italicus</surname>
+ </author>
+ <editor>
+ <forename>Arnold</forename>
+ <surname>Drakenborch</surname>
+ </editor>
+ <edition>Trajecti ad Rhenum</edition>
+ <imprint>
+ <pubPlace>Utrecht</pubPlace>
+ <date>1717</date>
+ </imprint>
+ </monogr>
+ </biblStruct>
</listBibl>
\end{filecontents}
\begin{filecontents}[overwrite]{\jobname.bib}
@Article{Alessi2020,
author = {Alessi, Robert},
title = {ekdosis: Using Lua\LaTeX{} for Producing \texttt{TEI
- xml} Compliant Critical Editions and Highlighting
+ xml}-Compliant Critical Editions and Highlighting
Parallel Writings},
journaltitle = {Journal of Data Mining and Digital Humanities},
date = 2020,
@@ -139,6 +157,15 @@ along with this program. If not, see
location = {Oxford}
}
+@Book{West1973,
+ author = {West, Martin L.},
+ title = {Textual Criticism and Editorial Technique},
+ date = 1973,
+ titleaddon = {Applicable to Greek and Latin Texts},
+ publisher = {B. G. Teubner},
+ location = {Stuttgart}
+}
+
@Online{DLL-TC,
author = {{Digital Latin Library}},
title = {Textual Criticism},
@@ -165,6 +192,15 @@ along with this program. If not, see
url = {http://www.teibyexample.org}
}
+@Software{fnpos,
+ title = {The Fnpos package},
+ titleaddon = {Control the position of footnotes on the page},
+ author = {Nakashima, Hiroshi},
+ url = {http://www.ctan.org/pkg/fnpos},
+ date = {2018-09-03},
+ version = {1.0}
+}
+
@Software{lineno,
title = {The Lineno package},
titleaddon = {Line numbers on paragraphs},
@@ -174,6 +210,15 @@ along with this program. If not, see
version = {4.41}
}
+@Software{paracol,
+ title = {The Paracol package},
+ titleaddon = {Multiple columns with texts “in parallel”},
+ author = {Nakashima, Hiroshi},
+ url = {http://www.ctan.org/pkg/paracol},
+ date = {2018-12-31},
+ version = {1.35}
+}
+
@Software{polyglossia,
title = {The Polyglossia package},
titleaddon = {An alternative to babel for XeLaTeX and LuaLaTeX},
@@ -222,13 +267,12 @@ along with this program. If not, see
\end{filecontents}
\begin{filecontents}[overwrite]{\jobname-cfg.tex}
\footnotelayout{m}
+\EnvtoTEI{ancientgreek}{p}[xml:lang="grc"]
\DeclareApparatus{fontium}[
delim=\hskip0.75em,
- bhook=\textbf{Sources:},
- ehook=.]
+ bhook=\textbf{Sources:}]
\DeclareApparatus{default}[
- delim=\hskip0.75em,
- ehook=.]
+ delim=\hskip0.75em]
\DeclareApparatus{ltr}[
delim=\hskip0.75em]
\DeclareApparatus{rtl}[
@@ -246,6 +290,7 @@ along with this program. If not, see
% Peter and John Story:
\DeclareWitness{pjA}{A}{Manuscript A Call No 123}
\DeclareWitness{pjB}{B}{Manuscript B Call No 456}
+\DeclareWitness{pjC}{C}{Manuscript C Call No 789}
% Caesar's Gallic War:
\DeclareWitness{cA}{A}{\emph{Bongarsianus} 81}[
msName=Bongarsianus,
@@ -280,8 +325,21 @@ along with this program. If not, see
% Hippocrates Epidemics, Book 2:
\DeclareWitness{hV}{V}{\emph{Vaticanus Gr.} 276}
\DeclareWitness{hI}{I}{\emph{Parisinus Gr.} 2140}
+\DeclareHand{hIac}{hI}{I\textsuperscript{ac}}[Lectio ante correctionem]
+\DeclareHand{hIpc}{hI}{I\textsuperscript{pc}}[Lectio post correctionem]
\DeclareWitness{hR}{R}{\emph{Vaticanus Gr.} 277}
\DeclareWitness{hH}{H}{\emph{Parisinus Gr.} 2142}
+\DeclareSource{Lit}{Littré}
+\DeclareSource{Erm}{Ermerins}
+\DeclareSource{Sm}{Smith}
+\DeclareSource{Gal}{Gal.}
+\DeclareScholar{ego}{ego}[
+ forename=Robert,
+ surname=Alessi]
+\DeclareShorthand{egomute}{\unskip}{ego}
+\DeclareShorthand{hcodd}{codd.}{hV,hI,hR,hH}
+\DeclareShorthand{hedd}{edd.}{Lit,Erm,Sm}
+\DeclareShorthand{hegoscr}{\emph{scripsi}}{ego}
% Silius Italicus' Punica, IX, 30--2:
\DeclareWitness{sL}{L}{Laurentianus, plut, XXXVII, cod. 16}[
origDate=s. XV]
@@ -291,7 +349,7 @@ along with this program. If not, see
origDate=s. XV]
\DeclareWitness{sV}{V}{Vaticanus lat. 1652}[
origDate=s. XV]
-\DeclareScholar{sDrak}{\emph{Drakenborch}}
+\DeclareSource{sDrak}{\emph{Drakenborch}}
\end{filecontents}
\documentclass{ltxdoc}
%\usepackage[letterpaper,margin=25mm,left=50mm,nohead]{geometry}
@@ -320,9 +378,9 @@ along with this program. If not, see
\def\sg#1{\textancientgreek{#1}}
\usepackage[Old Standard]{mathfont}
\usepackage{arabluatex}
-\usepackage[parnotes=roman,teiexport=tidy]{ekdosis}
+\usepackage[parnotes=roman,teiexport=tidy,verse]{ekdosis}
\input{ekdosis-cfg}
-\SetxmlBibResource{bibdata}
+\AddxmlBibResource{bibdata.xml}
\usepackage{booktabs}
\usepackage{xltabular}
\usepackage[prevent-all]{widows-and-orphans}
@@ -369,8 +427,6 @@ along with this program. If not, see
\labelformat{subsection}{sect.~#1}
\labelformat{subsubsection}{sect.~#1}
\labelformat{figure}{fig.~#1}
-\newcounter{dummy}
-\newcommand{\dummy}{\refstepcounter{dummy}}
\usepackage[defaultindex=none,citecmd=autocite]{icite}
\bibinput{ekdosis}
\usepackage[nospace,american]{varioref}
@@ -385,8 +441,8 @@ along with this program. If not, see
}
\ifbool{nocolordoc}
{
- \usepackage{fontawesome}
- \def\oasymbol{\faUnlock}
+ \usepackage{academicons}
+ \def\oasymbol{\aiOpenAccess}
\usepackage{biblatex-ext-oa}
}
{\usepackage[symbolpackage=tikz]{biblatex-ext-oa}}
@@ -422,9 +478,9 @@ along with this program. If not, see
\metaset{title}{ἔκδοσις}
\metaset{date}{\filedate}
\metaset{draft}{\fileversion}
-\metaset{subject}{TEI xml compliant critical editions}
-\metaset{subtitle}{Typesetting TEI xml Compliant Critical Editions}
-\metaset[print]{subtitle}{Typesetting \texttt{TEI xml} Compliant
+\metaset{subject}{TEI xml-compliant critical editions}
+\metaset{subtitle}{Typesetting TEI xml-Compliant Critical Editions}
+\metaset[print]{subtitle}{Typesetting \texttt{TEI xml}-Compliant
Critical Editions}
\metaset{author}{Robert Alessi}
\metaset{keywords}{LaTeX, Lua, TEI xml, multilingual critical
@@ -496,8 +552,7 @@ along with this program. If not, see
\ifbool{nocolordoc}{\usemintedstyle{bw}}{}
\setminted{bgcolor=ekdcolor,linenos, fontsize=\small}
\newminted[ekdlua]{lua}{bgcolor={}, linenos, fontsize=\relsize{-0.5},
- xleftmargin=12pt, breaklines, numberblanklines=false, numbersep=3pt,
- firstnumber=last}
+ xleftmargin=12pt, breaklines, numberblanklines=false, numbersep=3pt}
\renewcommand{\theFancyVerbLine}{\normalfont\smaller\arabic{FancyVerbLine}}
\usepackage[contents]{colordoc}
\newcommand{\pkg}[1]{\textsf{#1}\index{#1=#1 (package)}}
@@ -513,6 +568,13 @@ along with this program. If not, see
\captionof{#1}{#2}%
#3%
\egroup}
+\NewDocumentCommand{\newfeature}{o}{%
+ \leavevmode
+ \IfNoValueTF{#1}
+ {\marginpar{\hfill\emph{New feature}}}
+ {\marginpar{\hfill\emph{New feature} #1}}%
+ \ignorespaces
+}
% \usepackage{etoc}
% \etocsettocdepth{paragraph}
% \newcommand{\ekdtableofcontents}{%
@@ -538,14 +600,14 @@ along with this program. If not, see
\RecordChanges
%\OnlyDescription
\begin{document}
- \DocInput{\jobname.dtx}
- \PrintChanges
- \PrintIndex
+\DocInput{\jobname.dtx}
+\PrintChanges
+\PrintIndex
\end{document}
%</driver>
% \fi
%
-% \CheckSum{1669}
+% \CheckSum{1893}
%
% \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
@@ -587,6 +649,7 @@ along with this program. If not, see
%
% \changes{v0.99a}{2020/07/08}{First public release (documentation in
% progress)}
+% \changes{v1.0}{2020/08/14}{Documentation complete}
%
% \begin{abstract}
% \pkg{ekdosis} is a Lua\LaTeX{} package designed for
@@ -596,7 +659,7 @@ along with this program. If not, see
% facing pages, in any number of columns which in turn can be
% synchronized or not. In addition to printed texts,
% \pkg{ekdosis} can convert \texttt{.tex} source files so as to
-% produce \texttt{TEI xml} compliant critical
+% produce \texttt{TEI xml}-compliant critical
% editions. Database-driven encoding under \LaTeX{} then allows
% extraction of texts entered segment by segment according to
% various criteria: main edited text, variant readings, translations
@@ -802,9 +865,10 @@ along with this program. If not, see
%</example>
% \fi
%
-% \needspace{5\baselineskip}
% PDF output:---
% \medskip
+%
+% \needspace{7\baselineskip}
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
% I
@@ -850,7 +914,7 @@ along with this program. If not, see
% the first lemma above spans several lines whereas the second one is
% written in sequence without spaces.
%
-% In the PDF ouput, the edition text is printed in the upper part of
+% In the PDF output, the edition text is printed in the upper part of
% the page, above the line, and naturally shows the accepted
% readings. The margins are used for numeration. In the apparatus
% criticus, below the line, reference to the text is made by
@@ -956,14 +1020,28 @@ along with this program. If not, see
%</example>
% \fi
%
-% \subsection{Witnesses, Hands, Shorthands \& Scholars}
+% \subsection{Witnesses, Hands, Sources, Scholars \& Shorthands}
% \label{sec:declarations}
+% \paragraph{Terminology}
+% \label{sec:terminology}
+% Strictly speaking, the term \enquote{witness} should apply to any
+% manuscript evidence dating back to the Middle Ages used by the
+% editor to establish the edition text. That said, editors often
+% consult many other types of documents, such as modern editions,
+% articles, notes, correspondence and the like, all of which fall into
+% the category of \enquote{sources}. Furthermore, unpublished
+% conjectures are also taken into account, not to mention the
+% corrections and emendations that are proposed in many places by the
+% editor of the text. As it is necessary to refer to scholars as
+% individuals, \enquote{scholars} naturally emerges as a third
+% category.
+%
% Any reference that is to be used in the apparatus criticus must be
% \enquote{declared} in the preamble beforehand, namely: manuscript
% sigla (either for single manuscripts or manuscript families, primary
-% or later hands, \emph{\&c.}) or abbreviated last names of scholars.
-% To that effect, \pkg{ekdosis} provides the following preamble-only
-% commands:---
+% or later hands, \emph{\&c.}), abbreviated last names of sources
+% and scholars. To that effect, \pkg{ekdosis} provides the following
+% preamble-only commands:---
%
% \paragraph{Witnesses}
% \DescribeMacro{\DeclareWitness} \cs{DeclareWitness}\marg{unique
@@ -1008,8 +1086,10 @@ along with this program. If not, see
% \label{ref:marcianus-b}
% To take here one example, a witness such as the \emph{Marcianus
% Graecus}~269, referred to as manuscript \enquote*{M} in the
-% editions, which contains sixty treatises from Hippocrates, could be
-% declared as follows:--- \iffalse
+% editions, which contains sixty treatises transmitted under the name
+% of Hippocrates, could be declared as follows:---
+%
+%\iffalse
%<*example>
% \fi
\begin{minted}[linenos=false]{latex}
@@ -1034,7 +1114,7 @@ along with this program. If not, see
% \item The unique identifier of the hand to be used both in the
% |.tex| source file and as an |xml:id| in the \texttt{TEI xml} output
% if any.
-% \item The unique idendifier of the witness the hand is related
+% \item The unique identifier of the witness the hand is related
% to. Of course, this witness must have been declared beforehand.
% \item The rendition to be used in the printed apparatus criticus,
% which also will be found within the |<handNote>| element of the
@@ -1061,7 +1141,7 @@ along with this program. If not, see
% source file will be printed as \getsiglum{M}, \getsiglum{M1} and
% \getsiglum{M2} respectively. Not only the code gains legibility, but
% also flexibility for simply changing any declared rendition will
-% update corresponding sigla thoughout the entire edition.
+% update corresponding sigla throughout the entire edition.
%
% As a final example, here is how \pkg{ekdosis} would encode
% information as declared above for the \emph{Marcianus Gr.}~269
@@ -1081,7 +1161,7 @@ along with this program. If not, see
<institution>Marciana Library</institution>
<idno>269</idno>
<msName>
- <emph>Marcianus Gr.</emph>
+ Marcianus Gr.
</msName>
</msIdentifier>
<physDesc>
@@ -1112,9 +1192,91 @@ along with this program. If not, see
% \fi
% \label{ref:marcianus-e}
%
+% \paragraph{Sources}
+% \label{ref:declare-source}
+% \DescribeMacro{\DeclareSource} \cs{DeclareSource}\marg{unique
+% label}\marg{rendition}\newfeature[v1.1]\\
+% The \emph{Conspectus Siglorum} that is placed ahead of the edition
+% text is traditionally divided into two parts: a)~\emph{Codices},
+% which provides the list of sigla used in the apparatus,
+% b)~\emph{Editiones uel Studia}, which provides references to
+% sources, either published or unpublished, which contain conjectures
+% used in the apparatus criticus. \cs{DeclareSource} takes two
+% mandatory arguments used to specify consecutively:---
+% \begin{enumerate}
+% \item A unique label used in the |.tex| source file to refer to the
+% work where the conjecture is found.
+% \item The rendition to be used in the printed apparatus criticus.
+% \end{enumerate}
+%
+% \danger As \pkg{ekdosis} can include and use \texttt{TEI
+% xml}-compliant lists of references,\footnote{See below
+% \vref{sec:references-cited-works}.} it is advisable to use
+% Bib\hologo{(La)TeX} labels in the first argument of
+% \cs{DeclareSource}. Otherwise, the unique label used to declare the
+% source would point to no |xml:id| and the \texttt{TEI xml} would not
+% be valid. Likewise, shorthands fields from the bibliographical
+% database can be recalled from within the second argument of
+% \cs{DeclareSource}:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+\DeclareSource{Wil}{Wilamowitz}
+% or for example:
+\DeclareSource{Wil}{\citename{Wil}{shorteditor}}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+% \label{sec:declarations-end}
+%
+% \paragraph{Scholars}
+% \label{ref:declare-scholar}
+% \DescribeMacro{\DeclareScholar}\cs{DeclareScholar}\marg{unique
+% id}\marg{rendition}\oarg{options}\newfeature[v1.1]\\
+% Occasionally, it is necessary to refer to a scholar as a person. For
+% example, corrections and conjectures are commonly inserted as
+% self-references to the editor of the text in the apparatus criticus
+% in print with such words as \emph{scripsi}, \emph{addidi},
+% \emph{correxi} and the like. Other examples come from unpublished
+% conjectures of other scholars found in private
+% libraries. \cs{DeclareScholar} takes two mandatory arguments to
+% specify consecutively:---
+% \begin{enumerate}
+% \item The unique identifier of the scholar to be used both in the
+% |.tex| source file and as an |xml:id| in the \texttt{TEI xml} output
+% if any.
+% \item The rendition to be used in the apparatus criticus in print,
+% which also will be found within the |<sourceDesc>| element of the
+% \texttt{TEI} header where the description of the persons cited
+% occurs, within an |<abbr type="siglum">| element.
+% \end{enumerate}
+% Finally, the optional argument of \cs{DeclareScholar} accepts the
+% following comma-separated list of |key-value| arguments:---\\
+% \DescribeOption{rawname}|rawname|$=$\meta{name}\\
+% |rawname| refers to a name that is not to be dissected into name
+% part components such as forename, surname and the like. If |rawname|
+% be used, then \pkg{ekdosis} will ignore the following three optional
+% arguments: |forename|, |surname| and |addname|.\\
+% \DescribeOption{forename}|forename|$=$\meta{forename}\\
+% |forename| refers to first and middle names or initials.\\
+% \DescribeOption{surname}|surname|$=$\meta{surname}\\
+% |surname| stores the last name.\\
+% \DescribeOption{addname} |addname|$=$\meta{additional name}\\
+% |addname| refers to an additional or alternate name by which the
+% scholar is known viz.\ a Latinized form of the name, a nickname, an
+% epithet or alias.\\
+% \DescribeOption{note} |note|$=$\meta{note}\\
+% |note| may hold any relevant information about the material used by
+% the editor. For example, a note may specify that this material has
+% been found as marginal notes by the hand of the scholar in some
+% edition in print.
+%
% \paragraph{Shorthands}
% \DescribeMacro{\DeclareShorthand} \cs{DeclareShorthand}\marg{unique
-% id}\marg{rendition}\marg{csv list of witnesses}\\
+% id}\marg{rendition}\marg{csv list of identifiers}\\
% This command provides a convenient way to declare \emph{families} of
% witnesses. It takes three mandatory arguments used to specify
% consecutively:---
@@ -1147,50 +1309,39 @@ along with this program. If not, see
% Then, symbols |a| and |b| can be used in the |.tex| source file in
% place of manuscripts that belong to either family.
%
-% \paragraph{Scholars}
-% \label{ref:declare-scholar}
-% \DescribeMacro{\DeclareScholar} \cs{DeclareScholar}\marg{unique
-% label}\marg{rendition}\\
-% The \emph{Conspectus Siglorum} that is placed ahead of the edition
-% text is traditionally divided into two parts: a)~\emph{Codices},
-% which provides the list of sigla used in the apparatus,
-% b)~\emph{Editiones uel Studia}, which provides references to
-% scholars whose published or unpublished works contain conjectures
-% used in the apparatus criticus. \cs{DeclareScholar} takes two
-% mandatory arguments used to specify consecutively:---
-% \begin{enumerate}
-% \item A unique label used in the |.tex| source file to refer to the
-% work where the conjecture is found.
-% \item The rendition to be used in the printed apparatus criticus.
-% \end{enumerate}
+% That said, \cs{DeclareShorthand} is not meant to be restricted to
+% declared witnesses. On the contrary, it also applies to any declared
+% sources and scholars by means of \cs{DeclareSource} and
+% \cs{DeclareScholar}. As an example, assuming that a self-reference
+% to the person responsible for the edition has been set in the
+% preamble, an associated shorthand can be defined like so:---
%
-% As \pkg{ekdosis} can include and use \texttt{TEI xml} compliant
-% lists of references,\footnote{See below
-% \vref{sec:references-cited-works}.} it is avisable to use
-% Bib\hologo{(La)TeX} labels in the first argument of
-% \cs{DeclareScholar}. Likewise, shorthands fields from the
-% bibliographical database can be recalled from within the second
-% argument of \cs{DeclareScholar}:---
-%
% \iffalse
%<*example>
% \fi
-\begin{minted}[linenos=false]{latex}
-\DeclareScholar{Wil}{Wilamowitz}
-% or for example:
-\DeclareScholar{Wil}{\citename{Wil}{shorteditor}}
+\begin{minted}{latex}
+\DeclareScholar{ego}{ego}[
+ forename=John,
+ surname=Smith,
+ note=Main editor of the text]
+\DeclareShorthand{egoscr}{\emph{scripsi}}{ego}
\end{minted}
% \iffalse
%</example>
% \fi
-% \label{sec:declarations-end}
+%
+% Then, the shorthand |egoscr| (l.~5) can be used to print in the
+% apparatus criticus the technical term \emph{scripsi} and use at the
+% same time the pointer |#ego| that is expected in the \texttt{TEI
+% xml} output file. Detailed examples of this technique will be
+% provided below in \vref{sec:emendations-conjectures}.
%
% \subsubsection{Printing Formatted Witnesses
% --- Conspectus Siglorum}
% \label{sec:print-witnesses}
-% Once witnesses, hands and scholars have been declared, \pkg{ekdosis}
-% provides two commands to have them printed as declared from their
-% indentifiers.
+% Once witnesses, hands, scholars and sources have been declared,
+% \pkg{ekdosis} provides two commands to have them printed as declared
+% from their identifiers.
%
% \DescribeMacro{\getsiglum} \cs{getsiglum}\marg{csv list of witnesses
% or single witness} behaves exactly as the |wit| optional argument of
@@ -1254,12 +1405,12 @@ along with this program. If not, see
% \SigLine{cl}\\
% \end{xltabular}
%
-% \subsection{Editing a Single Text With No Translation}
+% \subsection{Editing a Single Text}
% \label{sec:single-text-editing}
% \DescribeEnv{ekdosis}
% Running paragraphs of one single text to be edited should be
-% inserted in the \env{ekdosis} environment, like so:---\footnote{See
-% above \vref{lst:pj1}.}
+% inserted in the \env{ekdosis} environment, like so:\footnote{See
+% above \vref{lst:pj1}.}---
% \iffalse
%<*example>
% \fi
@@ -1323,7 +1474,11 @@ yesterday.
% \emph{reading}, which contains deviant readings rejected by the
% editor.
%
-% \paragraph{Lemmata} \DescribeMacro{\lem}
+% \danger What follows refers to the notions of \enquote{witness},
+% \enquote{source} and \enquote{scholar} as defined above
+% \vpageref{sec:terminology}.
+%
+% \paragraph{Lemmata} \label{ref:lemmata}\DescribeMacro{\lem}
% \cs{lem}\oarg{options}\marg{lemma text}\\
% As \meta{lemma text} is a word or a phrase judged by the editor to
% be authentic or authoritative, \cs{lem} prints it by default both in
@@ -1338,18 +1493,38 @@ yesterday.
% While a single witness may be recorded as in |wit=A|,
% comma-separated lists of multiple witnesses must obviously be
% enclosed in curly braces, like so:
-% |wit={A,B,C}|. \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}|.\\
+% |wit={A,B,C}|. \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
+% respectively as described below.\\
+% \DescribeOption{source} |source|$=$\meta{csv list of
+% sources}\label{ref:lem-source}\newfeature[v1.1]\\
+% A \enquote{source} refers to any type of document consulted by the
+% editor to establish the edition text. Most commonly, corrections and
+% emendations from previous editions are cited in the apparatus
+% criticus.\footnote{For edition texts used as sources, see examples
+% below in \vref{sec:emendations-conjectures} and
+% \vref{sec:references-cited-works}.}\\
+% \DescribeOption{resp} |resp|$=$\meta{csv list of
+% scholars}\label{ref:lem-resp}\newfeature[v1.1]\\
+% |resp| refers to scholars responsible for the emendations,
+% conjectures and corrections that are cited in the apparatus
+% criticus.\footnote{See detailed examples in
+% \vref{sec:emendations-conjectures}.}\\
% \DescribeOption{alt} |alt|$=$\meta{alternate lemma}\\
% While the mandatory argument of \cs{lem}, \meta{lemma text}, is
% always used to print the edition text in the upper part of the page,
% \meta{alternate lemma}, if specified, supersedes what is printed in
-% the related entry of the apparatus criticus. This mechanism is useful
-% in more than one respect. For instance, it can be used to insert
-% abbreviated lemmata in the apparatus criticus, or to introduce an
-% alternate way of writing entries with Latin technical terms in the
-% apparatus criticus as will be demonstrated below in the example
+% the related entry of the apparatus criticus. This mechanism is
+% useful in more than one respect. For instance, it can be used to
+% insert abbreviated lemmata in the apparatus criticus, or to
+% introduce an alternate way of writing entries with Latin technical
+% terms in the apparatus criticus as will be demonstrated below in the
+% example
% provided by \vref{lst:pj2}.\\
% \DescribeOption{sep} |sep|$=$\meta{separator}\\
% |sep| allows to change the symbol used to separate the lemma text
@@ -1357,8 +1532,17 @@ yesterday.
% bracket (|]|)\\
% \DescribeOption{nosep} |nosep|$=$\verb+true|false+\\
% This named argument does not need a value as it defaults to |true|
-% if it is used. Obviously, |nosep| removes the separator mentioned
-% above.\\
+% if it is 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.
+% \danger \DescribeMacro{\ekdsep} If |nosep| has been 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.\\
% \DescribeOption{nolem} |nolem|$=$\verb+true|false+\\
% This named argument does not need a value as it defaults to |true|
% if it is used. |nolem| completely removes the lemma text from the
@@ -1366,10 +1550,12 @@ yesterday.
% entry in the apparatus criticus.\\
% \DescribeOption{type} |type|$=$\meta{value}\\
% This named argument has no effect on the apparatus criticus of the
-% edition in print, but it is used in the \texttt{TEI xml} ouput to
+% edition in print, but it is used in the \texttt{TEI xml} output to
% classify the variation recorded in the entry according to some
% convenient typology. Categories such as lexical, morphological,
-% orthographical and the like may apply.
+% orthographical and the like may apply. Obviously, |type=emendation|
+% should be restricted to lemma texts and |type=conjecture| to variant
+% readings recorded by means of \cs{rdg} described below.
%
% \needspace{11\baselineskip}
% Finally, four named arguments can be used to insert words at the
@@ -1404,19 +1590,24 @@ yesterday.
% more detailed information:---\\
% \DescribeOption{wit} |wit|$=$\meta{csv list of
% witnesses}\label{ref:rdg-wit}\\
+% \DescribeOption{source} |source|$=$\meta{csv list of sources}\\
+% \DescribeOption{resp} |resp|$=$\meta{csv list of scholars}\\
% \DescribeOption{alt} |alt|$=$\meta{alternate reading}\\
% \DescribeOption{nordg} |nordg|$=$\verb+true|false+\\
% This named argument does not need a value as it defaults to |true|
% if it is used. |nordg| completely removes the variant reading from
% the related entry in the apparatus criticus.\\
% \DescribeOption{type} |type|$=$\meta{value}\\
+% Obviously, |type=conjecture| should be restricted to variant
+% readings and |type=emendation| to lemma texts recorded by means of
+% \cs{lem} described above.\\
% \DescribeOption{pre} |pre|$=$\meta{words}\\
% \DescribeOption{post} |post|$=$\meta{words}\\
% \DescribeOption{prewit} |prewit|$=$\meta{words}\\
% \DescribeOption{postwit} |postwit|$=$\meta{words}\\
%
% \paragraph{Notes}
-% \DescribeMacro{\note}\DescribeMacro{\note*}
+% \DescribeMacro{\note}\label{ref:notes-b}\DescribeMacro{\note*}
% \cs{note}\oarg{options}\marg{text} or
% \cs{note*}\oarg{options}\marg{text}\label{ref:editorial-notes}\\
% It may happen that editorial notes be needed to record short
@@ -1485,6 +1676,8 @@ yesterday.
% \iffalse
%</example>
% \fi
+%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -1566,6 +1759,580 @@ yesterday.
% \iffalse
%</example>
% \fi
+% \label{ref:notes-e}
+%
+% \subsection{Indicating Subvariation in Apparatus Entries}
+% \label{sec:indic-subv-appar}
+% It must be noted that grouping readings so as to keep emphasis on
+% subvariation, regardless of its cause, is entirely optional.
+% Furthermore, the applicability of this technique is limited to the
+% \texttt{TEI xml} output as it helps the machines to understand a
+% grouping otherwise immediately accessible to human mind from the
+% information that is available in well-written
+% apparatus. \pkg{ekdosis} provides two ways of expressing
+% subvariation.
+%
+% \subsubsection{Implicit Grouping}
+% \label{sec:implicit-grouping}
+% Because apparatus entries may nest recursively, the \cs{app} command
+% can be used to group similar readings.
+%
+% \danger However, for nesting to work, the |alt| optional argument
+% must be used in every \cs{lem} and \cs{rdg} command involved in the
+% nesting. This rule applies to both parent and child commands, as
+% demonstrated in the following example:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+As I was walking home through Times Square, I saw my friend
+\app{
+ \lem[wit={A,B}, alt={Peter\---Street}]{Peter at the
+ \app{
+ \lem[wit=A, alt=station]{station}
+ \rdg[wit=B, alt=bookstore]{bookstore}
+ }
+ on 42nd Street}
+ \rdg[wit=C, alt={John on Broadway}]{John on Broadway}
+}.
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% PDF output:---
+% \medskip
+%
+% \needspace{7\baselineskip}
+% \resetlinenumber
+% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
+% \begin{specimen}
+% As I was walking home through Times Square, I saw my friend
+% \app{
+% \lem[wit={pjA,pjB}, alt={Peter\---Street}]{Peter at the
+% \app{
+% \lem[wit=pjA, alt=station]{station}
+% \rdg[wit=pjB, alt=bookstore]{bookstore}}
+% on 42nd Street}
+% \rdg[wit=pjC, alt={John on Broadway}]{John on Broadway}}.
+% \end{specimen}
+% \end{alignment}
+%
+% \begin{remarks}
+% \item[\textsc{Rem.}] Two \cs{app} commands naturally insert two
+% entries in the apparatus criticus. As the subvariation comes
+% first, what ms.\ C reads is only mentioned in the subsequent
+% entry.
+% \end{remarks}
+%
+% \texttt{TEI xml} output:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{xml}
+<p>As I was walking home through Times Square, I saw my
+friend
+<app>
+ <lem wit="#A #B">Peter at the
+ <app>
+ <lem wit="#A">station</lem>
+ <rdg wit="#B">bookstore</rdg>
+ </app>on 42nd Street</lem>
+ <rdg wit="#C">John on Broadway</rdg>
+</app>.</p>
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsubsection{Explicit Grouping}
+% \label{sec:explicit-grouping}
+% \DescribeMacro{\rdgGrp} \cs{rdgGrp}\oarg{options}\marg{lemma text
+% \textbar\ readings}\newfeature[v1.1]\\
+% Explicit grouping of readings can be achieved by means of the
+% \cs{rdgGrp} command. It takes as mandatory argument the commands
+% used for inserting lemma texts, readings and notes that are
+% described \vpagerefrange{ref:lemmata}{ref:notes-e}, viz.\ \cs{lem},
+% \cs{rdg} and \cs{note}. \cs{rdgGrp} accepts one further optional
+% argument:---\\
+% \DescribeOption{type} |type|$=$\meta{value}\\
+% This named argument is used in the \texttt{TEI xml} output to
+% define an attribute common to all elements representing the
+% variation.
+%
+% Here follows how the technique of explicit grouping would apply to
+% the same passage as above:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+As I was walking home through Times Square, I saw my friend
+\app{
+ \rdgGrp[type=subvariation]{
+ \lem[wit=A, alt={Peter\---Street}]{Peter at the station
+ on 42nd Street}
+ \rdg[wit=B, alt={bookstore \emph{pro} station}]{Peter at the
+ bookstore on 42nd Street}
+ }
+ \rdg[wit=C]{John on Broadway}
+}.
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% PDF output:---
+% \medskip
+%
+% \needspace{7\baselineskip}
+% \resetlinenumber
+% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
+% \begin{specimen}
+% As I was walking home through Times Square, I saw my friend
+% \app{
+% \rdgGrp[type=subvariation]{
+% \lem[wit=pjA, alt={Peter\---Street}]{Peter at the station
+% on 42nd Street}
+% \rdg[wit=pjB, alt={bookstore \emph{pro} station}]{Peter at the
+% bookstore on 42nd Street}
+% }
+% \rdg[wit=pjC]{John on Broadway}
+% }.
+% \end{specimen}
+% \end{alignment}
+%
+% \begin{remarks}
+% \item[\textsc{Rem.}] In this example, the subvariation is emphasized
+% with a Latin technical term and may be expressed in one single
+% entry in a more economical manner.
+% \end{remarks}
+%
+% \texttt{TEI xml} output:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{xml}
+<p>As I was walking home through Times Square, I saw my
+friend
+<app>
+ <rdgGrp type="subvariation">
+ <lem wit="#A">Peter at the station on 42nd
+ Street</lem>
+ <rdg wit="#B">Peter at the bookstore on 42nd
+ Street</rdg>
+ </rdgGrp>
+ <rdg wit="#C">John on Broadway</rdg>
+</app>.</p>
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \section{Emendations and Conjectures}
+% \label{sec:emendations-conjectures}
+% From a technical standpoint, \enquote{conjectures} are readings that
+% are not supported by manuscript evidence, but are instead proposed
+% by scholars to be taken into consideration for establishing the
+% edition text. A conjecture is called an \enquote{emendation} if it
+% is adopted in place of what is provided by or missing from the text
+% provided by the manuscripts. Emendations and conjectures are
+% therefore readings and as such expected to be found within |<lem>|
+% or |<rdg>| elements. However, as both come from editions or
+% scholars, not from manuscripts, they are naturally associated with
+% |source| or |resp| attributes as described above
+% \vpagerefrange{ref:lem-source}{ref:lem-resp},\footnote{See also
+% \vpagerefrange{ref:declare-source}{ref:declare-scholar}.} and can be
+% distinguished from one another by the |type| attribute, eg.\ either
+% |emendation| or |conjecture|.
+%
+% As an example, the representation of witnesses, editors and
+% shorthands of Hippocrates' \emph{Epidemics}, Book~2 could be
+% summarized as follows:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}{latex}
+% Witnesses:
+\DeclareWitness{V}{V}{\emph{Vaticanus Gr.} 276}
+\DeclareWitness{I}{I}{\emph{Parisinus Gr.} 2140}
+\DeclareHand{Iac}{I}{I\textsuperscript{ac}}[Lectio ante correctionem]
+\DeclareHand{Ipc}{I}{I\textsuperscript{pc}}[Lectio post correctionem]
+\DeclareWitness{R}{R}{\emph{Vaticanus Gr.} 277}
+\DeclareWitness{H}{H}{\emph{Parisinus Gr.} 2142}
+% Sources (the first arguments below must refer to biblatex labels and
+% an xml bibliographical database must be supplied):
+\DeclareSource{Lit}{Littré}
+\DeclareSource{Erm}{Ermerins}
+\DeclareSource{Sm}{Smith}
+% Persons:
+\DeclareScholar{ego}{ego}[
+ forename=Robert,
+ surname=Alessi]
+% Useful shorthands:
+\DeclareShorthand{codd}{codd.}{V,I,R,H}
+\DeclareShorthand{edd}{edd.}{Lit,Erm,Sm}
+\DeclareShorthand{egoscr}{\emph{scripsi}}{ego}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% As can be seen from lines~18--20, three useful shorthands have been
+% defined: |codd| prints \enquote{codd.} for Latin pl.\ \emph{codices}
+% viz.\ \enquote{all manuscripts} and refers to the three \texttt{xml}
+% identifiers |V|, |I|, |R| and |H| declared at ll.~2--3 and 6--7;
+% |edd| prints \enquote{edd.} for Latin pl.\ \emph{editores} viz.\
+% \enquote{all editors} and refers to the three \texttt{xml}
+% identifiers |Lit|, |Erm| and |Sm| declared at
+% ll.~10--12;\footnote{For detailed information on how to use
+% \cs{DeclareSource} and insert references to cited works, the reader
+% is invited to refer to \vref{sec:references-cited-works}.} finally,
+% |egoscr| (l.~20) is used to print the technical Latin term
+% \enquote{\emph{scripsi}}, \enquote{I wrote}, to denote a personal
+% conjecture. Then, the |.tex| source file can be structured as
+% follows:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}{latex}
+\begin{ekdosis}
+ καὶ ἐγίνετο μᾶλλον \app{
+ \lem[wit={V, Ipc,R,H}]{νότῳ}
+ \rdg[wit=Iac]{νότου}
+ \rdg[source=Erm, type=conjecture]{ἐν νώτῳ}}· [...] % conjecture
+
+ εἰ
+ \app{
+ \lem[resp=egoscr, type=emendation]{μὲν} % emendation
+ \rdg[wit=codd, source=edd]{μὴ}
+ } εἴη διὰ ταῦτα [...]
+\end{ekdosis}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{remarks}
+% \item Line~5 introduces a \emph{conjecture} which has been annotated
+% with |type=conjecture| to facilitate its identification. Other
+% optional arguments could have been used, such as
+% |prewit=|\texttt{coni.} or |prewit=|\texttt{falso coni.}, to print
+% explanatory words in the apparatus criticus before the abridged
+% name of the scholar.
+% \item \label{it:egomute}Conversely, line~9 introduces an
+% \emph{emendation} for which the shorthand |egoscr| has been used
+% to print the exact term \emph{scripsi} in the apparatus criticus
+% while keeping |ego| as an |xml:id| for the \texttt{TEI xml} output
+% file. Other strategies could have been used. For example, one
+% could have defined a specific shorthand to print nothing in place
+% of |ego| and leave the insertion of technical terms to the |post|
+% optional argument of \cs{lem}, like so:---
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+% Preamble:
+% (\unskip is for removing the space left by the empty 2nd argument
+% below.)
+\DeclareShorthand{egomute}{\unskip}{ego}
+
+% Document:
+ \app{
+ \lem[resp=egomute, post=\emph{scripsi}, type=emendation]{μὲν}
+ \rdg[wit=codd, source=edd]{μὴ}
+ } εἴη διὰ ταῦτα [...]
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+% \end{remarks}
+%
+% PDF output:---
+% \medskip
+%
+% \needspace{7\baselineskip}
+% \resetlinenumber
+% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
+% \begin{specimen}
+% \begin{ancientgreek}
+% καὶ ἐγίνετο μᾶλλον \app{
+% \lem[wit={hV, hIpc,hR,hH}]{νότῳ}
+% \rdg[wit=hIac]{νότου}
+% \rdg[source=Erm, type=conjecture]{ἐν νώτῳ}}· [...]
+%
+% εἰ \app{
+% \lem[resp=hegoscr, type=emendation]{μὲν}
+% \rdg[wit=hcodd, source=hedd]{μὴ}
+% } εἴη διὰ ταῦτα [...]
+% \end{ancientgreek}
+% \end{specimen}
+% \end{alignment}
+%
+% \texttt{TEI xml} output:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{xml}
+<p xml:lang="grc">καὶ ἐγίνετο μᾶλλον
+<app>
+ <lem wit="#V #Ipc #R #H">νότῳ</lem>
+ <rdg wit="#Iac">νότου</rdg>
+ <rdg source="#Erm" type="conjecture">ἐν νώτῳ</rdg>
+</app>· [...]</p>
+<p>εἰ
+<app>
+ <lem resp="#ego" type="emendation">μὲν</lem>
+ <rdg wit="#V #I #R #H" source="#Lit #Erm #Sm">
+ μὴ</rdg>
+</app>εἴη διὰ ταῦτα [...]</p>
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsection{Editorial Addition and Deletion}
+% \label{sec:editorial-add-del}
+% \pkg{ekdosis} provides a set of commands to indicate that text has
+% been supplied or removed by conjecture. As regards critical
+% symbols conventionally used for representing emendations, lacunae,
+% omissions, gaps, editorial deletions or additions and the like,
+% \pkg{ekdosis} follows the standards as described by
+% \textcite[80--82]{West1973}:---
+% \begin{description}[font=\ttfamily]
+% \item[<>] text added by conjecture or from a parallel source.
+% \item[***] lacuna in the whole textual tradition.
+% \item[<***>] conjectured lacuna.
+% \item[\{\}] editorial deletion.
+% \item[\dag\dag] text judged by the editor to be corrupt. Note that if
+% only one word is suspect, only one crux is needed.
+% \end{description}
+%
+% \DescribeMacro{\SetCritSymbols}\newfeature[v1.1]
+% \cs{SetCritSymbols}\marg{csv list of options} can be used to change
+% the critical symbols described above. This command accepts the
+% following list of |key-value|
+% optional arguments:---\\
+% \DescribeOption{suppbegin}|suppbegin|$=$\meta{symbol}
+% \hfill\tcboxverb{Default: <}\\
+% The opening symbol used to mark the text that is supplied.\\
+% \DescribeOption{suppend}|suppend|$=$\meta{symbol}
+% \hfill\tcboxverb{Default: >}\\
+% The closing symbol used to mark the text that is supplied.\\
+% \DescribeOption{delbegin}|delbegin|$=$\meta{symbol}
+% \hfill\tcboxverb|Default: {|\\
+% The opening symbol used to mark the text that is deleted.\\
+% \DescribeOption{delend}|delend|$=$\meta{symbol}
+% \hfill\tcboxverb|Default: }|\\
+% The closing symbol used to mark the text that is deleted.\\
+% \DescribeOption{sicbegin}|sicbegin|$=$\meta{symbol}
+% \hfill\tcboxverb{Default: †}\\
+% The opening symbol used to mark the text that is deemed to be
+% suspect.\\
+% \DescribeOption{sicend}|sicend|$=$\meta{symbol}
+% \hfill\tcboxverb{Default: †}\\
+% The closing symbol used to mark the text that is deemed to be
+% suspect.\\
+% \DescribeOption{gapmark}|gapmark|$=$\meta{symbols}
+% \hfill\tcboxverb{Default: ***}\\
+% The symbols used to mark lacunae.\\
+%
+% As an example, what follows sets |[]| for deletions and |...| for
+% lacunae:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+\SetCritSymbols{
+ delbegin = [,
+ delend = ],
+ gapmark = \dots
+}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \danger If modified, brackets can be adapted to languages that are
+% written from right to left. To that effect, \pkg{ekdosis} provides a
+% boolean expression |al@rlmode| which is evaluated as |true| if the
+% writing direction is set from right to left and as |false|
+% otherwise. As the \pkg{etoolbox} package is loaded by \pkg{ekdosis},
+% \cs{ifboolean}|{al@rlmode}|\marg{rtl symbol}\marg{ltr symbol} can be
+% used to perform the test.
+%
+% \paragraph{Editorial Addition}
+% \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
+% command is normally expected in \cs{lem}|{}| or \cs{rdg}|{}|.
+%
+% \paragraph{Editorial Deletion}
+% \DescribeMacro{\surplus}\newfeature[v1.1] \cs{surplus}\marg{text}
+% is used to mark \meta{text} that is deemed to be inauthentic, but
+% nevertheless retained between braces in the edition text as it is
+% transmitted by all witnesses. This command is normally expected in
+% \cs{lem}|{}| or \cs{rdg}|{}|.
+%
+% \paragraph{Crux}
+% \DescribeMacro{\sic}\newfeature[v1.1] \cs{sic}\marg{text} takes as
+% 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}.
+%
+% \paragraph{Lacuna}
+% \DescribeMacro{\gap}\newfeature[v1.1] \cs{gap}\marg{csv list of
+% options} indicates that some amount of text has fallen away from the
+% entire tradition. It takes as mandatory argument a comma-separated
+% list of options that can be used to further specify the reason for
+% omission, the unit of measurement, the quantity or the extent, as
+% follows:---\\
+% \DescribeOption{reason}|reason|$=$\meta{reason}\\
+% |reason| gives the reason for omission.\\
+% \DescribeOption{unit} |unit|$=$\meta{unit}\\
+% |unit| provides some regularized measurement, such as |character|,
+% |word|, |line| and the like.
+% \DescribeOption{quantity} |quantity|$=$\meta{n}\\
+% |quantity| specifies the number of the given unit that comprise the
+% measurement.\\
+% \DescribeOption{extent} |extent|$=$\meta{description}\\
+% |extent| describes the size, including quantity and unit in a single
+% string of words.
+%
+% \paragraph{Conjectured Lacuna}
+% Assumably, the conjectured lacuna should be enclosed by
+% \cs{supplied} and as such contained by \cs{lem} with
+% |type=emendation| to indicate that the lacuna has been accepted by
+% the editor.
+%
+% Examples follow:\footnote{On the use of \texttt{egomute} (l.~2), see
+% above \vref{it:egomute}.}---
+%
+% \captof{Emendations, conjectures and
+% corrections}[\label{lst:emend-coni-corr}]
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}{latex}
+% Preamble:
+\DeclareShorthand{egomute}{\unskip}{ego}
+
+% Document:
+\begin{ekdosis}
+ σχεδὸν \app{
+ \lem[resp=egomute, nosep, post={post σχεδὸν quattuor uerba
+ excidisse uid.}, type=emendation]{\supplied{\gap{reason=lost,
+ unit=word, quantity=4}}}
+ } οὗτοι
+
+ subsidiis magnis \sic*{epicuri} constabilitas
+
+ declinare quis est qui \sic{possit cernere sese}.
+
+ \app{
+ \lem[resp=egomute, type=emendation, nosep, post={ante
+ ὑπογίν.}]{\surplus{καὶ}}
+ \note{deleui e Gal.P}
+ } ὑπογίνονται
+
+ Πάντων δὲ \app{
+ \lem[resp=egomute, type=emendation, nosep]{\supplied{τῶν πυρετῶν}}
+ \note[post=\ekdsep]{addidi (\arb{^gamI`a 'l-.hummayAti}
+ \getsiglum{Gal})}
+ \rdg[nordg, source=Gal]{\arb{^gamI`a 'l-.hummayAti}}
+ \rdg[wit=codd, source=edd, alt=om.]{}
+ },
+\end{ekdosis}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% PDF output:---
+% \medskip
+%
+% \needspace{7\baselineskip}
+% \resetlinenumber
+% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
+% \begin{specimen}
+% σχεδὸν \app{
+% \lem[resp=egomute, nosep, post={post σχεδὸν quattuor uerba
+% excidisse uid.}, type=emendation]{\supplied{\gap{reason=lost,
+% unit=word, quantity=4}}}
+% } οὗτοι
+%
+% subsidiis magnis \sic*{epicuri} constabilitas
+%
+% declinare quis est qui \sic{possit cernere sese}.
+%
+% \app{
+% \lem[resp=egomute, type=emendation, nosep, post={ante
+% ὑπογίν.}]{\surplus{καὶ}}
+% \note{deleui e Gal.P}
+% } ὑπογίνονται
+%
+%
+% Πάντων δὲ \app{
+% \lem[resp=egomute, type=emendation, nosep]{\supplied{τῶν πυρετῶν}}
+% \note[post=\ekdsep]{addidi (\arb{^gamI`a 'l-.hummayAti}
+% \getsiglum{Gal})}
+% \rdg[nordg, source=Gal]{\arb{^gamI`a 'l-.hummayAti}}
+% \rdg[wit=hcodd, source=hedd, alt=om.]{}
+% },
+% \end{specimen}
+% \end{alignment}
+%
+% \texttt{TEI xml} output:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{xml}
+<p>σχεδὸν
+<app>
+ <lem resp="#ego" type="emendation">
+ <supplied>
+ <gap reason="lost" unit="word" quantity="4" />
+ </supplied>
+ </lem>
+</app>οὗτοι</p>
+<p>subsidiis magnis
+<sic>epicuri</sic> constabilitas</p>
+<p>declinare quis est qui
+<sic>possit cernere sese</sic>.</p>
+<p>
+<app>
+ <lem resp="#ego" type="emendation">
+ <surplus>καὶ</surplus>
+ </lem>
+ <note>deleui e Gal.P</note>
+</app>ὑπογίνονται</p>
+<p>Πάντων δὲ
+<app>
+ <lem resp="#ego" type="emendation">
+ <supplied>τῶν πυρετῶν</supplied>
+ </lem>
+ <note>addidi (
+ <foreign xml:lang="ar-Latn" type="transliterated"
+ subtype="arabtex">^gamI`a 'l-.hummayAti</foreign>
+ <ref target="#Gal">Gal.</ref>)</note>
+ <rdg source="#Gal">
+ <foreign xml:lang="ar-Latn" type="transliterated"
+ subtype="arabtex">^gamI`a 'l-.hummayAti</foreign>
+ </rdg>
+ <rdg wit="#V #I #R #H" source="#Lit #Erm #Sm" />
+</app>,</p>
+\end{minted}
+% \iffalse
+%</example>
+% \fi
%
% \section{Alignment of Parallel Texts}
% \label{sec:alignment-basic}
@@ -1578,7 +2345,7 @@ yesterday.
% accompanied by a translation into a modern language on the facing
% page. One can also imagine an edition of two classical texts or two
% different recensions of the same text, each of which provides
-% variants recorded in separate apparatus crititus, laid out on the
+% variants recorded in separate apparatus criticus, laid out on the
% left-hand pages, with one or more translations on the corresponding
% right-hand pages, and so forth.
%
@@ -1645,10 +2412,12 @@ yesterday.
% manuscripts and manuscript families above
% \vpageref{ref:caesar-bg-sigla}. As this document is not set for
% duplex printing, both texts have been put together on the same
-% page. However, the reader will find the full |.tex| source file
-% in \vref{sec:caesar-gw-tex} and \texttt{TEI xml} output in
+% page. However, the reader will find the full |.tex| source file in
+% \vref{sec:caesar-gw-tex} and \texttt{TEI xml} output in
% \vref{sec:caesar-gw-tei}. The corresponding PDF output is available
-% in \href{samples/Caesar_BG-6-13-1.pdf}{a separate file}:---
+% in \href{samples/Caesar_BG-6-13-1.pdf}{a separate file}:\footnote{On
+% the use of \cs{ekddiv} (ll.~3 and 20), see below
+% \vref{sec:ekddiv}.}---
%
% \captof{Caesar's \emph{Gallic War}, VI, 13.1}[\label{lst:caesar-bg}]
% \iffalse
@@ -1686,6 +2455,7 @@ yesterday.
%</example>
% \fi
%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \FormatDiv{2}{}{.}
% \begin{alignment}[flush,lcols=2,
@@ -1820,11 +2590,10 @@ yesterday.
% \item[\dbend] The colon at the end of line~3 closes the whole
% value of |text| and acts as a higher level separator.
% \end{enumerate}
-% \item Each name may be followed by a \enquote*{suboptional} argument
-% between square brackets which will then be used to insert
-% \texttt{TEI xml} attributes in the corresponding |<div>|
-% element. For example,
-% \iffalse
+% \item \label{it:lang-subopt} Each name may be followed by a
+% \enquote*{suboptional} argument between square brackets which will
+% then be used to insert \texttt{TEI xml} attributes in the
+% corresponding |<div>| element. For example, \iffalse
%<*example>
% \fi
\begin{minted}[escapeinside=++]{latex}
@@ -1959,12 +2728,11 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
% \label{sec:alignment-hooks}
% \DescribeMacro{\AtBeginEnvironment} Once environments corresponding
% to texts to be aligned have been defined, it is advisable to use the
-% \cs{AtBeginEnvironment}\marg{environment}\marg{code} command that is
-% provided by the \pkg{etoolbox} package\footnote{This package is
-% loaded by \pkg{ekdosis}.} to further adjust languages, hyphenation
-% rules, and/or fonts to be applied in each environment. To return to
-% the example provided above, once \cs{SetAlignment} has been
-% used, the languages can be set as follows:---
+% \cs{AtBeginEnvironment}\marg{environment}\marg{code} command to
+% further adjust languages, hyphenation rules, and/or fonts to be
+% applied in each environment. To return to the example provided
+% above, once \cs{SetAlignment} has been used, the languages can be
+% set as follows:---
%
% \iffalse
%<*example>
@@ -1978,7 +2746,135 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
%</example>
% \fi
%
-% \section{Laying Out the Apparatus Criticus }
+% \subsection{Laying Out Parallel Texts}
+% \label{sec:laying-out-parallel}
+% As \pkg{ekdosis} uses the \pkg{paracol} package for the layout of
+% parallel texts, most of the commands provided by this package
+% apply. In this respect, quite useful are the commands described in
+% sections 7.3 to 7.6 on pp.~15--21 of the documentation of this
+% package.\footcite{paracol}
+%
+% \danger It must be noted that all these commands are to be inserted
+% \emph{before} the \env{alignment} environments on which they are
+% supposed to operate.
+%
+% \subsubsection{Columns and Gutters}
+% \label{sec:columns-gutters}
+%
+% \paragraph{Column Ratio on Single Pages}
+% \DescribeMacro{\columnratio}
+% \cs{columnratio}\marg{r\textsubscript{1}, r\textsubscript{2}, \dots\
+% , r\textsubscript{n}}, where \emph{r\textsubscript{1}} refers to the
+% leftmost column, can be used to set the ratio of the columns in
+% relation to each other. Depending on the total number of columns on
+% which one wishes to operate, a comma-separated list of decimal
+% numbers is expected. As an example, \cs{columnratio}|{0.6}| will
+% instruct \pkg{ekdosis} to have the first column spread over 60~\% of
+% the total width of the text block, minus the total width of
+% intercolumnar gutters.
+%
+% \paragraph{Column Ratio on Facing Pages}
+% \cs{columnratio} accepts an optional argument which can be used as
+% described above to set the ratio of columns to be printed on
+% right-hand pages, like so: \cs{columnratio}\marg{r\textsubscript{1},
+% r\textsubscript{2}, \dots\ ,
+% r\textsubscript{n}}\oarg{r\textsubscript{1}, r\textsubscript{2},
+% \dots\ , r\textsubscript{n}}.
+%
+% \paragraph{Column Width on Single Pages}
+% \DescribeMacro{\setcolumnwidth}
+% \cs{setcolumnwidth}\marg{w\textsubscript{1}, w\textsubscript{2},
+% \dots\ , w\textsubscript{n}} operates the same way as
+% \cs{columnratio} described above, except that dimensions are
+% expected instead of ratios. As an example,
+% \cs{setcolumnwidth}|{1in}| will have the width of the first column
+% set to \unit[1]{in}.
+%
+% \paragraph{Gutter Width}
+% Each value accepted by \cs{setcolumnwidth} can be expressed as a
+% pair as in
+% \cs{setcolumnwidth}\marg{w\textsubscript{1}/g\textsubscript{1},
+% w\textsubscript{2}/g\textsubscript{2}, \dots\ ,
+% w\textsubscript{n}/g\textsubscript{n}} where the character |/| acts
+% as a separator, in which case \emph{g\textsubscript{x}} is used to
+% set the width of the gutter that follows the
+% \emph{x}\textsuperscript{th} column. As an example,
+% \cs{setcolumnwidth}|{1in/0.25in}| will print a
+% \unit[1]{in} first column, followed by a \unit[0.25]{in} gutter.
+%
+% \paragraph{Automatically Computed Values}
+% Widths of columns and widths of gutters can be replaced with
+% \cs{fill} and \cs{columnsep} respectively. As an example,
+% \cs{setcolumnwidth}|{\fill/0.25|\allowbreak|in}| will only operate
+% on the width that follows the first column, all remaining values
+% being computed automatically.
+%
+% \paragraph{Column and Gutter Width on Facing Pages}
+% Just like \cs{columnratio}, \cs{setcolumnwidth} accepts an optional
+% argument which can be used to set the width of columns and gutters
+% to be printed on right-hand pages, like so:
+% \cs{setcolumnwidth}\marg{w\textsubscript{1}, w\textsubscript{2},
+% \dots\ , w\textsubscript{n}}\oarg{w\textsubscript{1},
+% w\textsubscript{2}, \dots\ , w\textsubscript{n}} for columns only,
+% and \cs{setcolumnwidth}\marg{w\textsubscript{1}/g\textsubscript{1},
+% w\textsubscript{2}/g\textsubscript{2}, \dots\ ,
+% w\textsubscript{n}/g\textsubscript{n}}%
+% \oarg{w\textsubscript{1}/g\textsubscript{1},
+% w\textsubscript{2}/g\textsubscript{2}, \dots\ ,
+% w\textsubscript{n}/g\textsubscript{n}} for columns and gutters.
+%
+% \paragraph{Vertical Rules}
+% Vertical rules between columns can be drawn by setting the length of
+% the \LaTeX\ \cs{columnseprule} register to a non-zero value, like
+% so:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+\setlength{\columnseprule}{0.4pt}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \subsubsection{Marginal Notes}
+% \label{sec:marginal-notes}
+% By default, marginal notes that refer to the first column are
+% printed in the left margin, while notes that refer to subsequent
+% columns are printed in the right margin.
+%
+% \DescribeMacro{\marginparthreshold} \cs{marginparthreshold}\marg{n},
+% where \emph{n} is an integer, can be used to change the default
+% settings. This command instructs \pkg{ekdosis} that columns of text,
+% up to the \emph{n}\textsuperscript{th} column included, shall have
+% their marginal notes printed to the left. As a result, to take an
+% example, \cs{marginparthreshold}|{0}| will have all marginal notes
+% printed in the right margin. \cs{marginparthreshold} also accepts an
+% optional argument, namely
+% \cs{marginparthreshold}\allowbreak\marg{n}\oarg{n'}, that can be
+% used to set the threshold for columns printed in right-hand pages.
+%
+% \subsubsection{Regular Footnotes}
+% \label{sec:regular-footnotes}
+% \DescribeMacro{\footnotelayout} By default, regular footnotes are
+% printed at the bottom of the column on which they are
+% called. \cs{footnotelayout}\marg{key-letter} can be used to change
+% this setting. This command accepts as mandatory argument a
+% key-letter which can be either |c|, |p| or |m|. |c| means
+% \emph{column-wise} footnotes, which is the default value. |p| means
+% \emph{page-wise}: footnotes from all columns are gathered in a
+% single spanning block at the bottom of the page. Finally, |m| stands
+% for \emph{merge}, which means that all footnotes that are called on
+% a given page, including notes that are called outside the
+% \env{alignment} environment, are printed in a single spanning block
+% at the bottom of the page.
+%
+% \danger Regular footnotes are printed above the block of critical
+% notes. Places can be interchanged by just loading the \pkg{fnpos}
+% package in the preamble.\footcite{fnpos}
+%
+% \section{Laying Out the Apparatus Criticus}
% \label{sec:apparatus-layout}
%
% \subsection{General Hooks}
@@ -2041,11 +2937,14 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
% indentation of one em.
%
% \DescribeMacro{\SetEndApparatus}
+% \label{ref:setendapparatus}
% \cs{SetEndApparatus}\marg{characters} can be used to append
% \meta{characters} at the end of the apparatus block. By default,
-% nothing is appended. As an example of use, |\SetEndApparatus{.}|
-% will have a period printed at the end of the apparatus as it is
-% customary in some editions.
+% nothing is appended. \label{ref:ending-dot}As an example of use,
+% |\SetEndApparatus{.}| will have a period printed at the end of the
+% apparatus as it is customary in some
+% editions.\footnote{\label{fn:rm-dots}See also below
+% \vpageref{sec:superfluous-dots} on how to remove superfluous dots.}
%
% \DescribeMacro{\SetUnitDelimiter}
% \cs{SetUnitDelimiter}\marg{delimiter} can be used to set the
@@ -2086,7 +2985,8 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
% apparatus block.\\
% \DescribeOption{ehook} |ehook|$=$\meta{characters}
% \hfill\tcboxverb{Default: empty}\\
-% The characters to be appended at the end of the apparatus block.\\
+% The characters to be appended at the end of the apparatus
+% block.\footnote{See also n.~\vref{fn:rm-dots}.}\\
% \DescribeOption{rule} |rule|$=$\meta{command}\verb+|+|none|
% \hfill\tcboxverb{Default: \rule{0.4\columnwidth}{0.4pt}}\\
% As described above, |rule| is used to draw the separating line
@@ -2145,8 +3045,8 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
% preamble, this |default| layer must be included in the list of
% declared layers.\\
% \DescribeMacro{\SetDefaultApparatus}\label{ref:ekd-default-app}
-% \cs{SetDefaultApparatus}\marg{name} can be used at any point of
-% the document to change the default name that is used by
+% \cs{SetDefaultApparatus}\marg{name} can be used at any point of the
+% document to change the name to be used as the default one by
% \pkg{ekdosis}.
%
% \subsubsection{Declaring Additional Layers}
@@ -2189,7 +3089,7 @@ texts=latin[xml:lang="la"]+\textcolor{red}{;}+
% \DescribeOption{ehook}
% \DescribeOption{rule}
% \DescribeOption{norule}
-% With regard to layout, any declared layer inherits the defaut values
+% With regard to layout, any declared layer inherits the default values
% described above in \vref{sec:single-layer-app}. That said, as the
% optional argument of \cs{DeclareApparatus} accepts the exact same
% |key-value| options as \cs{SetApparatus} described
@@ -2322,9 +3222,9 @@ Some \app[type=rec2]{
%</example>
% \fi
%
-% At any rate, |type=default| or |type=rec1|, depending on what has
-% been chosen, must be used if the editor wishes to retain that
-% information in the \texttt{TEI xml} output file.
+% \danger At any rate, |type=default| or |type=rec1|, depending on
+% what has been chosen, must be used if the editor wishes to retain
+% that information in the \texttt{TEI xml} output file.
%
% \subsection{Other Notes for Comments, Sources or Testimonia}
% \label{ref:type-note}
@@ -2406,21 +3306,22 @@ Some \app[type=rec2]{
Asia; a language, copious, elastic, inviting self-explaining
combinations and independent development; lending itself alike to
daily life and imagination, to description and abstract thought.
- \note[type=fontium, labelb=61e, labele=62a, lem={They
+ \note[type=fontium, labelb=B61e, labele=B62a, lem={They
had... slave}]{Waitz, \emph{Deutsche Verfassungs Geschichte},
i. 86} They had a class of nobles, but their tongue knew no word
- for slave.\linelabel{62a}\footnote{George Bancroft, \emph{History of
- the United States from the Discovery of the American Continent},
- II.61--2.}
+ for slave.\linelabel{B62a}\footnote{George Bancroft, \emph{History
+ of the United States from the Discovery of the American
+ Continent}, II.61--2.}
\end{ekdosis}
\end{minted}
% \iffalse
%</example>
% \fi
%
-% \needspace{5\baselineskip}
% PDF output:---
% \medskip
+%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -2430,10 +3331,10 @@ Some \app[type=rec2]{
% self-explaining combinations and independent development;
% lending itself alike to daily life and imagination, to
% description and abstract thought. \note[type=fontium,
-% labelb=61e, labele=62a, lem={They had... slave}]{Waitz,
+% labelb=B61e, labele=B62a, lem={They had... slave}]{Waitz,
% \emph{Deutsche Verfassungs Geschichte}, i. 86} They had a class
% of nobles, but their tongue knew no word for
-% slave.\linelabel{62a}\footnote{George Bancroft, \emph{History of
+% slave.\linelabel{B62a}\footnote{George Bancroft, \emph{History of
% the United States from the Discovery of the American Continent},
% II.61--2.}
% \end{specimen}
@@ -2451,11 +3352,11 @@ travels from central Asia; a language, copious, elastic,
inviting self-explaining combinations and independent
development; lending itself alike to daily life and
imagination, to description and abstract thought.
-<note type="fontium" target="#range(right(61e),left(62a))">Waitz,
+<note type="fontium" target="#range(right(B61e),left(B62a))">Waitz,
<emph>Deutsche Verfassungs Geschichte</emph>, i. 86</note>
-<anchor xml:id="61e" />They had a class of nobles, but
+<anchor xml:id="B61e" />They had a class of nobles, but
their tongue knew no word for slave.
-<anchor xml:id="#62a" />
+<anchor xml:id="B62a" />
<note place="bottom">George Bancroft,
<emph>History of the United States from the Discovery of
the American Continent</emph>, II.61--2.</note></p>
@@ -2488,9 +3389,10 @@ text to demonstrate how to insert a note in the argument of the
%</example>
% \fi
%
-% \needspace{5\baselineskip}
% PDF output:---
% \medskip
+%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -2641,7 +3543,7 @@ argument of the
% apparatus, as described in \vref{sec:single-layer-app}, can be
% typeset within the Arabic environment that is provided by
% \pkg{polyglossia}. Unfortunately, the same cannot be said for
-% multi-layer apparatus.
+% multiple-layer apparatus.
%
% Whether \pkg{babel} or \pkg{polyglossia} is used, \pkg{ekdosis}
% automatically applies the current language to the entries of the
@@ -2650,7 +3552,9 @@ argument of the
% \pkg{polyglossia} can use the same language switching commands as
% \pkg{babel},\footcite[See][3.2 \pno~14]{polyglossia} the general
% advice given above in \vref{sec:alignment-hooks} applies in all
-% cases.
+% cases. As regards setting languages in the \texttt{TEI xml} output
+% file, the reader is invited to refer to point \vref{it:lang-subopt}
+% and \vref{sec:teixml-output}.
%
% \subsection{Languages Written From Right to Left}
% \label{sec:rtl-languages}
@@ -2808,9 +3712,10 @@ argument of the
% \vref{sec:multilayer-apparatus} (multiple-layer apparatus
% criticus).}
%
-% \needspace{5\baselineskip}
% The PDF output with left-to-right apparatus criticus follows:---
% \medskip
+%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -2826,7 +3731,10 @@ argument of the
% \needspace{5\baselineskip}
% And here follows the PDF output with right-to-left apparatus
% criticus:---
-% \medskip \resetlinenumber
+% \medskip
+%
+% \needspace{7\baselineskip}
+% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
% \begin{arab}[fullvoc]
@@ -2867,7 +3775,7 @@ argument of the
% Preamble:
% load ekdosis and ask for TEI xml output:
\usepackage[teiexport]{ekdosis}
-% load arabluatex and request a LaTeX ouput with Unicode Arabic:
+% load arabluatex and request a LaTeX output with Unicode Arabic:
\usepackage[export,fullvoc]{arabluatex}
% document:
@@ -2888,9 +3796,11 @@ argument of the
%</example>
% \fi
%
-% \needspace{7\baselineskip}
% The PDF output with left-to-right apparatus criticus is of course
% the same as above:---
+% \medskip
+%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -3015,12 +3925,13 @@ subtype="arabtex">'inna 'abI kAna mina
% Variant readings can be inserted in headings. In this case, the
% optional argument of the \LaTeX\ sectional command must naturally be
% used to prevent variants from going into headers, footers or the
-% table of contents, like so:---
+% table of contents, like so:\footnote{On the use of \texttt{egomute}
+% (l.~13), see above \vref{it:egomute}.}---
%
% \iffalse
%<*example>
% \fi
-\begin{minted}[linenos=false]{latex}
+\begin{minted}{latex}
% Preamble:
\usepackage[teiexport=tidy, divs=latex]{ekdosis}
\MkBodyDivs{chapter}{section}{}{}{}{}
@@ -3031,7 +3942,11 @@ subtype="arabtex">'inna 'abI kAna mina
\lem[wit={I,R,H}]{βιβλίον δεύτερον}
\rdg[wit=V]{λόγος β’}}}
-\section{<Τμῆμα πρῶτον>}
+\section[Τμῆμα πρῶτον]{
+ \app{
+ \lem[resp=egomute, type=emendation, nosep,
+ post=suppleui]{\supplied{Τμῆμα πρῶτον}}
+ }}
Ἄνθρακες θερινοὶ ἐν Κραννῶνι· [...]
\end{minted}
% \iffalse
@@ -3051,7 +3966,12 @@ subtype="arabtex">'inna 'abI kAna mina
<rdg wit="#V">λόγος β’</rdg>
</app></head>
<div2 type="section">
- <head>&lt;Τμῆμα πρῶτον&gt;</head>
+ <head>
+ <app>
+ <lem><supplied resp="#ego" type="emendation">Τμῆμα
+ πρῶτον</supplied></lem>
+ </app>
+ </head>
<p>Ἄνθρακες θερινοὶ ἐν Κραννῶνι· [...]</p>
</div2>
</div1>
@@ -3104,7 +4024,7 @@ subtype="arabtex">'inna 'abI kAna mina
% indicate the depth of the division within the hierarchy, the largest
% being |1| and the smallest being |9|.\\
% \DescribeOption{toc}
-% |toc|$=$\verb+|book|part|chapter|section|subsection|subsubsection|paragraph+\\
+% |toc|$=$\verb+book|part|chapter|section|subsection|subsubsection|paragraph|+\\
% |subparagraph|\hfill\tcboxverb{Default: not set}\\
% If |toc| be set, the title of the division goes into the table of
% contents at the hierarchic level that is specified as value.
@@ -3134,7 +4054,7 @@ subtype="arabtex">'inna 'abI kAna mina
% To elaborate on the example provided above in \vref{sec:latex-divs},
% here follows how the first three hierarchical levels could be
% formatted as un-numbered divisions:---
-%
+%
% \iffalse
%<*example>
% \fi
@@ -3157,7 +4077,10 @@ subtype="arabtex">'inna 'abI kAna mina
}
\ekddiv{
- head={<Τμῆμα πρῶτον>},
+ head={\app{
+ \lem[resp=egomute, post=suppleui,
+ type=emendation]{\supplied{Τμῆμα πρῶτον}}
+ \rdg[wit=codd, alt=om.]{}}},
type=section,
depth=2,
n=II.1
@@ -3171,10 +4094,10 @@ subtype="arabtex">'inna 'abI kAna mina
%</example>
% \fi
%
-% \needspace{5\baselineskip}
% PDF output:---
% \medskip
%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \FormatDiv{1}{\begin{center}\Large}{\end{center}}
% \FormatDiv{2}{\begin{center}\large}{\end{center}}
@@ -3194,7 +4117,15 @@ subtype="arabtex">'inna 'abI kAna mina
% depth=1,
% n=II}
%
-% \ekddiv{head={<Τμῆμα πρῶτον>}, type=section, depth=2, n=II.1}
+% \ekddiv{
+% head={\app{
+% \lem[resp=egomute, post=suppleui,
+% type=emendation]{\supplied{Τμῆμα πρῶτον}}
+% \rdg[wit=hcodd, alt=om.]{}}},
+% type=section,
+% depth=2,
+% n=II.1
+% }
%
% \ekddiv{head=1, type=paragraph, depth=3, n=II.1.1} Ἄνθρακες
% θερινοὶ ἐν Κραννῶνι· [...]
@@ -3215,7 +4146,14 @@ subtype="arabtex">'inna 'abI kAna mina
<rdg wit="#V">λόγος β’</rdg>
</app></head>
<div type="section" n="II.1">
- <head>&lt;Τμῆμα πρῶτον&gt;</head>
+ <head>
+ <app>
+ <lem resp="#ego" type="emendation">
+ <supplied>Τμῆμα πρῶτον</supplied>
+ </lem>
+ <rdg wit="#V #I #R #H" />
+ </app>
+ </head>
<div type="paragraph" n="II.1.1">
<head>1</head>
<p>Ἄνθρακες θερινοὶ ἐν Κραννῶνι· [...]</p>
@@ -3237,11 +4175,11 @@ subtype="arabtex">'inna 'abI kAna mina
% the apparatus criticus does not show. Instead, \pkg{ekdosis}
% produces an auxiliary file named \cs{jobname}|.ekd| in which all the
% entries of the apparatus criticus are collected. Then, on the second
-% run a test is performed on this auxliary file to determine whether
+% run a test is performed on this auxiliary file to determine whether
% there are entries\---and if so, which ones\---to be printed on the
% current page. At the same time, references to the line numbers are
-% updated if necessary. Then, on the third run, the apparatus criticus
-% is printed.
+% updated if necessary. Finally, on the third run, the apparatus
+% criticus is printed.
%
% Of course, every change made to the input may similarly require
% \hologo{LuaLaTeX} to be run three more times to get everything to
@@ -3269,7 +4207,7 @@ subtype="arabtex">'inna 'abI kAna mina
% a good way to get out of the vicious circle. And surely, if only a
% few pages are at stake, this is the way to go. However,
% \cs{pagebreak} commands should only be inserted when the whole
-% edition text is ready for any subtantial change in the preceding
+% edition text is ready for any substantial change in the preceding
% pages may result in pages that break just after they begin.
%
% Another way\---should the edition text fall into the vicious circle
@@ -3277,16 +4215,16 @@ subtype="arabtex">'inna 'abI kAna mina
% layer of apparatus criticus may accept as described above
% \vpageref{ref:maxentries}. As a result, \pkg{ekdosis} will take care
% of inserting automatic breakpoints between pages whenever the number
-% of entries on a given page reaches the value set as |maxnumber|.
+% of entries on a given page reaches the value set as |maxentries|.
%
-% |maxnumber| must not be too small: otherwise offensive to look at
+% |maxentries| must not be too small: otherwise offensive to look at
% vertical spaces may come between the edition text and the apparatus
-% criticus. Conversely, |maxnumber| must not be too big: otherwise,
+% criticus. Conversely, |maxentries| must not be too big: otherwise,
% should entries overflow on a given page, the edition text and the
-% apparatus criticus may clash. As said above, a couple of clashes can
-% be managed with a couple of manually inserted page breaks. But if
-% there are too many ot them, it is a good indication that the
-% selected value of |maxentries| is too to high.
+% apparatus criticus may clash again. As said above, a couple of
+% clashes can be managed with a couple of manually inserted page
+% breaks. But if there are too many of them, it is a good indication
+% that the selected value of |maxentries| is too to high.
%
% Complex edition texts do have a magic number. An advisable way to
% figure it out would be to start from a sample of only a few pages,
@@ -3294,6 +4232,124 @@ subtype="arabtex">'inna 'abI kAna mina
% pages would need to be compiled, the magic number should emerge
% quite rapidly.
%
+% \paragraph{Adding and Removing Entries}
+% \DescribeMacro{\addentries} \cs{addentries}\oarg{layer}\marg{n}
+% \newfeature[v1.1]\\
+% If |maxentries| be set for a given layer of critical notes,
+% \cs{addentries}\oarg{layer}\marg{n}, where \meta{n} is an integer,
+% can be used to add \meta{n} to\---or remove it from if \meta{n} be
+% negative\---the number of accepted entries on the current
+% page. \cs{addentries} operates on the default layer of notes, but
+% any other declared layer can be specified in the optional argument
+% of the command.
+%
+% \danger Of course, \cs{addentries} must be issued before the
+% number of entries on a given page has reached the value set as
+% |maxentries|.
+%
+% Once a sensible value for |maxentries| has been found,
+% \cs{addentries} can further be used with a positive integer to allow
+% for more entries and more lines on some pages so that offending
+% vertical spaces are decreased. Conversely, \cs{addentries} with a
+% negative integer will remove entries on pages where there are too
+% many of them and \pkg{ekdosis} still oscillates between different
+% sets of page decisions.
+%
+% \subsection{Variae Quaestiones}
+% \label{sec:variae-quaestiones}
+% This section is about issues that are not strictly speaking part of
+% the documentation of \pkg{ekdosis} but may nevertheless
+% circumstantially arise.
+%
+% \paragraph{Superfluous Dots}
+% \label{sec:superfluous-dots}
+% As said above \vpageref{ref:ending-dot}, it is customary in some
+% editions to have a full stop printed at the end of the apparatus
+% criticus. \pkg{ekdosis} provides specific commands to achieve this
+% in a straightforward way, such as \cs{SetEndApparatus} and the
+% |ehook| optional argument of \cs{SetApparatus} and
+% \cs{DeclareApparatus}.\footnote{See above
+% \vpagerefrange{ref:setendapparatus}{sec:declaring-layers}.} However,
+% if the last word of the apparatus criticus on a given page be an
+% abbreviation followed by a dot, such a setting will have two dots
+% printed at the end of the apparatus instead of one. The solution is
+% to define a command to have a dot printed only if it is not followed
+% by a dot, and append this command to the abbreviated form of the
+% word, like so:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}{latex}
+% Preamble:
+\usepackage{xspace}
+\usepackage{ekdosis}
+
+\makeatletter
+\newcommand{\ekddot}{%
+ \ltx@ifnextchar{.}{\xspace}{.\xspace}}
+\makeatother
+
+\DeclareApparatus{default}[ehook=.]
+\DeclareScholar{Erm}{Erm\ekddot}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% \begin{remarks}
+% \item Line~2: The \pkg{xspace} package is needed for \cs{xspace} is
+% used by the \cs{ekddot} command that is defined at l.~6.
+% \item Line~7: \cs{ltx@ifnextchar} is part of the \pkg{ltxcmds}
+% package which is loaded by \pkg{ekdosis}. As this command uses a
+% private control sequence, it must be found within
+% \cs{makeatletter} \dots\ \cs{makeatother}.
+% \item Line~10: \cs{ekddot} will only work with multiple-layer
+% apparatus criticus. Therefore, \cs{DeclareAppa{\allowbreak}ratus}
+% must be used even if only one layer of critical notes is needed.
+% \end{remarks}
+%
+% \paragraph{Backup of Essential Files}
+% Each time the |.tex| source file is compiled, \pkg{ekdosis} reads
+% the |.aux| corresponding \LaTeX\ auxiliary file and its own |.ekd|
+% auxiliary file so as to process labels and collect entries of the
+% apparatus criticus. If for whatever reason\---e.g.\ some unknown
+% command has been inserted\---the compilation freezes and so must be
+% aborted, it may happen that most of the edition text has to be
+% reconstructed page after page. For large and complex editions, this
+% makes advisable to have current versions of those files backed up
+% each time a new compilation begins, which can be achieved by
+% inserting the following lines before the line that loads the
+% document class:---
+%
+% \iffalse
+%<*example>
+% \fi
+\begin{minted}[linenos=false]{latex}
+\RequirePackage{verbatimcopy}
+\IfFileExists{\jobname.aux}{%
+ \OldVerbatimCopy{\jobname.aux}{\jobname.aux.bak}}{}
+\IfFileExists{\jobname.ekd}{%
+ \OldVerbatimCopy{\jobname.ekd}{\jobname.ekd.bak}}{}
+\documentclass{book}
+\end{minted}
+% \iffalse
+%</example>
+% \fi
+%
+% This way, both |.aux| and |.ekd| files can be recovered from
+% |.aux.bak| and |.ekd.bak| just after the compilation has been
+% aborted. Should this be needed, one must proceed carefully as
+% follows:---
+% \begin{enumerate}
+% \item Just after the compilation has been aborted, move both
+% |aux.bak| and |ekd.bak| files to a safe place.
+% \item Remove or correct the offending command or lines that broke
+% the compilation and make sure that the issue is solved.
+% \item Restore the |.aux| and |.ekd| files from |aux.bak| and
+% |.ekd.bak| and resume work where it was left off.
+% \end{enumerate}
+%
% \section{\texttt{TEI xml} Output}
% \label{sec:teixml-output}
% Several examples of \texttt{TEI xml} output have been provided
@@ -3311,10 +4367,10 @@ subtype="arabtex">'inna 'abI kAna mina
% language (Latin, English and French) is to be found in two different
% places, namely for \texttt{TEI xml} output (ll.~21--3) and for PDF
% output through \LaTeX\ (ll.~27--9). Finally, it provides examples of
-% declaring witnesses, hands, scholars and shorthands (ll.~31--60). As
-% to the document itself, it shows how to lay out a conspectus
-% siglorum in a table (ll.~64--80), before giving detailed examples of
-% how the edition text is entered (ll.~85--101) and sectional commands
+% declaring witnesses, hands and shorthands (ll.~31--60). As to the
+% document itself, it shows how to lay out a conspectus siglorum in a
+% table (ll.~64--80), before giving detailed examples of how the
+% edition text is entered (ll.~85--101) and sectional commands
% provided by \pkg{ekdosis} are used (ll.~86, 103 and
% 110).\footnote{The PDF output is available as
% \href{samples/Caesar_BG-6-13-1.pdf}{a separate file}.}
@@ -3356,7 +4412,7 @@ subtype="arabtex">'inna 'abI kAna mina
% The \texttt{TEI} validator is here:
% \url{http://teibyexample.com/xquery/TBEvalidator.xq}.} As for
% \pkg{ekdosis}, it is designed to produce on request, in addition to
-% an edition in print, a \texttt{TEI xml} compliant output file. That
+% an edition in print, a \texttt{TEI xml}-compliant output file. That
% said, one must keep in mind that the \LaTeX\ packages that are part
% of {\TeX}Live can be counted in thousands, and the commands they
% provide in tens of thousands. There may even be grounds in asserting
@@ -3383,7 +4439,7 @@ subtype="arabtex">'inna 'abI kAna mina
% are marked in \LaTeX\ with \enquote{open} commands such as
% \cs{chapter} or \cs{section} with no clear indication where the
% closure of divisions occurs, contrary to \texttt{TEI xml} markup
-% with numered or un-numbered |<div>| elements allowed to nest
+% with numbered or un-numbered |<div>| elements allowed to nest
% recursively. As regards running paragraphs of text, the situation is
% even worse than in the latter case, as the following simple example
% shows:---
@@ -3434,29 +4490,6 @@ subtype="arabtex">'inna 'abI kAna mina
% \textsf{Lua} functions which involve string matching (both forward
% and reverse matching) and recursions.
%
-% \paragraph{The \texttt{xml:id} Attribute}
-% As a general rule, the |xml:id| global attribute must be unique for
-% the element that bears the attribute. Furthermore, it must begin
-% with a letter or an underscore and contain no characters other that
-% letters, digits, hyphens underscores and full stops. \pkg{ekdosis}
-% issues a warning when it finds that any \meta{unique id} of
-% \meta{unique label} expected in the first argument of
-% \cs{DeclareWitness}, \cs{DeclareHand} or \cs{DeclareScholar} is not
-% unique or breaks the rules just described, but does not prevent the
-% |.tex| source file from compiling. Instead, it prints the string
-% |<??>| in place of the expected formatted siglum so that the error
-% in the |.tex| source file can be easily spotted and corrected.
-%
-% \danger As the \meta{unique id} declared with \cs{DeclareShorthand}
-% is not to be exported in the \texttt{TEI xml} outputfile,
-% \pkg{ekdosis} checks neither its uniqueness nor its validness.
-%
-% \danger It must be noted that \LaTeX\ labels that are provided in
-% commands such as \cs{label}, \cs{cite} and the like must also be
-% unique in the document. As \LaTeX\ will issue warnings if it finds
-% duplicates, \cs{ekdosis} does not check their uniqueness but will
-% issue warnings if such labels contain invalid strings.
-%
% \paragraph{\texttt{TEI xml} Export Settings}
% \label{ref:setteixmlexport}
% \DescribeMacro{\SetTEIxmlExport} \cs{SetTEIxmlExport}\marg{csv list
@@ -3488,6 +4521,30 @@ subtype="arabtex">'inna 'abI kAna mina
% paragraphs within |<p>| elements when |autopar| has been set to
% |false| by means of \cs{SetTEIxmlExport} described above.
%
+% \paragraph{The \texttt{xml:id} Attribute}
+% As a general rule, the |xml:id| global attribute must be unique for
+% the element that bears the attribute. Furthermore, it must begin
+% with a letter or an underscore and contain no characters other that
+% letters, digits, hyphens, underscores and full stops. \pkg{ekdosis}
+% issues a warning when it finds that any \meta{unique id} of
+% \meta{unique label} expected in the first argument of
+% \cs{DeclareWitness}, \cs{DeclareHand}, \cs{DeclareSource} or
+% \cs{DeclareScholar} is not unique or breaks the rules just
+% described, but does not prevent the |.tex| source file from
+% compiling. Instead, it prints the string |<??>| in place of the
+% expected formatted siglum so that the error in the |.tex| source
+% file can be easily spotted and corrected.
+%
+% \danger As the \meta{unique id} declared with \cs{DeclareShorthand}
+% is not to be exported in the \texttt{TEI xml} output file,
+% \pkg{ekdosis} checks neither its uniqueness nor its validness.
+%
+% \danger It must be noted that \LaTeX\ labels that are provided in
+% commands such as \cs{label}, \cs{cite} and the like must also be
+% unique in the document. As \LaTeX\ will issue warnings if it finds
+% duplicates, \cs{ekdosis} does not check their uniqueness but will
+% issue warnings if such labels contain invalid strings.
+%
% \subsection{Routine \LaTeX\ Commands and Environments}
% \label{sec:routine-cmds}
% The list of \LaTeX\ commands known by \pkg{ekdosis} at the time of
@@ -3509,6 +4566,7 @@ subtype="arabtex">'inna 'abI kAna mina
% \cs{textsc}|{}| & |<hi rend="smallcaps"></hi>| \\
% \cs{textsf}|{}| & |<hi rend="sf"></hi>| \\
% \cs{footnote}|{}| & |<note place="bottom"></note>| \\
+% \cs{marginpar}|{}| & |<note place="margin"></note>| \\
% \cs{enquote}\meta{*}|{}| & |<quote></quote>| \\
% \cs{label}|{label}| & |<anchor xml:id="label"/>| \\
% \cs{linelabel}|{label}| & |<anchor xml:id="label"/>| \\
@@ -3517,7 +4575,7 @@ subtype="arabtex">'inna 'abI kAna mina
% \cs{vref}|{label}| & |<ptr ="#label"/>| \\
% \cs{vpageref}|{label}| & |<ptr ="#label"/>| \\
% \cs{pagebreak}\meta{\oarg{1-4}} & no output \\
-% \cs{mbox}|{}| & no output \\
+% \cs{mbox}\marg{text} & \meta{text} \\
% \bottomrule
% \end{xltabular}
%
@@ -3610,7 +4668,7 @@ many mathematical writings and to the sense of
% \texttt{TEI} element it is to be converted into and any additional
% \texttt{xml} attributes to be appended to the opening \texttt{TEI}
% element. For example, the \cs{sidenote} command that is provided by
-% the \cs{sidenotes} package can be processed like so:---
+% the \pkg{sidenotes} package can be processed like so:---
%
% \iffalse
%<*example>
@@ -3650,13 +4708,16 @@ many mathematical writings and to the sense of
%
% Even more subtly, provided that the code |#STC| points to some more
% information identifying the agency concerned:\footnote{At the time
-% of writing, \enquote*{scholars} can be declared with
-% \cs{DeclareScholar} as described above
-% \vpageref{ref:declare-scholar}. Then the unique ID used in the first
-% argument of this command can point to the list of references
-% inserted by \pkg{ekdosis} in the back matter section of the
-% \texttt{TEI} ouput file. See below \vref{sec:references-cited-works}
-% for more information on how to do this.}---
+% of writing, \enquote*{sources} can be declared with
+% \cs{DeclareSource} as described above
+% \vpageref{ref:declare-source}. Then the unique identifier used in
+% the first argument of this command can point to the list of
+% references inserted by \pkg{ekdosis} in the back matter section of
+% the \texttt{TEI} output file. See below
+% \vref{sec:references-cited-works} for more information on how to do
+% this. Scholars can also be referred to as individuals by means of
+% the \cs{DeclareScholar} command. See above
+% \vpageref{ref:declare-source}.}---
%
% \iffalse
%<*example>
@@ -3754,8 +4815,8 @@ many mathematical writings and to the sense of
%</example>
% \fi
%
-% \DescribeMacro{\TeXtoTEIPatt}
-% \cs{TeXtoTEIPatt}\marg{\TeX\ pattern}\marg{TEI pattern}\\
+% \DescribeMacro{\TeXtoTEIPat}
+% \cs{TeXtoTEIPat}\marg{\TeX\ pattern}\marg{TEI pattern}\\
% Finally, this more flexible\---and more delicate to
% handle\---command uses pattern matching to instruct \pkg{ekdosis}
% how to convert \hologo{(La)TeX} commands into \texttt{TEI}
@@ -3780,7 +4841,7 @@ many mathematical writings and to the sense of
%<*example>
% \fi
\begin{minted}[linenos=false]{latex}
-\TeXtoTEIPatt{\textcolor {#1}{#2}}{<hi rend="#1">#2</hi>}
+\TeXtoTEIPat{\textcolor␣{#1}{#2}}{<hi rend="#1">#2</hi>}
Sample text with a \textcolor{red}{word} in red.
\end{minted}
@@ -3841,12 +4902,12 @@ Sample text with a \textcolor{red}{word} in red.
%
% \begin{remarks}
% \item Lines~2--3 define a basic environment meant to contain
-% indivivual speeches and a command to hold the name of the
+% individual speeches and a command to hold the name of the
% speaker. This name is printed in bold face and followed by a new
% paragraph in the PDF output.
% \item Line~4 instructs \pkg{ekdosis} to convert \env{speech} \LaTeX\
% environments into |<sp>| \texttt{TEI xml} elements.
-% \item Line~6 disables the |autopar| algorithm that \cs{ekdosis}
+% \item Line~6 disables the |autopar| algorithm that \pkg{ekdosis}
% provides by default for running paragraphs of text. As a
% consequence, \env{ekdpar} is used to mark the paragraphs.
% \end{remarks}
@@ -3854,6 +4915,7 @@ Sample text with a \textcolor{red}{word} in red.
% PDF output:---
% \medskip
%
+% \needspace{7\baselineskip}
% \SetTEIxmlExport{autopar=false}
% \begingroup
% \newenvironment{speech}{\par\selectlanguage{greek}}{\par}
@@ -3911,18 +4973,19 @@ Sample text with a \textcolor{red}{word} in red.
% the |<listWit>| element of the \texttt{TEI} header, whereas the
% latter is to be found within the |<listBibl>| element.
%
-% \DescribeMacro{\SetxmlBibResource}
-% \cs{SetxmlBibResource}\marg{basename} is a preamble-only command. If
-% a base name for a \texttt{TEI xml} compliant bibliographical
-% database be provided, \pkg{ekdosis} will use it and insert formatted
-% data in the back matter section of its own \texttt{TEI xml} output
-% file, as |<biblStruct>| elements within a |listBibl| section.
+% \DescribeMacro{\AddxmlBibResource}
+% \cs{AddxmlBibResource}\marg{basename or name.xml} is a preamble-only
+% command. If a base name (either suffixed with |.xml| or not) for a
+% \texttt{TEI xml}-compliant bibliographical database be provided,
+% \pkg{ekdosis} will use it and insert formatted data in the back
+% matter section of its own \texttt{TEI xml} output file, as
+% |<biblStruct>| elements within a |listBibl| section.
%
% As an example, the following Bib\hologo{(La)TeX} entry and its
-% \texttt{TEI} equivalent follow:\footnote{\label{fn:zotero}To the
-% author's knowledge, \textsf{Zotero} (\url{https://www.zotero.org})
-% provides excellent \texttt{TEI xml} output from Bib\hologo{(La)TeX}
-% input files.}---
+% \texttt{TEI} equivalent are provided:\footnote{\label{fn:zotero}To
+% the author's knowledge, \textsf{Zotero}
+% (\url{https://www.zotero.org}) provides excellent \texttt{TEI xml}
+% output from Bib\hologo{(La)TeX} input files.}---
%
% \iffalse
%<*example>
@@ -3975,7 +5038,7 @@ Sample text with a \textcolor{red}{word} in red.
% the Bib\hologo{(La)TeX} file (l.~1) and an |xml:id| in the
% \texttt{TEI} file (l.~3). This same label must be used again in the
% preamble of the |.tex| source file to declare Arnold Drakenborch as a
-% scholar,\footnote{See above \vpageref{ref:declare-scholar}.} like
+% source,\footnote{See above \vpageref{ref:declare-source}.} like
% so:---
%
% \iffalse
@@ -3983,10 +5046,10 @@ Sample text with a \textcolor{red}{word} in red.
% \fi
\begin{minted}{latex}
% Use 'bibl.xml' as a TEI xml bibliographical database:
-\SetxmlBibResource{bibl} % 'bibl' is the basename of 'bibl.xml'
+\AddxmlBibResource{bibdata.xml}
-% Declare A. Drakenborch as scholar:
-\DeclareScholar{Drak}{\emph{Drakenborch}}
+% Declare A. Drakenborch as source:
+\DeclareSource{Drak}{\emph{Drakenborch}}
\end{minted}
% \iffalse
%</example>
@@ -4002,19 +5065,24 @@ Sample text with a \textcolor{red}{word} in red.
% \fi
\begin{minted}{latex}
% Preamble:
+\usepackage[style=oxnotes]{biblatex}
+\addbibresource{bibdata.bib}
+
\usepackage[teiexport=tidy]{ekdosis}
+% basename of the .xml bibliographical database:
+\AddxmlBibResource{bibdata.xml}
+
% Witnesses:
\DeclareWitness{L}{L}{Laurentianus, plut, XXXVII, cod. 16}[
origDate=s. XV]
% Other witnesses [...]
-% Scholars:
-\DeclareScholar{Drak}{\emph{Drakenborch}}
-% Other scholars [...]
-
-% basename of the .xml bibliographical database:
-\SetxmlBibResource{bibl}
+% Sources:
+\DeclareSource{Drak}{\emph{Drakenborch}}
+% Alternatively, use BibLaTeX for the rendition:
+% \DeclareSource{Drak}{\citename{Drak}{editor}}
+% Other sources [...]
% Document:
\begin{ekdosis}
@@ -4022,10 +5090,10 @@ Sample text with a \textcolor{red}{word} in red.
Sed uos, quorum oculos atque ora humentia uidi,\\
uertere cum consul terga et remeare iuberet,\\
\app{
- \lem[wit=Drak]{ne morem}
+ \lem[source=Drak, type=emendation]{ne morem}
\rdg[wit={L, F}]{me morem}
\rdg[wit={O, V}]{memorem}
- } et pugnae signum exspectate petendae:
+ } et pugnae signum exspectate petendae:\\
\end{ekdverse}
\end{ekdosis}
\end{minted}
@@ -4033,22 +5101,22 @@ Sample text with a \textcolor{red}{word} in red.
%</example>
% \fi
%
-% \needspace{7\baselineskip}
% PDF output:---
% \medskip
%
+% \needspace{7\baselineskip}
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
-% \resetlinenumber[30]\rightlinenumbers
-% \setlength{\linenumbersep}{-1.5in}
+% \setverselinenums{30}{0}
+% \setlength{\vrightskip}{-1.5in}
% \begin{specimen}
% \begin{ekdverse}
% Sed uos, quorum oculos atque ora humentia uidi,\\
% uertere cum consul terga et remeare iuberet,\\
% \app{
-% \lem[wit=sDrak]{ne morem}
+% \lem[source=sDrak, type=emendation]{ne morem}
% \rdg[wit={sL, sF}]{me morem}
% \rdg[wit={sO, sV}]{memorem}
-% } et pugnae signum exspectate petendae:
+% } et pugnae signum exspectate petendae:\\
% \end{ekdverse}
% \end{specimen}
% \end{alignment}
@@ -4067,7 +5135,7 @@ Sample text with a \textcolor{red}{word} in red.
<l>uertere cum consul terga et remeare iuberet,</l>
<l>
<app>
- <lem wit="#Drak">ne morem</lem>
+ <lem source="#Drak" type="emendation">ne morem</lem>
<rdg wit="#L #F">me morem</rdg>
<rdg wit="#O #V">memorem</rdg>
</app>et pugnae signum exspectate petendae:</l>
@@ -4106,18 +5174,18 @@ Sample text with a \textcolor{red}{word} in red.
% \pkg{ekdosis} can also convert into \texttt{TEI xml} references to
% cited works. Depending on the optional arguments used in the
% citation command, references will be converted into |<ptr>| or
-% |<ref>| elements with the appropriate ID supplied by means of the
-% |target| attribute.
+% |<ref>| elements with the appropriate identifier supplied by means
+% of the |target| attribute.
%
% Of course, for this mechanism to work, Bib\TeX\ or Bib\LaTeX\ must
% be used and connected to some |.bib| bibliographical database
% file. Additionally, this |.bib| file must have been converted into a
-% \texttt{TEI xml} compliant file where all the Bib\hologo{(La)TeX}
+% \texttt{TEI xml}-compliant file where all the Bib\hologo{(La)TeX}
% entries that are used in the document are found within
% |<biblStruct>| elements.\footnote{See above n.~\vref{fn:zotero} for
% information on how to do this.} Finally, this |.xml| bibliographical
% database must have been connected to the |.tex| source file by means
-% of \cs{SetxmlBibResource} described above in
+% of \cs{AddxmlBibResource} described above in
% \vref{sec:references-cited-works}.
%
% As an example, the following |sample.bib| file is used:---
@@ -4175,7 +5243,7 @@ Sample text with a \textcolor{red}{word} in red.
% \fi
%
% Once both files have been prepared, inserting references and
-% exporting them into the \texttt{TEI xml} ouput file can be achieved
+% exporting them into the \texttt{TEI xml} output file can be achieved
% in a straightforward way. (The full |sample.tex| is provided
% below.)---
%
@@ -4186,8 +5254,7 @@ Sample text with a \textcolor{red}{word} in red.
\documentclass{article}
\usepackage[teiexport=tidy]{ekdosis}
-\SetxmlBibResource{sample} % base name supplied here, without the
- % extension
+\AddxmlBibResource{sample.xml}
\usepackage[style=oxnotes]{biblatex}
\addbibresource{sample.bib}
@@ -4205,6 +5272,7 @@ Sample text with a \textcolor{red}{word} in red.
% PDF output:---
% \medskip
%
+% \needspace{7\baselineskip}
% \resetlinenumber
% \begin{alignment}[flush,tcols=1,texts=specimen,apparatus=specimen]
% \begin{specimen}
@@ -4213,7 +5281,7 @@ Sample text with a \textcolor{red}{word} in red.
% \end{alignment}
%
% \medskip
-% \texttt{TEI xml} ouput narrowed down to the contents of the |<text>|
+% \texttt{TEI xml} output narrowed down to the contents of the |<text>|
% element:---
%
% \iffalse
@@ -4284,14 +5352,18 @@ Sample text with a \textcolor{red}{word} in red.
%
% \section{Future Work}
% \label{sec:future-work}
-% A short, uncommented list of what is planned in the versions of
+% A short, un-commented list of what is planned in the versions of
% \pkg{ekdosis} to come follows:---
% \begin{enumerate}
% \item Very short-term (weeks):---
% \begin{enumerate}
-% \item Editorial changes, for inserting corrections and
-% conjectures.
% \item Text structure: milestone elements.
+% \item Marginal edition texts: It may happen that the marginalia of
+% manuscripts contain texts worth editing in addition to and along
+% the main text to which they are linked by reference
+% signs.
+% \item Headers and footers: \cs{ekddiv} will provide top and bottom
+% marks to be used in headers and footers.
% \end{enumerate}
% \item Short-term (months):---
% \begin{enumerate}
@@ -4896,7 +5968,7 @@ Sample text with a \textcolor{red}{word} in red.
% instruct ekdosis to output TEI xml (arabic-sample-tei.xml):
\usepackage[teiexport=tidy]{ekdosis}
-% instruct arabluatex to ouput sample-arabic_out.tex with Unicode
+% instruct arabluatex to output sample-arabic_out.tex with Unicode
% Arabic strings in place of arabtex ASCII scheme:
\usepackage[fullvoc,export]{arabluatex}
@@ -4961,7 +6033,8 @@ Sample text with a \textcolor{red}{word} in red.
\AtBeginDocument{\luadirect{ekdosis.setekddivsfalse()}}}},
initial divs = ekdosis,
unknown-choice divs = \PackageError{ekdosis}{unknown divs=#1}{`divs'
- must be either `ekdosis' or `latex'.},
+ must be either `ekdosis' or `latex'.},
+ bool verse = \if@pkg@verse,
choice parnotes = {false = {},
true = {\@pkg@parnotestrue},
roman = {\@pkg@parnotestrue\@parnotesromantrue}},
@@ -4992,7 +6065,6 @@ Sample text with a \textcolor{red}{word} in red.
% \RequirePackage{expkv-def} % already loaded above
\RequirePackage{luacode}
\RequirePackage{paracol}
-\RequirePackage{xparse}
\RequirePackage{etoolbox}
\RequirePackage{lineno}
\RequirePackage{keyfloat}
@@ -5000,8 +6072,11 @@ Sample text with a \textcolor{red}{word} in red.
\RequirePackage{zref-user}
\RequirePackage{zref-abspage}
\RequirePackage{ltxcmds}
-\RequirePackage{atbegshi}
+\RequirePackage{pdftexcmds}
\RequirePackage{ifoddpage}
+\if@pkg@verse
+ \RequirePackage{verse}
+\fi
\if@pkg@parnotes
\RequirePackage{parnotes}
\fi
@@ -5070,11 +6145,11 @@ Sample text with a \textcolor{red}{word} in red.
% \end{macrocode}
% \end{macro}
% \begin{macro}{\DeclareHand} As \cs{DeclareWitness}, \cs{DeclareHand}
-% is a preamble-only command meant to collect data and store them in
-% |Lua| tables. It takes three mandatory arguments and one optional
-% argument. The second argument is used to connect the hand to a
-% declared witness it is related to. Then the table in which this
-% witness is recorded can be fed with new data.
+% is a preamble-only command meant to collect data and store them in
+% |Lua| tables. It takes three mandatory arguments and one optional
+% argument. The second argument is used to connect the hand to a
+% declared witness it is related to. Then the table in which this
+% witness is recorded can be fed with new data.
% \begin{macrocode}
\NewDocumentCommand{\DeclareHand}{m m m +O{}}{
\luadirect{ekdosis.newhand(\luastringN{#1},
@@ -5085,20 +6160,57 @@ Sample text with a \textcolor{red}{word} in red.
\@onlypreamble\DeclareHand
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\DeclareScholar} There is also a table in which are
-% collected data related to scholars' names to be used in the
-% apparatus criticus. \cs{DeclareScholar} is a preamble-only command
-% and takes two mandatory arguments: a unique id and a shorthand to
-% be used in the apparatus criticus which can be extracted from a
-% bibliographic database.
+% Build and process the list of scholars:---
% \begin{macrocode}
-\NewDocumentCommand{\DeclareScholar}{m m}{
- \luadirect{ekdosis.newscholar(\luastringN{#1},
- \luastringN{#2})}
+\ekvdefinekeys{ekd@scholar}{
+ store rawname = \rawname@value,
+ store forename = \forename@value,
+ store surname = \surname@value,
+ store addname = \addname@value,
+ store note = \note@value
}
+% \end{macrocode}
+% \begin{macro}{\DeclareScholar}
+% \changes{v1.1}{2020/11/04}{nows builds a list of persons}
+% \cs{DeclareScholar} is used to build a list of persons within the
+% |<listPerson>| element. It takes two mandatory arguments to specify
+% consecutively a unique identifier and the rendition to be used in
+% the apparatus criticus in print, and one optional argument used to
+% collect the name parts components and further items of information
+% from |key-value| \enquote*{named} arguments.
+% \begin{macrocode}
+\NewDocumentCommand{\DeclareScholar}{m m O{}}{%
+ \bgroup
+ \ekvset{ekd@scholar}{#3}
+ \luadirect{ekdosis.newscholar(
+ \luastringN{#1},
+ \luastringN{#2},
+ \luastringO{\rawname@value},
+ \luastringO{\forename@value},
+ \luastringO{\surname@value},
+ \luastringO{\addname@value},
+ \luastringO{\note@value})}
+ \egroup
+ }
\@onlypreamble\DeclareScholar
% \end{macrocode}
% \end{macro}
+% \begin{macro}{\DeclareSource}
+% \changes{v1.1}{2020/11/04}{new command added}There is also a table in
+% which are collected data related to sources to be used in the
+% apparatus criticus. \cs{DeclareSource} is a preamble-only
+% command and takes two mandatory arguments: a unique id and a
+% shorthand (preferably a Bib\hologo{(La)TeX} label) to be used in
+% the apparatus criticus which can be extracted from a bibliographic
+% database.
+% \begin{macrocode}
+\NewDocumentCommand{\DeclareSource}{m m}{
+ \luadirect{ekdosis.newsource(\luastringN{#1},
+ \luastringN{#2})}
+}
+\@onlypreamble\DeclareSource
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{\DeclareShorthand} \cs{DeclareShorthand} is a
% preamble-only command that can be used to record manuscript
% families or any kind of shorthand to be used to refer to
@@ -5118,7 +6230,7 @@ Sample text with a \textcolor{red}{word} in red.
% \begin{macro}{\getsiglum}
% \cs{getsiglum}\marg{csv list} takes a comma-separated list of
% declared ids by means of \cs{DeclareWitness}, \cs{DeclareHand},
-% \cs{DeclareShorthand} or \cs{DeclareScholar} and returns their
+% \cs{DeclareShorthand} or \cs{DeclareSource} and returns their
% respective renditions.
% \begin{macrocode}
\NewDocumentCommand{\getsiglum}{m}{%
@@ -5207,14 +6319,15 @@ Sample text with a \textcolor{red}{word} in red.
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \begin{macro}{\TeXtoTEIPatt}
+% \begin{macro}{\TeXtoTEIPat}
+% \changes{v1.1}{2020/11/04}{renamed, formerly \cs{TeXtoTEIPatt}}
% Finally, the more flexible\---and more delicate to
-% handle\---\cs{TeXtoTEIPatt}\marg{\TeX\
+% handle\---\cs{TeXtoTEIPat}\marg{\TeX\
% pattern}\allowbreak\marg{\texttt{TEI} pattern} uses pattern matching
% to instruct \pkg{ekdosis} how to convert \hologo{(La)TeX} commands
% into \texttt{TEI} equivalents.
% \begin{macrocode}
-\NewDocumentCommand{\TeXtoTEIPatt}{m m}{%
+\NewDocumentCommand{\TeXtoTEIPat}{m m}{%
\luadirect{ekdosis.newpatttotag(\luastringN{#1}, \luastringN{#2})}
}
% \end{macrocode}
@@ -5230,22 +6343,22 @@ Sample text with a \textcolor{red}{word} in red.
\@onlypreamble\SetTEIFileName
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\SetxmlBibResource} This is a preamble-only command.
-% If a base name for a \texttt{TEI xml} compliant bibliographical
-% database file is provided with
-% \cs{SetxmlBibResource}\marg{basename}, \pkg{ekdosis} will use it
-% and insert formatted data in the back matter section of its own
-% \texttt{TEI xml} output file, as |<biblStruct>| elements within a
-% |<listBibl>| section.
+% \begin{macro}{\AddxmlBibResource} This is a preamble-only command.
+% If a base name (either suffixed with |.xml| or not) for a
+% \texttt{TEI xml}-compliant bibliographical database file be
+% provided with \cs{AddxmlBibResource}\marg{basename or name.xml},
+% \pkg{ekdosis} will use it and insert formatted data in the back
+% matter section of its own \texttt{TEI xml} output file, as
+% |<biblStruct>| elements within a |<listBibl>| section.
% \begin{macrocode}
-\NewDocumentCommand{\SetxmlBibResource}{m}{
- \luadirect{ekdosis.setxmlbibresource(\luastringN{#1})}
+\NewDocumentCommand{\AddxmlBibResource}{m}{
+ \luadirect{ekdosis.addxmlbibresource(\luastringN{#1})}
}
-\@onlypreamble\SetxmlBibResource
+\@onlypreamble\AddxmlBibResource
% \end{macrocode}
% \end{macro}
%
-%\paragraph{Multi-layer apparatuses}
+%\paragraph{Multiple-layer apparatuses}
% \pkg{ekdosis} must know if an entry is to be processed in a single-
% or multiple-layer context:---
% \begin{macrocode}
@@ -5302,6 +6415,23 @@ Sample text with a \textcolor{red}{word} in red.
}
\@onlypreamble\DeclareApparatus
% \end{macrocode}
+% \begin{macro}{\addentries}
+% \changes{v1.1}{2020/11/04}{modifies the number of accepted entries
+% on the current page.}
+% If |maxentries| be set for a given layer of critical notes,
+% \cs{addentries}\oarg{layer}\marg{n}, where \meta{n} is an integer,
+% can be used to add \meta{n} to\---or remove it from if \meta{n} be
+% negative\---the number of accepted entries on the current
+% page. \cs{addentries} operates on the default layer of notes, but
+% any other declared layer can be specified in the optional argument
+% of the command.
+% \begin{macrocode}
+\NewDocumentCommand{\addentries}{O{\ekdan@type} m}{%
+ \luadirect{ekdosis.addto_bagunits(\luastringO{#1}, \luastringN{#2})}%
+ \ignorespaces
+}
+% \end{macrocode}
+% \end{macro}
% \end{macro}
% Apparatus-related settings and functions. Some booleans to check if
% an apparatus should be inserted and what is the current environment.
@@ -5505,8 +6635,11 @@ Sample text with a \textcolor{red}{word} in red.
% \end{macrocode}
% \cs{add@@apparatus} inserts the apparatus block on a given page
% either in the footnote floating block or in a float of its own,
-% depending on the value set in the |layout| global option.
+% 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.
% \begin{macrocode}
+\newif\ifekd@inside@app
\def\add@@apparatus{%
\if@pkg@parnotes\parnotes\else\fi%
\if@pkg@footins%
@@ -5517,8 +6650,10 @@ Sample text with a \textcolor{red}{word} in red.
\if@parnotesroman%
\renewcommand*{\theparnotemark}{\roman{parnotemark}}\else\fi%
\parnoteclear\else\fi%
+ \ekd@inside@apptrue
\footnotesize\apparatus\unless\ifekd@mapps\ekd@end@apparatus\fi%
- \if@pkg@parnotes\parnotes\parnotereset\else\fi%
+ \ekd@inside@appfalse
+ \if@pkg@parnotes\parnotes\parnotereset\else\fi
}%
\egroup%
\fi%
@@ -5528,7 +6663,9 @@ Sample text with a \textcolor{red}{word} in red.
\if@parnotesroman%
\renewcommand*{\theparnotemark}{\roman{parnotemark}}\else\fi%
\parnoteclear\else\fi%
+ \ekd@inside@apptrue
\ekd@appfontsize\apparatus\unless\ifekd@mapps\ekd@end@apparatus\fi%
+ \ekd@inside@appfalse
\if@pkg@parnotes\parnotes\parnotereset\else\fi%
}%
\fi%
@@ -5605,7 +6742,7 @@ Sample text with a \textcolor{red}{word} in red.
\NewDocumentCommand{\ekdatbegshihook}{}{%
\ifekd@pagelineation\resetlinenumber\fi
}
-\AtBeginShipout{\ekdatbegshihook}
+\AddToHook{shipout/before}{\ekdatbegshihook}
\newif\ifekd@elidednumbers
\ekvdefinekeys{ekd@lineation}{
choice lineation = {page = \ekd@pagelineationtrue,
@@ -5614,6 +6751,9 @@ Sample text with a \textcolor{red}{word} in red.
lineation=#1}{`lineation' must be either `page' or `document'.},
code modulonum = \chardef\c@linenumbermodulo#1\relax,
noval modulo = \modulolinenumbers,
+ code vmodulonum = \if@pkg@verse\poemlines{#1}\fi,
+ initial vmodulonum = 1,
+ noval vmodulo = \if@pkg@verse\poemlines{5}\fi,
choice numbers = {elided = \ekd@elidednumberstrue,
full = \ekd@elidednumbersfalse},
unknown-choice numbers = \PackageError{ekdosis}{unknown
@@ -5664,6 +6804,7 @@ Sample text with a \textcolor{red}{word} in red.
% \cs{rdg} or \cs{note}\meta{*}:---
% \begin{macrocode}
\NewDocumentCommand{\app}{O{} > { \TrimSpaces } +m}{%
+ \leavevmode
\begingroup
\ekvset{appnote}{#1}%
\ekd@isinapptrue%
@@ -5685,9 +6826,9 @@ Sample text with a \textcolor{red}{word} in red.
\def\current@ref@arg#1#2{{%\textdir TLT%
\unexpanded\expandafter{\ekd@refnumstyle}%
\ifnum%
- \getpagerefnumber{#1}
+ \pdf@strcmp{\getpagerefnumber{#1}}{\getpagerefnumber{#2}}
=
- \getpagerefnumber{#2}
+ 0
\ifnum%
\getrefnumber{#1}
=
@@ -5744,9 +6885,11 @@ Sample text with a \textcolor{red}{word} in red.
\def\current@ref{{%\textdir TLT%
\unexpanded\expandafter{\ekd@refnumstyle}%
\ifnum%
- \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}
+ \pdf@strcmp{%
+ \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}}%
+ {\getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-e}}
=
- \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-e}
+ 0
\ifnum%
\getrefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}
=
@@ -5801,6 +6944,8 @@ Sample text with a \textcolor{red}{word} in red.
% \begin{macrocode}
\ekvdefinekeys{lem}{
code wit = \def\ekdlr@wit{#1},
+ code source = \def\ekdlr@source{#1},
+ code resp = \def\ekdlr@resp{#1},
code alt = \def\ekdlr@alt{#1},
code pre = \def\ekdlr@pre{#1},
code post = \def\ekdlr@post{#1},
@@ -5814,6 +6959,8 @@ Sample text with a \textcolor{red}{word} in red.
}
\ekvdefinekeys{rdg}{
code wit = \def\ekdlr@wit{#1},
+ code source = \def\ekdlr@source{#1},
+ code resp = \def\ekdlr@resp{#1},
code alt = \def\ekdlr@alt{#1},
code pre = \def\ekdlr@pre{#1},
code post = \def\ekdlr@post{#1},
@@ -5823,6 +6970,20 @@ Sample text with a \textcolor{red}{word} in red.
bool nordg = \ifekdr@nordg
}
% \end{macrocode}
+% \begin{macro}{\rdgGrp}
+% \changes{v1.1}{2020/11/04}{new macro for grouping readings}
+% \cs{rdgGrp}\oarg{option}\marg{lemma and/or readings} may be used to
+% group readings so as to indicate subvariation in apparatus
+% entries. This command is expected inside \cs{app}|{}|, and takes as
+% argument readings to be grouped introduced by means of \cs{lem}
+% and/or \cs{rdg} commands. It further accepts |type| as an optional
+% key-value argument to describe the type of grouping.
+% \begin{macrocode}
+\NewDocumentCommand{\rdgGrp}{O{} > {\TrimSpaces } m}{%
+ \luadirect{tex.sprint(ekdosis.removesp(\luastringN{#2}))}%
+}
+% \end{macrocode}
+% \end{macro}
% \begin{macro}{\lem}
% \cs{lem}\oarg{options}\marg{lemma text} inserts \meta{lemma text}
% both in the edition text and in the apparatus criticus by default,
@@ -5882,6 +7043,8 @@ Sample text with a \textcolor{red}{word} in red.
\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
@@ -5919,6 +7082,8 @@ Sample text with a \textcolor{red}{word} in red.
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
\ifekdl@nosep\else\unexpanded\expandafter{\ekdl@sep}\fi
@@ -5972,6 +7137,8 @@ Sample text with a \textcolor{red}{word} in red.
\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
@@ -6000,6 +7167,8 @@ Sample text with a \textcolor{red}{word} in red.
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
}%
@@ -6037,7 +7206,7 @@ Sample text with a \textcolor{red}{word} in red.
% specified; otherwise \pkg{ekdosis} will issue an error message.
% \begin{macrocode}
\NewDocumentCommand{\note@noapp}{O{} +m}{%
- \null
+ \leavevmode
\bgroup%
\ekvset{note}{#1}%
\stepcounter{ekd@lab}%
@@ -6128,10 +7297,10 @@ Sample text with a \textcolor{red}{word} in red.
\bgroup%
\ekvset{ekd@note}{#1}%
\edef\note@contents{%
- \ekvifdefinedNoVal{note}{pre}{}{%
+ \ekvifdefinedNoVal{ekd@note}{pre}{}{%
\unexpanded\expandafter{\pre@value}}%
{\unexpanded{#2}}%
- \ekvifdefinedNoVal{note}{post}{}{%
+ \ekvifdefinedNoVal{ekd@note}{post}{}{%
\unexpanded\expandafter{\post@value}}%
}%
\append@app{\note@contents}%
@@ -6142,10 +7311,10 @@ Sample text with a \textcolor{red}{word} in red.
\bgroup%
\ekvset{ekd@note}{#1}%
\edef\note@contents{%
- \ekvifdefinedNoVal{note}{pre}{}{%
+ \ekvifdefinedNoVal{ekd@note}{pre}{}{%
\unexpanded\expandafter{\pre@value}}%
\unskip\noexpand\parnote{\unexpanded{#2}}%
- \ekvifdefinedNoVal{note}{post}{}{%
+ \ekvifdefinedNoVal{ekd@note}{post}{}{%
\unexpanded\expandafter{\post@value}}%
}%
\append@app{\note@contents}%
@@ -6186,6 +7355,101 @@ Sample text with a \textcolor{red}{word} in red.
}
% \end{macrocode}
% \end{macro}
+% \paragraph{Emendations and Conjectures}
+% Here follows the |key-value| options to be used by
+% \cs{SetCritSymbols} below:---
+% \begin{macrocode}
+\ekvdefinekeys{ekd@corr}{
+ store suppbegin = \suppb@value,
+ store suppend = \suppe@value,
+ store delbegin = \delb@value,
+ store delend = \dele@value,
+ store sicbegin = \sicb@value,
+ store sicend = \sice@value,
+ store gapmark = \gapm@value,
+ initial suppbegin = \ifbool{al@rlmode}{>}{<},
+ initial suppend = \ifbool{al@rlmode}{<}{>},
+ initial delbegin = \ifbool{al@rlmode}{\}}{\{},
+ initial delend = \ifbool{al@rlmode}{\{}{\}},
+ initial sicbegin = \dag,
+ initial sicend = \dag,
+ initial gapmark = ***
+}
+% \end{macrocode}
+% \begin{macro}{\supplied}
+% \changes{v1.1}{2020/11/04}{new macro for editorial additions}
+% \cs{supplied}\marg{text} takes as mandatory argument the text added
+% or supplied by conjecture.
+% \begin{macrocode}
+\NewDocumentCommand{\supplied}{m}{%
+ \ifekd@inside@app
+ #1%
+ \else
+ \suppb@value #1\suppe@value
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\surplus}
+% \changes{v1.1}{2020/11/04}{new macro for editorial deletions}
+% \cs{surplus}\marg{text} takes as mandatory argument the text
+% considered by the editor to be inauthentic, but nevertheless
+% retained between braces in the edition text as it is transmitted by
+% all witnesses.
+% \begin{macrocode}
+\NewDocumentCommand{\surplus}{m}{%
+ \ifekd@inside@app
+ #1%
+ \else
+ \delb@value #1\dele@value
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\sic}
+% \changes{v1.1}{2020/11/04}{new macro for text deemed to be not
+% understandable}
+% \cs{sic}\marg{text} takes as mandatory argument the text deemed by
+% the editor to be readable but not understandable. \cs{sic} insert
+% \meta{text} between cruces while \cs{sic*} prints only one crux
+% before \meta{text}.
+% \begin{macrocode}
+\NewDocumentCommand{\sic}{s m}{%
+ \ifekd@inside@app
+ #2%
+ \else
+ \IfBooleanTF{#1}
+ {\sicb@value #2}
+ {\sicb@value #2\sice@value}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\gap}
+% \changes{v1.1}{2020/11/04}{new macro for lacunae}
+% \cs{gap}\marg{options} indicates that some amount of text has fallen
+% away from the entire tradition. It takes as mandatory argument a
+% comma-separated list of options that can be used to further specify
+% the reason for omission, the unit of measurement, the quantity and
+% extent.
+% \begin{macrocode}
+\NewDocumentCommand{\gap}{m}{%
+ \gapm@value
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\SetCritSymbols}
+% \changes{v1.1}{2020/11/04}{new macro to set the symbols to be
+% used to mark the corrections} \cs{SetCritSymbols}\marg{csv list of
+% options} is used to change the symbols that \pkg{ekdosis} uses by
+% default for representing emendations, lacunae, omissions, gaps and
+% editorial deletions.
+% \begin{macrocode}
+\NewDocumentCommand{\SetCritSymbols}{m}{
+ \ekvset{ekd@corr}{#1}
+}
+% \end{macrocode}
+% \end{macro}
% \cs{apparatus} is used internally by \pkg{ekdosis} to print the
% apparatus at the bottom of pages. Therefore, it is not documented,
% but this may change in the future for it will be possible to have
@@ -6457,12 +7721,45 @@ Sample text with a \textcolor{red}{word} in red.
}
% \end{macrocode}
% \end{macro}
-% A very basic and provisional implementation of poetry lines
-% follows:---
+% \begin{environment}{ekdverse}
+% \env{ekdverse} provides an implementation of poetry lines. It is
+% set to use either the \pkg{lineno} or the \pkg{verse} package
+% depending on the value that is passed to the global option
+% |verse|:---
% \begin{macrocode}
+\if@pkg@verse
+\verselinenumfont{\normalfont\footnotesize}
+\setcounter{poemline}{1}
+\NewDocumentEnvironment{ekdverse}{O{\linewidth}}{%
+ \nolinenumbers
+ \let\linelabel\label
+ \stepcounter{verse@envctr}%
+ \addtocounter{poemline}{-1}\refstepcounter{poemline}%
+ \setcounter{vslineno}{1}%
+ \let\\=\@vscentercr
+ \list{}{\itemsep \z@
+ \itemindent -\vindent%
+ \listparindent\itemindent
+ \parsep \stanzaskip
+ \setlength{\itemsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+ \ifdim #1 < \linewidth
+ \rightmargin \z@
+ \setlength{\leftmargin}{\linewidth}%
+ \addtolength{\leftmargin}{-#1}%
+ \addtolength{\leftmargin}{-0.5\leftmargin}%
+ \else
+ \rightmargin \leftmargin
+ \fi
+ \addtolength{\leftmargin}{\vindent}}%
+ \item[]%
+}
+{\endlist}
+\else
\newlength{\ekdverseindentlength}
\setlength{\ekdverseindentlength}{\parindent}
-\newenvironment*{ekdverse}[1][\ekdverseindentlength]{
+\NewDocumentEnvironment{ekdverse}{O{\ekdverseindentlength}}{
\begin{list}{}{%
\setlength{\leftmargin}{#1}
\setlength{\itemsep}{0pt}
@@ -6471,7 +7768,9 @@ Sample text with a \textcolor{red}{word} in red.
}
\item[]
}{\end{list}}
+\fi
% \end{macrocode}
+% \end{environment}
% \begin{environment}{ekdpar}
% When |autopar| is set to |false| by means of \cs{SetTEIxmlExport},
% \env{ekdpar}\---or any other environment set to be inserted within
@@ -6560,7 +7859,8 @@ local citecmds = lpeg.Cs(lpeg.P("icite")
local next = next
-- General
-xmlids = {}
+local xmlids = {}
+table.insert(xmlids, {xmlid = "scholars"} )
local function xmlidfound(element)
for i = 1,#xmlids do
@@ -6582,9 +7882,12 @@ local function checkxmlid(str)
end
-- Witnesses
-listWit = {}
-idsRend = {}
-shorthands = {}
+local listWit = {}
+-- Persons/Scholars
+local listPerson = {}
+
+local idsRend = {}
+local shorthands = {}
local function isfound(table, value)
for i = 1,#table do
@@ -6727,14 +8030,67 @@ function ekdosis.newshorthand(id, rend, xmlids)
return true
end
+function ekdosis.newscholar(id,
+ siglum,
+ rawname,
+ Forename,
+ Surname,
+ AddName,
+ Note)
+ if xmlidfound(id)
+ then
+ tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
+ ..id..
+ "\" already exists as an xml:id. "
+ ..
+ "Please pick another id.}}")
+ elseif not checkxmlid(id)
+ then
+ tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
+ ..id..
+ "\" is not a valid xml:id. \\MessageBreak "
+ ..
+ "Please pick another id.}}")
+ else
+ table.insert(xmlids, {xmlid = id})
+ table.sort(xmlids, function(a ,b) return(#a.xmlid > #b.xmlid) end)
+ table.insert(idsRend, {xmlid = id, abbr = siglum})
+ table.sort(idsRend, function(a ,b) return(#a.xmlid > #b.xmlid) end)
+ if rawname ~= ""
+ then
+ table.insert(listPerson, {xmlid = id,
+ abbr = siglum,
+ note = Note,
+ persName = {
+ name = rawname}
+ })
+ else
+ table.insert(listPerson, {xmlid = id,
+ abbr = siglum,
+ note = Note,
+ persName = {
+ forename = Forename,
+ surname = Surname,
+ addName = AddName}
+ })
+ end
+ end
+ return true
+end
+
local xmlbibresource = nil
-function ekdosis.setxmlbibresource(str)
- xmlbibresource = str..".xml"
+function ekdosis.addxmlbibresource(str)
+ if string.find(str, "%.xml$")
+ then
+ xmlbibresource = str
+ else
+ xmlbibresource = str..".xml"
+ end
return true
end
-function ekdosis.newscholar(id, siglum)
+function ekdosis.newsource(id, siglum)
if xmlidfound(id)
then
tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
@@ -6796,6 +8152,7 @@ local cmdtotags = {
{a="LRfootnote", b="note", c=" place=\"bottom\""},
{a="RLfootnote", b="note", c=" place=\"bottom\""},
{a="enquote *", b="quote", c=""},
+ {a="marginpar", b="note", c=" place=\"margin\""},
{a="footnote", b="note", c=" place=\"bottom\""},
{a="enquote", b="quote", c=""},
{a="txtrans", b="s", c=" xml:lang=\"ar-Latn\" type=\"transliterated\""},
@@ -6805,15 +8162,21 @@ local cmdtotags = {
{a="textsf", b="hi", c=" rend=\"sf\""},
{a="arbup", b="hi", c=" rend=\"sup\""},
{a="txarb", b="s", c=" xml:lang=\"arb\""},
- {a="mbox", b="", c=""},
{a="arb", b="foreign",
c=" xml:lang=\"ar-Latn\" type=\"transliterated\" subtype=\"arabtex\""}
}
local texpatttotags = {
+ {a="\\addentries%s+%[(.-)%]{(.-)}", b=""},
+ {a="\\addentries%s+{(.-)}", b=""},
+ {a="\\setverselinenums%s+{(.-)}{(.-)}", b=""},
+ {a="\\resetlinenumber%s+%[(.-)%]", b=""},
+ {a="\\resetlinenumber%s+", b=""},
+ {a="\\poemlines%s+{(.-)}", b=""},
{a="\\pagebreak%s+%[[1-4]%]", b=""},
{a="\\pagebreak%s+", b=""},
{a="\\altrfont%s+", b=""},
+ {a="\\mbox%s+{(.-)}", b="%1"},
{a="\\LR%s+{(.-)}", b="%1"},
{a="\\RL%s+{(.-)}", b="%1"}
}
@@ -6890,6 +8253,10 @@ end
-- Get values of attributes
local function get_attr_value(str, attr)
str = str..","
+ str = string.gsub(str, "%b{}", function(body)
+ body = string.gsub(body, attr, attr.."@ekd")
+ return string.format("%s", body)
+ end)
local attrval = string.match(str, "%f[%w]"..attr.."%s?%=%s?%b{}")
or string.match(str, "%f[%w]"..attr.."%s?%=%s?.-%,")
or ""
@@ -6898,6 +8265,7 @@ local function get_attr_value(str, attr)
return string.format("%s", bbraces)
end)
attrval = string.gsub(attrval, attr.."%s?%=%s?(.-)%s?%,", "%1")
+ str = string.gsub(str, attr.."@ekd", attr)
return attrval
end
@@ -6922,16 +8290,21 @@ local function note_totei(str)
if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
right = get_attr_value(opt, "labelb")
left = get_attr_value(opt, "labele")
- if left ~= ""
- then
- return string.format(
- "<%s%s target=\"#range(right(%s),left(%s))\">%s</%s><anchor xml:id=\"%s\"/>",
- cmd, teitype, right, left, arg, cmd, right)
- elseif left == ""
+ if right == ""
then
- return string.format(
- "<%s%s target=\"#right(%s)\">%s</%s><anchor xml:id=\"%s\"/>",
- cmd, teitype, right, arg, cmd, right)
+ return string.format("<%s>%s</%s>", cmd, arg, cmd)
+ else
+ if left ~= ""
+ then
+ return string.format(
+ "<%s%s target=\"#range(right(%s),left(%s))\">%s</%s><anchor xml:id=\"%s\"/>",
+ cmd, teitype, right, left, arg, cmd, right)
+ elseif left == ""
+ then
+ return string.format(
+ "<%s%s target=\"#right(%s)\">%s</%s><anchor xml:id=\"%s\"/>",
+ cmd, teitype, right, arg, cmd, right)
+ end
end
end)
return str
@@ -6956,6 +8329,31 @@ local function app_totei(str)
return str
end
+local function rdgGrp_totei(str)
+ str = gsub(str,
+ dblbkslash *
+ lpeg.Cs("rdgGrp") *
+ spcenc^-1 *
+ bsqbrackets *
+ bcbraces *
+ spcenc^-1,
+ function(bkslash, cmd, opt, arg)
+ opt = string.sub(opt, 2, -2)
+ arg = string.sub(arg, 2, -2)
+ teitype = get_attr_value(opt, "type")
+ if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
+ if opt == ""
+ then
+ return rdgGrp_totei(string.format("<%s>%s</%s>",
+ cmd, arg, cmd))
+ else
+ return rdgGrp_totei(string.format("<%s%s>%s</%s>",
+ cmd, teitype, arg, cmd))
+ end
+ end)
+ return str
+end
+
local function lem_rdg_totei(str)
str = gsub(str,
spcenc^-1 *
@@ -6972,6 +8370,10 @@ local function lem_rdg_totei(str)
--
teiwit = get_attr_value(opt, "wit")
if teiwit ~= "" then teiwit = " wit=\""..ekdosis.getsiglum(teiwit, "tei").."\"" else end
+ teisource = get_attr_value(opt, "source")
+ if teisource ~= "" then teisource = " source=\""..ekdosis.getsiglum(teisource, "tei").."\"" else end
+ teiresp = get_attr_value(opt, "resp")
+ if teiresp ~= "" then teiresp = " resp=\""..ekdosis.getsiglum(teiresp, "tei").."\"" else end
teitype = get_attr_value(opt, "type")
if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
--
@@ -6981,8 +8383,8 @@ local function lem_rdg_totei(str)
cmd, arg, cmd))
else
-- opt = ekdosis.getsiglum(opt, "tei")
- return lem_rdg_totei(string.format("<%s%s%s>%s</%s>",
- cmd, teiwit, teitype, arg, cmd))
+ return lem_rdg_totei(string.format("<%s%s%s%s%s>%s</%s>",
+ cmd, teiwit, teisource, teiresp, teitype, arg, cmd))
end
end)
str = gsub(str, spcenc^-0 * dblbkslash * lemrdg * spcenc^-1 * bcbraces * spcenc^-1,
@@ -7000,7 +8402,7 @@ end
local function linestotei(str)
-- str = "\n<l>"..str
- str = string.gsub(str, "^%s?(.-)%s?$", "\n<l>%1</l>\n")
+ str = string.gsub(str, "^%s?(.-)\\\\[%!%*]?%s?$", "\n<l>%1</l>\n")
-- str = gsub(str, endpoem, "</l>\n")
str = gsub(str, poemline * spcenc^-1 * lpeg.P("&gt;"), "\n<lb/>")
str = gsub(str, poemline * spcenc^-1, "</l>\n<l>")
@@ -7087,7 +8489,7 @@ local function icitetotei(str)
* bsqbrackets
* bsqbrackets
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, pre, post, body, opt)
pre = string.sub(pre, 2, -2)
post = string.sub(post, 2, -2)
@@ -7108,7 +8510,7 @@ local function icitetotei(str)
* spcenc^-1
* bsqbrackets
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, post, body, opt)
post = string.sub(post, 2, -2)
body = string.sub(body, 2, -2)
@@ -7127,7 +8529,7 @@ local function icitetotei(str)
* citecmds
* spcenc^-1
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, body, opt)
body = string.sub(body, 2, -2)
if not checkxmlid(body)
@@ -7179,6 +8581,19 @@ local function cmdtotei(str)
return string.format("<ref target=\"%s\">%s</ref>",
teisiglum, printsiglum)
end)
+ str = string.gsub(str, "\\(gap)%s?(%b{})",
+ function(cmd, body)
+ body = string.sub(body, 2, -2)
+ teireason = get_attr_value(body, "reason")
+ if teireason ~= "" then teireason = " reason=\""..teireason.."\"" else end
+ teiunit = get_attr_value(body, "unit")
+ if teiunit ~= "" then teiunit = " unit=\""..teiunit.."\"" else end
+ teiquantity = get_attr_value(body, "quantity")
+ if teiquantity ~= "" then teiquantity = " quantity=\""..teiquantity.."\"" else end
+ teiextent = get_attr_value(body, "extent")
+ if teiextent ~= "" then teiextent = " extent=\""..teiextent.."\"" else end
+ return string.format("<gap%s%s%s%s/>", teireason, teiunit, teiquantity, teiextent)
+ end)
str = gsub(str, lpeg.P("\\") * labelrefcmds * spcenc^-1 * bcbraces,
function(cmd, body)
body = string.sub(body, 2, -2)
@@ -7542,6 +8957,7 @@ local function textotei(str)
str = texpatttotei(str)
str = note_totei(str)
str = app_totei(str)
+ str = rdgGrp_totei(str)
str = lem_rdg_totei(str)
str = relocate_notes(str)
str = versetotei(str)
@@ -7587,68 +9003,113 @@ function ekdosis.openteistream()
f:write("<distributor><!-- Distributor name --></distributor>", "\n")
f:write("</publicationStmt>", "\n")
f:write("<sourceDesc>", "\n")
- f:write("<listWit>", "\n")
- for i = 1,#listWit do
- f:write('<witness xml:id=\"', listWit[i].xmlid, "\">", "\n")
- f:write('<abbr type="siglum">', textotei(listWit[i].abbr), "</abbr>", "\n")
- f:write(textotei(listWit[i].detailsDesc), "\n")
- f:write("<msDesc>", "\n")
- if listWit[i].msIdentifier.settlement == ""
- and listWit[i].msIdentifier.institution == ""
- and listWit[i].msIdentifier.repository == ""
- and listWit[i].msIdentifier.collection == ""
- and listWit[i].msIdentifier.idno == ""
- and listWit[i].msIdentifier.msName == ""
+ if next(listWit) == nil and next(listPerson) == nil
+ then
+ f:write("<p>No source, born digital</p>", "\n")
+ else
+ if next(listWit) ~= nil
then
- f:write("<msIdentifier/>", "\n")
- else
- f:write("<msIdentifier>", "\n")
- if listWit[i].msIdentifier.settlement ~= "" then
- f:write("<settlement>", textotei(listWit[i].msIdentifier.settlement), "</settlement>", "\n")
+ f:write("<listWit>", "\n")
+ for i = 1,#listWit do
+ f:write('<witness xml:id=\"', listWit[i].xmlid, "\">", "\n")
+ f:write('<abbr type="siglum">', textotei(listWit[i].abbr), "</abbr>", "\n")
+ f:write(textotei(listWit[i].detailsDesc), "\n")
+ f:write("<msDesc>", "\n")
+ if listWit[i].msIdentifier.settlement == ""
+ and listWit[i].msIdentifier.institution == ""
+ and listWit[i].msIdentifier.repository == ""
+ and listWit[i].msIdentifier.collection == ""
+ and listWit[i].msIdentifier.idno == ""
+ and listWit[i].msIdentifier.msName == ""
+ then
+ f:write("<msIdentifier/>", "\n")
+ else
+ f:write("<msIdentifier>", "\n")
+ if listWit[i].msIdentifier.settlement ~= "" then
+ f:write("<settlement>", textotei(listWit[i].msIdentifier.settlement), "</settlement>", "\n")
else end
- if listWit[i].msIdentifier.institution ~= "" then
- f:write("<institution>", textotei(listWit[i].msIdentifier.institution), "</institution>", "\n")
+ if listWit[i].msIdentifier.institution ~= "" then
+ f:write("<institution>", textotei(listWit[i].msIdentifier.institution), "</institution>", "\n")
else end
- if listWit[i].msIdentifier.repository ~= "" then
- f:write("<repository>", textotei(listWit[i].msIdentifier.repository), "</repository>", "\n")
+ if listWit[i].msIdentifier.repository ~= "" then
+ f:write("<repository>", textotei(listWit[i].msIdentifier.repository), "</repository>", "\n")
else end
- if listWit[i].msIdentifier.collection ~= "" then
- f:write("<collection>", textotei(listWit[i].msIdentifier.collection), "</collection>", "\n")
+ if listWit[i].msIdentifier.collection ~= "" then
+ f:write("<collection>", textotei(listWit[i].msIdentifier.collection), "</collection>", "\n")
else end
- if listWit[i].msIdentifier.idno ~= "" then
- f:write("<idno>", textotei(listWit[i].msIdentifier.idno), "</idno>", "\n")
+ if listWit[i].msIdentifier.idno ~= "" then
+ f:write("<idno>", textotei(listWit[i].msIdentifier.idno), "</idno>", "\n")
else end
- if listWit[i].msIdentifier.msName ~= "" then
- f:write("<msName>", textotei(listWit[i].msIdentifier.msName), "</msName>", "\n")
+ if listWit[i].msIdentifier.msName ~= "" then
+ f:write("<msName>", textotei(listWit[i].msIdentifier.msName), "</msName>", "\n")
else end
- f:write("</msIdentifier>", "\n")
+ f:write("</msIdentifier>", "\n")
+ end
+ if listWit[i].handDesc ~= nil then
+ f:write("<physDesc>", "\n")
+ f:write("<handDesc hands=\"", #listWit[i].handDesc, "\">", "\n")
+ local j = 1
+ while listWit[i].handDesc[j]
+ do
+ f:write("<handNote xml:id=\"", listWit[i].handDesc[j].xmlid, "\">", "\n")
+ f:write('<abbr type="siglum">', textotei(listWit[i].handDesc[j].abbr), "</abbr>", "\n")
+ f:write("<p>", textotei(listWit[i].handDesc[j].detailsDesc), "</p>", "\n")
+ f:write("</handNote>", "\n")
+ j = j + 1
+ end
+ f:write("</handDesc>", "\n")
+ f:write("</physDesc>", "\n")
+ else end
+ if listWit[i].history ~= nil then
+ f:write("<history>", "\n")
+ f:write("<origin>", "\n")
+ f:write("<origDate>", textotei(listWit[i].history.origin.origDate), "</origDate>", "\n")
+ f:write("</origin>", "\n")
+ f:write("</history>", "\n")
+ end
+ f:write("</msDesc>", "\n")
+ f:write("</witness>", "\n")
+ end
+ f:write("</listWit>", "\n")
end
- if listWit[i].handDesc ~= nil then
- f:write("<physDesc>", "\n")
- f:write("<handDesc hands=\"", #listWit[i].handDesc, "\">", "\n")
- local j = 1
- while listWit[i].handDesc[j]
- do
- f:write("<handNote xml:id=\"", listWit[i].handDesc[j].xmlid, "\">", "\n")
- f:write('<abbr type="siglum">', textotei(listWit[i].handDesc[j].abbr), "</abbr>", "\n")
- f:write("<p>", textotei(listWit[i].handDesc[j].detailsDesc), "</p>", "\n")
- f:write("</handNote>", "\n")
- j = j + 1
+ if next(listPerson) ~= nil
+ then
+ f:write("<listPerson xml:id=\"scholars\">", "\n")
+ for i = 1,#listPerson do
+ f:write('<person xml:id=\"', listPerson[i].xmlid, "\">", "\n")
+ f:write('<persName>', "\n")
+ f:write('<abbr type="siglum">', textotei(listPerson[i].abbr), "</abbr>", "\n")
+ if listPerson[i].persName.name ~= nil
+ then
+ f:write(textotei(listPerson[i].persName.name))
+ else
+ if listPerson[i].persName.forename ~= ""
+ then
+ f:write("<forename>", textotei(listPerson[i].persName.forename), "</forename>", "\n")
+ else
+ f:write("<forename><!-- forename --></forename>", "\n")
+ end
+ if textotei(listPerson[i].persName.surname) ~= ""
+ then
+ f:write("<surname>", textotei(listPerson[i].persName.surname), "</surname>", "\n")
+ else
+ f:write("<surname><!-- surname --></surname>", "\n")
+ end
+ if textotei(listPerson[i].persName.addName) ~= ""
+ then
+ f:write("<addName>", textotei(listPerson[i].persName.addName), "</addName>", "\n")
+ end
+ end
+ if listPerson[i].note ~= ""
+ then
+ f:write("<note>", textotei(listPerson[i].note), "</note>", "\n")
+ end
+ f:write('</persName>', "\n")
+ f:write('</person>', "\n")
end
- f:write("</handDesc>", "\n")
- f:write("</physDesc>", "\n")
- else end
- if listWit[i].history ~= nil then
- f:write("<history>", "\n")
- f:write("<origin>", "\n")
- f:write("<origDate>", textotei(listWit[i].history.origin.origDate), "</origDate>", "\n")
- f:write("</origin>", "\n")
- f:write("</history>", "\n")
+ f:write("</listPerson>", "\n")
end
- f:write("</msDesc>", "\n")
- f:write("</witness>", "\n")
end
- f:write("</listWit>", "\n")
f:write("</sourceDesc>", "\n")
f:write("</fileDesc>", "\n")
f:write("<encodingDesc>", "\n")
@@ -8052,10 +9513,10 @@ function ekdosis.get_bagunits(teitype)
return bagunits[teitype]
end
-local function getapplimit(str)
+local function getapplimit(teitype)
for i = 1,#apparatuses
do
- if apparatuses[i].a == str then
+ if apparatuses[i].a == teitype then
limitfound = apparatuses[i].limit
break
end
@@ -8084,6 +9545,14 @@ function ekdosis.limit_bagunits(teitype)
end
end
+function ekdosis.addto_bagunits(teitype, n)
+ if tonumber(getapplimit(teitype)) ~= 0
+ then
+ n = tonumber(n)
+ bagunits[teitype] = bagunits[teitype] - n
+ end
+end
+
function ekdosis.increment_bagunits(teitype)
bagunits[teitype] = (bagunits[teitype] or 0) + 1
end
diff --git a/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua b/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua
index 64e444d5912..55d42fbc7bc 100644
--- a/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua
+++ b/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.lua
@@ -1,7 +1,7 @@
--[[
This file is part of the `ekdosis' package
-ekdosis -- Typesetting TEI xml compliant critical editions
+ekdosis -- Typesetting TEI xml-compliant critical editions
Copyright (C) 2020 Robert Alessi
Please send error reports and suggestions for improvements to Robert
@@ -90,7 +90,8 @@ local citecmds = lpeg.Cs(lpeg.P("icite")
local next = next
-- General
-xmlids = {}
+local xmlids = {}
+table.insert(xmlids, {xmlid = "scholars"} )
local function xmlidfound(element)
for i = 1,#xmlids do
@@ -112,9 +113,12 @@ local function checkxmlid(str)
end
-- Witnesses
-listWit = {}
-idsRend = {}
-shorthands = {}
+local listWit = {}
+-- Persons/Scholars
+local listPerson = {}
+
+local idsRend = {}
+local shorthands = {}
local function isfound(table, value)
for i = 1,#table do
@@ -257,14 +261,67 @@ function ekdosis.newshorthand(id, rend, xmlids)
return true
end
+function ekdosis.newscholar(id,
+ siglum,
+ rawname,
+ Forename,
+ Surname,
+ AddName,
+ Note)
+ if xmlidfound(id)
+ then
+ tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
+ ..id..
+ "\" already exists as an xml:id. "
+ ..
+ "Please pick another id.}}")
+ elseif not checkxmlid(id)
+ then
+ tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
+ ..id..
+ "\" is not a valid xml:id. \\MessageBreak "
+ ..
+ "Please pick another id.}}")
+ else
+ table.insert(xmlids, {xmlid = id})
+ table.sort(xmlids, function(a ,b) return(#a.xmlid > #b.xmlid) end)
+ table.insert(idsRend, {xmlid = id, abbr = siglum})
+ table.sort(idsRend, function(a ,b) return(#a.xmlid > #b.xmlid) end)
+ if rawname ~= ""
+ then
+ table.insert(listPerson, {xmlid = id,
+ abbr = siglum,
+ note = Note,
+ persName = {
+ name = rawname}
+ })
+ else
+ table.insert(listPerson, {xmlid = id,
+ abbr = siglum,
+ note = Note,
+ persName = {
+ forename = Forename,
+ surname = Surname,
+ addName = AddName}
+ })
+ end
+ end
+ return true
+end
+
local xmlbibresource = nil
-function ekdosis.setxmlbibresource(str)
- xmlbibresource = str..".xml"
+function ekdosis.addxmlbibresource(str)
+ if string.find(str, "%.xml$")
+ then
+ xmlbibresource = str
+ else
+ xmlbibresource = str..".xml"
+ end
return true
end
-function ekdosis.newscholar(id, siglum)
+function ekdosis.newsource(id, siglum)
if xmlidfound(id)
then
tex.print("\\unexpanded{\\PackageWarning{ekdosis}{\""
@@ -326,6 +383,7 @@ local cmdtotags = {
{a="LRfootnote", b="note", c=" place=\"bottom\""},
{a="RLfootnote", b="note", c=" place=\"bottom\""},
{a="enquote *", b="quote", c=""},
+ {a="marginpar", b="note", c=" place=\"margin\""},
{a="footnote", b="note", c=" place=\"bottom\""},
{a="enquote", b="quote", c=""},
{a="txtrans", b="s", c=" xml:lang=\"ar-Latn\" type=\"transliterated\""},
@@ -335,15 +393,21 @@ local cmdtotags = {
{a="textsf", b="hi", c=" rend=\"sf\""},
{a="arbup", b="hi", c=" rend=\"sup\""},
{a="txarb", b="s", c=" xml:lang=\"arb\""},
- {a="mbox", b="", c=""},
{a="arb", b="foreign",
c=" xml:lang=\"ar-Latn\" type=\"transliterated\" subtype=\"arabtex\""}
}
local texpatttotags = {
+ {a="\\addentries%s+%[(.-)%]{(.-)}", b=""},
+ {a="\\addentries%s+{(.-)}", b=""},
+ {a="\\setverselinenums%s+{(.-)}{(.-)}", b=""},
+ {a="\\resetlinenumber%s+%[(.-)%]", b=""},
+ {a="\\resetlinenumber%s+", b=""},
+ {a="\\poemlines%s+{(.-)}", b=""},
{a="\\pagebreak%s+%[[1-4]%]", b=""},
{a="\\pagebreak%s+", b=""},
{a="\\altrfont%s+", b=""},
+ {a="\\mbox%s+{(.-)}", b="%1"},
{a="\\LR%s+{(.-)}", b="%1"},
{a="\\RL%s+{(.-)}", b="%1"}
}
@@ -420,6 +484,10 @@ end
-- Get values of attributes
local function get_attr_value(str, attr)
str = str..","
+ str = string.gsub(str, "%b{}", function(body)
+ body = string.gsub(body, attr, attr.."@ekd")
+ return string.format("%s", body)
+ end)
local attrval = string.match(str, "%f[%w]"..attr.."%s?%=%s?%b{}")
or string.match(str, "%f[%w]"..attr.."%s?%=%s?.-%,")
or ""
@@ -428,6 +496,7 @@ local function get_attr_value(str, attr)
return string.format("%s", bbraces)
end)
attrval = string.gsub(attrval, attr.."%s?%=%s?(.-)%s?%,", "%1")
+ str = string.gsub(str, attr.."@ekd", attr)
return attrval
end
@@ -452,16 +521,21 @@ local function note_totei(str)
if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
right = get_attr_value(opt, "labelb")
left = get_attr_value(opt, "labele")
- if left ~= ""
+ if right == ""
then
- return string.format(
- "<%s%s target=\"#range(right(%s),left(%s))\">%s</%s><anchor xml:id=\"%s\"/>",
- cmd, teitype, right, left, arg, cmd, right)
- elseif left == ""
- then
- return string.format(
- "<%s%s target=\"#right(%s)\">%s</%s><anchor xml:id=\"%s\"/>",
- cmd, teitype, right, arg, cmd, right)
+ return string.format("<%s>%s</%s>", cmd, arg, cmd)
+ else
+ if left ~= ""
+ then
+ return string.format(
+ "<%s%s target=\"#range(right(%s),left(%s))\">%s</%s><anchor xml:id=\"%s\"/>",
+ cmd, teitype, right, left, arg, cmd, right)
+ elseif left == ""
+ then
+ return string.format(
+ "<%s%s target=\"#right(%s)\">%s</%s><anchor xml:id=\"%s\"/>",
+ cmd, teitype, right, arg, cmd, right)
+ end
end
end)
return str
@@ -486,6 +560,31 @@ local function app_totei(str)
return str
end
+local function rdgGrp_totei(str)
+ str = gsub(str,
+ dblbkslash *
+ lpeg.Cs("rdgGrp") *
+ spcenc^-1 *
+ bsqbrackets *
+ bcbraces *
+ spcenc^-1,
+ function(bkslash, cmd, opt, arg)
+ opt = string.sub(opt, 2, -2)
+ arg = string.sub(arg, 2, -2)
+ teitype = get_attr_value(opt, "type")
+ if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
+ if opt == ""
+ then
+ return rdgGrp_totei(string.format("<%s>%s</%s>",
+ cmd, arg, cmd))
+ else
+ return rdgGrp_totei(string.format("<%s%s>%s</%s>",
+ cmd, teitype, arg, cmd))
+ end
+ end)
+ return str
+end
+
local function lem_rdg_totei(str)
str = gsub(str,
spcenc^-1 *
@@ -502,6 +601,10 @@ local function lem_rdg_totei(str)
--
teiwit = get_attr_value(opt, "wit")
if teiwit ~= "" then teiwit = " wit=\""..ekdosis.getsiglum(teiwit, "tei").."\"" else end
+ teisource = get_attr_value(opt, "source")
+ if teisource ~= "" then teisource = " source=\""..ekdosis.getsiglum(teisource, "tei").."\"" else end
+ teiresp = get_attr_value(opt, "resp")
+ if teiresp ~= "" then teiresp = " resp=\""..ekdosis.getsiglum(teiresp, "tei").."\"" else end
teitype = get_attr_value(opt, "type")
if teitype ~= "" then teitype = " type=\""..teitype.."\"" else end
--
@@ -511,8 +614,8 @@ local function lem_rdg_totei(str)
cmd, arg, cmd))
else
-- opt = ekdosis.getsiglum(opt, "tei")
- return lem_rdg_totei(string.format("<%s%s%s>%s</%s>",
- cmd, teiwit, teitype, arg, cmd))
+ return lem_rdg_totei(string.format("<%s%s%s%s%s>%s</%s>",
+ cmd, teiwit, teisource, teiresp, teitype, arg, cmd))
end
end)
str = gsub(str, spcenc^-0 * dblbkslash * lemrdg * spcenc^-1 * bcbraces * spcenc^-1,
@@ -530,7 +633,7 @@ end
local function linestotei(str)
-- str = "\n<l>"..str
- str = string.gsub(str, "^%s?(.-)%s?$", "\n<l>%1</l>\n")
+ str = string.gsub(str, "^%s?(.-)\\\\[%!%*]?%s?$", "\n<l>%1</l>\n")
-- str = gsub(str, endpoem, "</l>\n")
str = gsub(str, poemline * spcenc^-1 * lpeg.P("&gt;"), "\n<lb/>")
str = gsub(str, poemline * spcenc^-1, "</l>\n<l>")
@@ -617,7 +720,7 @@ local function icitetotei(str)
* bsqbrackets
* bsqbrackets
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, pre, post, body, opt)
pre = string.sub(pre, 2, -2)
post = string.sub(post, 2, -2)
@@ -638,7 +741,7 @@ local function icitetotei(str)
* spcenc^-1
* bsqbrackets
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, post, body, opt)
post = string.sub(post, 2, -2)
body = string.sub(body, 2, -2)
@@ -657,7 +760,7 @@ local function icitetotei(str)
* citecmds
* spcenc^-1
* bcbraces
- * bsqbrackets^-1,
+ * (bsqbrackets + bcbraces)^-1,
function(cmd, body, opt)
body = string.sub(body, 2, -2)
if not checkxmlid(body)
@@ -709,6 +812,19 @@ local function cmdtotei(str)
return string.format("<ref target=\"%s\">%s</ref>",
teisiglum, printsiglum)
end)
+ str = string.gsub(str, "\\(gap)%s?(%b{})",
+ function(cmd, body)
+ body = string.sub(body, 2, -2)
+ teireason = get_attr_value(body, "reason")
+ if teireason ~= "" then teireason = " reason=\""..teireason.."\"" else end
+ teiunit = get_attr_value(body, "unit")
+ if teiunit ~= "" then teiunit = " unit=\""..teiunit.."\"" else end
+ teiquantity = get_attr_value(body, "quantity")
+ if teiquantity ~= "" then teiquantity = " quantity=\""..teiquantity.."\"" else end
+ teiextent = get_attr_value(body, "extent")
+ if teiextent ~= "" then teiextent = " extent=\""..teiextent.."\"" else end
+ return string.format("<gap%s%s%s%s/>", teireason, teiunit, teiquantity, teiextent)
+ end)
str = gsub(str, lpeg.P("\\") * labelrefcmds * spcenc^-1 * bcbraces,
function(cmd, body)
body = string.sub(body, 2, -2)
@@ -1072,6 +1188,7 @@ local function textotei(str)
str = texpatttotei(str)
str = note_totei(str)
str = app_totei(str)
+ str = rdgGrp_totei(str)
str = lem_rdg_totei(str)
str = relocate_notes(str)
str = versetotei(str)
@@ -1117,68 +1234,113 @@ function ekdosis.openteistream()
f:write("<distributor><!-- Distributor name --></distributor>", "\n")
f:write("</publicationStmt>", "\n")
f:write("<sourceDesc>", "\n")
- f:write("<listWit>", "\n")
- for i = 1,#listWit do
- f:write('<witness xml:id=\"', listWit[i].xmlid, "\">", "\n")
- f:write('<abbr type="siglum">', textotei(listWit[i].abbr), "</abbr>", "\n")
- f:write(textotei(listWit[i].detailsDesc), "\n")
- f:write("<msDesc>", "\n")
- if listWit[i].msIdentifier.settlement == ""
- and listWit[i].msIdentifier.institution == ""
- and listWit[i].msIdentifier.repository == ""
- and listWit[i].msIdentifier.collection == ""
- and listWit[i].msIdentifier.idno == ""
- and listWit[i].msIdentifier.msName == ""
+ if next(listWit) == nil and next(listPerson) == nil
+ then
+ f:write("<p>No source, born digital</p>", "\n")
+ else
+ if next(listWit) ~= nil
then
- f:write("<msIdentifier/>", "\n")
- else
- f:write("<msIdentifier>", "\n")
- if listWit[i].msIdentifier.settlement ~= "" then
- f:write("<settlement>", textotei(listWit[i].msIdentifier.settlement), "</settlement>", "\n")
+ f:write("<listWit>", "\n")
+ for i = 1,#listWit do
+ f:write('<witness xml:id=\"', listWit[i].xmlid, "\">", "\n")
+ f:write('<abbr type="siglum">', textotei(listWit[i].abbr), "</abbr>", "\n")
+ f:write(textotei(listWit[i].detailsDesc), "\n")
+ f:write("<msDesc>", "\n")
+ if listWit[i].msIdentifier.settlement == ""
+ and listWit[i].msIdentifier.institution == ""
+ and listWit[i].msIdentifier.repository == ""
+ and listWit[i].msIdentifier.collection == ""
+ and listWit[i].msIdentifier.idno == ""
+ and listWit[i].msIdentifier.msName == ""
+ then
+ f:write("<msIdentifier/>", "\n")
+ else
+ f:write("<msIdentifier>", "\n")
+ if listWit[i].msIdentifier.settlement ~= "" then
+ f:write("<settlement>", textotei(listWit[i].msIdentifier.settlement), "</settlement>", "\n")
else end
- if listWit[i].msIdentifier.institution ~= "" then
- f:write("<institution>", textotei(listWit[i].msIdentifier.institution), "</institution>", "\n")
+ if listWit[i].msIdentifier.institution ~= "" then
+ f:write("<institution>", textotei(listWit[i].msIdentifier.institution), "</institution>", "\n")
else end
- if listWit[i].msIdentifier.repository ~= "" then
- f:write("<repository>", textotei(listWit[i].msIdentifier.repository), "</repository>", "\n")
+ if listWit[i].msIdentifier.repository ~= "" then
+ f:write("<repository>", textotei(listWit[i].msIdentifier.repository), "</repository>", "\n")
else end
- if listWit[i].msIdentifier.collection ~= "" then
- f:write("<collection>", textotei(listWit[i].msIdentifier.collection), "</collection>", "\n")
+ if listWit[i].msIdentifier.collection ~= "" then
+ f:write("<collection>", textotei(listWit[i].msIdentifier.collection), "</collection>", "\n")
else end
- if listWit[i].msIdentifier.idno ~= "" then
- f:write("<idno>", textotei(listWit[i].msIdentifier.idno), "</idno>", "\n")
+ if listWit[i].msIdentifier.idno ~= "" then
+ f:write("<idno>", textotei(listWit[i].msIdentifier.idno), "</idno>", "\n")
else end
- if listWit[i].msIdentifier.msName ~= "" then
- f:write("<msName>", textotei(listWit[i].msIdentifier.msName), "</msName>", "\n")
+ if listWit[i].msIdentifier.msName ~= "" then
+ f:write("<msName>", textotei(listWit[i].msIdentifier.msName), "</msName>", "\n")
else end
- f:write("</msIdentifier>", "\n")
+ f:write("</msIdentifier>", "\n")
+ end
+ if listWit[i].handDesc ~= nil then
+ f:write("<physDesc>", "\n")
+ f:write("<handDesc hands=\"", #listWit[i].handDesc, "\">", "\n")
+ local j = 1
+ while listWit[i].handDesc[j]
+ do
+ f:write("<handNote xml:id=\"", listWit[i].handDesc[j].xmlid, "\">", "\n")
+ f:write('<abbr type="siglum">', textotei(listWit[i].handDesc[j].abbr), "</abbr>", "\n")
+ f:write("<p>", textotei(listWit[i].handDesc[j].detailsDesc), "</p>", "\n")
+ f:write("</handNote>", "\n")
+ j = j + 1
+ end
+ f:write("</handDesc>", "\n")
+ f:write("</physDesc>", "\n")
+ else end
+ if listWit[i].history ~= nil then
+ f:write("<history>", "\n")
+ f:write("<origin>", "\n")
+ f:write("<origDate>", textotei(listWit[i].history.origin.origDate), "</origDate>", "\n")
+ f:write("</origin>", "\n")
+ f:write("</history>", "\n")
+ end
+ f:write("</msDesc>", "\n")
+ f:write("</witness>", "\n")
+ end
+ f:write("</listWit>", "\n")
end
- if listWit[i].handDesc ~= nil then
- f:write("<physDesc>", "\n")
- f:write("<handDesc hands=\"", #listWit[i].handDesc, "\">", "\n")
- local j = 1
- while listWit[i].handDesc[j]
- do
- f:write("<handNote xml:id=\"", listWit[i].handDesc[j].xmlid, "\">", "\n")
- f:write('<abbr type="siglum">', textotei(listWit[i].handDesc[j].abbr), "</abbr>", "\n")
- f:write("<p>", textotei(listWit[i].handDesc[j].detailsDesc), "</p>", "\n")
- f:write("</handNote>", "\n")
- j = j + 1
+ if next(listPerson) ~= nil
+ then
+ f:write("<listPerson xml:id=\"scholars\">", "\n")
+ for i = 1,#listPerson do
+ f:write('<person xml:id=\"', listPerson[i].xmlid, "\">", "\n")
+ f:write('<persName>', "\n")
+ f:write('<abbr type="siglum">', textotei(listPerson[i].abbr), "</abbr>", "\n")
+ if listPerson[i].persName.name ~= nil
+ then
+ f:write(textotei(listPerson[i].persName.name))
+ else
+ if listPerson[i].persName.forename ~= ""
+ then
+ f:write("<forename>", textotei(listPerson[i].persName.forename), "</forename>", "\n")
+ else
+ f:write("<forename><!-- forename --></forename>", "\n")
+ end
+ if textotei(listPerson[i].persName.surname) ~= ""
+ then
+ f:write("<surname>", textotei(listPerson[i].persName.surname), "</surname>", "\n")
+ else
+ f:write("<surname><!-- surname --></surname>", "\n")
+ end
+ if textotei(listPerson[i].persName.addName) ~= ""
+ then
+ f:write("<addName>", textotei(listPerson[i].persName.addName), "</addName>", "\n")
+ end
+ end
+ if listPerson[i].note ~= ""
+ then
+ f:write("<note>", textotei(listPerson[i].note), "</note>", "\n")
+ end
+ f:write('</persName>', "\n")
+ f:write('</person>', "\n")
end
- f:write("</handDesc>", "\n")
- f:write("</physDesc>", "\n")
- else end
- if listWit[i].history ~= nil then
- f:write("<history>", "\n")
- f:write("<origin>", "\n")
- f:write("<origDate>", textotei(listWit[i].history.origin.origDate), "</origDate>", "\n")
- f:write("</origin>", "\n")
- f:write("</history>", "\n")
+ f:write("</listPerson>", "\n")
end
- f:write("</msDesc>", "\n")
- f:write("</witness>", "\n")
end
- f:write("</listWit>", "\n")
f:write("</sourceDesc>", "\n")
f:write("</fileDesc>", "\n")
f:write("<encodingDesc>", "\n")
@@ -1582,10 +1744,10 @@ function ekdosis.get_bagunits(teitype)
return bagunits[teitype]
end
-local function getapplimit(str)
+local function getapplimit(teitype)
for i = 1,#apparatuses
do
- if apparatuses[i].a == str then
+ if apparatuses[i].a == teitype then
limitfound = apparatuses[i].limit
break
end
@@ -1614,6 +1776,14 @@ function ekdosis.limit_bagunits(teitype)
end
end
+function ekdosis.addto_bagunits(teitype, n)
+ if tonumber(getapplimit(teitype)) ~= 0
+ then
+ n = tonumber(n)
+ bagunits[teitype] = bagunits[teitype] - n
+ end
+end
+
function ekdosis.increment_bagunits(teitype)
bagunits[teitype] = (bagunits[teitype] or 0) + 1
end
diff --git a/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty b/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty
index 3e8a82fbb1f..3e8094f9c14 100644
--- a/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty
+++ b/Master/texmf-dist/tex/lualatex/ekdosis/ekdosis.sty
@@ -41,7 +41,7 @@
%% Running "make inst" installs the files in the user's TeX tree.
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{ekdosis}
- [2020/08/14 v1.0 Typesetting TEI xml compliant critical editions]
+ [2020/11/04 v1.1 Typesetting TEI xml-compliant critical editions]
\RequirePackage{iftex}
\RequireLuaTeX
\RequirePackage{expkv-opt}
@@ -64,6 +64,7 @@
initial divs = ekdosis,
unknown-choice divs = \PackageError{ekdosis}{unknown divs=#1}{`divs'
must be either `ekdosis' or `latex'.},
+ bool verse = \if@pkg@verse,
choice parnotes = {false = {},
true = {\@pkg@parnotestrue},
roman = {\@pkg@parnotestrue\@parnotesromantrue}},
@@ -86,7 +87,6 @@
\ekvoProcessLocalOptions{ekdosis}
\RequirePackage{luacode}
\RequirePackage{paracol}
-\RequirePackage{xparse}
\RequirePackage{etoolbox}
\RequirePackage{lineno}
\RequirePackage{keyfloat}
@@ -94,8 +94,11 @@
\RequirePackage{zref-user}
\RequirePackage{zref-abspage}
\RequirePackage{ltxcmds}
-\RequirePackage{atbegshi}
+\RequirePackage{pdftexcmds}
\RequirePackage{ifoddpage}
+\if@pkg@verse
+ \RequirePackage{verse}
+\fi
\if@pkg@parnotes
\RequirePackage{parnotes}
\fi
@@ -145,11 +148,32 @@
\luastringN{#4})}
}
\@onlypreamble\DeclareHand
-\NewDocumentCommand{\DeclareScholar}{m m}{
- \luadirect{ekdosis.newscholar(\luastringN{#1},
- \luastringN{#2})}
+\ekvdefinekeys{ekd@scholar}{
+ store rawname = \rawname@value,
+ store forename = \forename@value,
+ store surname = \surname@value,
+ store addname = \addname@value,
+ store note = \note@value
}
+\NewDocumentCommand{\DeclareScholar}{m m O{}}{%
+ \bgroup
+ \ekvset{ekd@scholar}{#3}
+ \luadirect{ekdosis.newscholar(
+ \luastringN{#1},
+ \luastringN{#2},
+ \luastringO{\rawname@value},
+ \luastringO{\forename@value},
+ \luastringO{\surname@value},
+ \luastringO{\addname@value},
+ \luastringO{\note@value})}
+ \egroup
+ }
\@onlypreamble\DeclareScholar
+\NewDocumentCommand{\DeclareSource}{m m}{
+ \luadirect{ekdosis.newsource(\luastringN{#1},
+ \luastringN{#2})}
+}
+\@onlypreamble\DeclareSource
\NewDocumentCommand{\DeclareShorthand}{m m m}{
\luadirect{ekdosis.newshorthand(\luastringN{#1},
\luastringN{#2},
@@ -189,17 +213,17 @@
\luastringN{#4})}
}
}
-\NewDocumentCommand{\TeXtoTEIPatt}{m m}{%
+\NewDocumentCommand{\TeXtoTEIPat}{m m}{%
\luadirect{ekdosis.newpatttotag(\luastringN{#1}, \luastringN{#2})}
}
\NewDocumentCommand{\SetTEIFileName}{m}{
\luadirect{ekdosis.setteifilename(\luastringN{#1})}
}
\@onlypreamble\SetTEIFileName
-\NewDocumentCommand{\SetxmlBibResource}{m}{
- \luadirect{ekdosis.setxmlbibresource(\luastringN{#1})}
+\NewDocumentCommand{\AddxmlBibResource}{m}{
+ \luadirect{ekdosis.addxmlbibresource(\luastringN{#1})}
}
-\@onlypreamble\SetxmlBibResource
+\@onlypreamble\AddxmlBibResource
\newif\ifekd@mapps
\ekvdefinekeys{ekd@newapp}{
choice direction = {LR = \def\direction@val{LR},
@@ -236,6 +260,10 @@
\egroup
}
\@onlypreamble\DeclareApparatus
+\NewDocumentCommand{\addentries}{O{\ekdan@type} m}{%
+ \luadirect{ekdosis.addto_bagunits(\luastringO{#1}, \luastringN{#2})}%
+ \ignorespaces
+}
\newbool{do@app}
\newif\ifekd@state
\newif\ifekd@isinapp
@@ -327,6 +355,7 @@
\ignorespaces}
\newif\ifsubsq@unit
\subsq@unittrue
+\newif\ifekd@inside@app
\def\add@@apparatus{%
\if@pkg@parnotes\parnotes\else\fi%
\if@pkg@footins%
@@ -337,8 +366,10 @@
\if@parnotesroman%
\renewcommand*{\theparnotemark}{\roman{parnotemark}}\else\fi%
\parnoteclear\else\fi%
+ \ekd@inside@apptrue
\footnotesize\apparatus\unless\ifekd@mapps\ekd@end@apparatus\fi%
- \if@pkg@parnotes\parnotes\parnotereset\else\fi%
+ \ekd@inside@appfalse
+ \if@pkg@parnotes\parnotes\parnotereset\else\fi
}%
\egroup%
\fi%
@@ -348,7 +379,9 @@
\if@parnotesroman%
\renewcommand*{\theparnotemark}{\roman{parnotemark}}\else\fi%
\parnoteclear\else\fi%
+ \ekd@inside@apptrue
\ekd@appfontsize\apparatus\unless\ifekd@mapps\ekd@end@apparatus\fi%
+ \ekd@inside@appfalse
\if@pkg@parnotes\parnotes\parnotereset\else\fi%
}%
\fi%
@@ -396,7 +429,7 @@
\NewDocumentCommand{\ekdatbegshihook}{}{%
\ifekd@pagelineation\resetlinenumber\fi
}
-\AtBeginShipout{\ekdatbegshihook}
+\AddToHook{shipout/before}{\ekdatbegshihook}
\newif\ifekd@elidednumbers
\ekvdefinekeys{ekd@lineation}{
choice lineation = {page = \ekd@pagelineationtrue,
@@ -405,6 +438,9 @@
lineation=#1}{`lineation' must be either `page' or `document'.},
code modulonum = \chardef\c@linenumbermodulo#1\relax,
noval modulo = \modulolinenumbers,
+ code vmodulonum = \if@pkg@verse\poemlines{#1}\fi,
+ initial vmodulonum = 1,
+ noval vmodulo = \if@pkg@verse\poemlines{5}\fi,
choice numbers = {elided = \ekd@elidednumberstrue,
full = \ekd@elidednumbersfalse},
unknown-choice numbers = \PackageError{ekdosis}{unknown
@@ -429,6 +465,7 @@
\NewDocumentCommand{\SetDefaultApparatus}{m}{%
\ekvset{appnote}{type=#1}}
\NewDocumentCommand{\app}{O{} > { \TrimSpaces } +m}{%
+ \leavevmode
\begingroup
\ekvset{appnote}{#1}%
\ekd@isinapptrue%
@@ -443,9 +480,9 @@
\def\current@ref@arg#1#2{{%\textdir TLT%
\unexpanded\expandafter{\ekd@refnumstyle}%
\ifnum%
- \getpagerefnumber{#1}
+ \pdf@strcmp{\getpagerefnumber{#1}}{\getpagerefnumber{#2}}
=
- \getpagerefnumber{#2}
+ 0
\ifnum%
\getrefnumber{#1}
=
@@ -497,9 +534,11 @@
\def\current@ref{{%\textdir TLT%
\unexpanded\expandafter{\ekd@refnumstyle}%
\ifnum%
- \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}
+ \pdf@strcmp{%
+ \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}}%
+ {\getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-e}}
=
- \getpagerefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-e}
+ 0
\ifnum%
\getrefnumber{\luadirect{tex.sprint(ekdosis.getlnlab())}-b}
=
@@ -550,6 +589,8 @@
}
\ekvdefinekeys{lem}{
code wit = \def\ekdlr@wit{#1},
+ code source = \def\ekdlr@source{#1},
+ code resp = \def\ekdlr@resp{#1},
code alt = \def\ekdlr@alt{#1},
code pre = \def\ekdlr@pre{#1},
code post = \def\ekdlr@post{#1},
@@ -563,6 +604,8 @@
}
\ekvdefinekeys{rdg}{
code wit = \def\ekdlr@wit{#1},
+ code source = \def\ekdlr@source{#1},
+ code resp = \def\ekdlr@resp{#1},
code alt = \def\ekdlr@alt{#1},
code pre = \def\ekdlr@pre{#1},
code post = \def\ekdlr@post{#1},
@@ -571,6 +614,9 @@
store type = \ekdlr@type,
bool nordg = \ifekdr@nordg
}
+\NewDocumentCommand{\rdgGrp}{O{} > {\TrimSpaces } m}{%
+ \luadirect{tex.sprint(ekdosis.removesp(\luastringN{#2}))}%
+}
\NewDocumentCommand{\lem}{O{} m}{%
\ekd@isinlemtrue%
\luadirect{ekdosis.dolnlab(\luastringN{#2})}%
@@ -623,6 +669,8 @@
\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
@@ -660,6 +708,8 @@
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
\ifekdl@nosep\else\unexpanded\expandafter{\ekdl@sep}\fi
@@ -705,6 +755,8 @@
\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
@@ -733,6 +785,8 @@
\ifdefined\ekdlr@prewit%
\space\unexpanded\expandafter{\ekdlr@prewit}\space\else\fi
\ifdefined\ekdlr@wit\space\getsiglum{\ekdlr@wit}\else\fi
+ \ifdefined\ekdlr@source\space\getsiglum{\ekdlr@source}\else\fi
+ \ifdefined\ekdlr@resp\space\getsiglum{\ekdlr@resp}\else\fi
\ifdefined\ekdlr@postwit%
\space\unexpanded\expandafter{\ekdlr@postwit}\else\fi
}%
@@ -756,7 +810,7 @@
initial sep = \ekdsep
}
\NewDocumentCommand{\note@noapp}{O{} +m}{%
- \null
+ \leavevmode
\bgroup%
\ekvset{note}{#1}%
\stepcounter{ekd@lab}%
@@ -834,10 +888,10 @@
\bgroup%
\ekvset{ekd@note}{#1}%
\edef\note@contents{%
- \ekvifdefinedNoVal{note}{pre}{}{%
+ \ekvifdefinedNoVal{ekd@note}{pre}{}{%
\unexpanded\expandafter{\pre@value}}%
{\unexpanded{#2}}%
- \ekvifdefinedNoVal{note}{post}{}{%
+ \ekvifdefinedNoVal{ekd@note}{post}{}{%
\unexpanded\expandafter{\post@value}}%
}%
\append@app{\note@contents}%
@@ -848,10 +902,10 @@
\bgroup%
\ekvset{ekd@note}{#1}%
\edef\note@contents{%
- \ekvifdefinedNoVal{note}{pre}{}{%
+ \ekvifdefinedNoVal{ekd@note}{pre}{}{%
\unexpanded\expandafter{\pre@value}}%
\unskip\noexpand\parnote{\unexpanded{#2}}%
- \ekvifdefinedNoVal{note}{post}{}{%
+ \ekvifdefinedNoVal{ekd@note}{post}{}{%
\unexpanded\expandafter{\post@value}}%
}%
\append@app{\note@contents}%
@@ -883,6 +937,51 @@
\fi%
\fi%
}
+\ekvdefinekeys{ekd@corr}{
+ store suppbegin = \suppb@value,
+ store suppend = \suppe@value,
+ store delbegin = \delb@value,
+ store delend = \dele@value,
+ store sicbegin = \sicb@value,
+ store sicend = \sice@value,
+ store gapmark = \gapm@value,
+ initial suppbegin = \ifbool{al@rlmode}{>}{<},
+ initial suppend = \ifbool{al@rlmode}{<}{>},
+ initial delbegin = \ifbool{al@rlmode}{\}}{\{},
+ initial delend = \ifbool{al@rlmode}{\{}{\}},
+ initial sicbegin = \dag,
+ initial sicend = \dag,
+ initial gapmark = ***
+}
+\NewDocumentCommand{\supplied}{m}{%
+ \ifekd@inside@app
+ #1%
+ \else
+ \suppb@value #1\suppe@value
+ \fi
+}
+\NewDocumentCommand{\surplus}{m}{%
+ \ifekd@inside@app
+ #1%
+ \else
+ \delb@value #1\dele@value
+ \fi
+}
+\NewDocumentCommand{\sic}{s m}{%
+ \ifekd@inside@app
+ #2%
+ \else
+ \IfBooleanTF{#1}
+ {\sicb@value #2}
+ {\sicb@value #2\sice@value}%
+ \fi
+}
+\NewDocumentCommand{\gap}{m}{%
+ \gapm@value
+}
+\NewDocumentCommand{\SetCritSymbols}{m}{
+ \ekvset{ekd@corr}{#1}
+}
\NewDocumentCommand{\apparatus}{}{%
\luadirect{tex.sprint(ekdosis.appout())}}
\NewDocumentCommand{\test@apparatus}{}{%
@@ -1048,9 +1147,39 @@
\fi
\endgroup
}
+\if@pkg@verse
+\verselinenumfont{\normalfont\footnotesize}
+\setcounter{poemline}{1}
+\NewDocumentEnvironment{ekdverse}{O{\linewidth}}{%
+ \nolinenumbers
+ \let\linelabel\label
+ \stepcounter{verse@envctr}%
+ \addtocounter{poemline}{-1}\refstepcounter{poemline}%
+ \setcounter{vslineno}{1}%
+ \let\\=\@vscentercr
+ \list{}{\itemsep \z@
+ \itemindent -\vindent%
+ \listparindent\itemindent
+ \parsep \stanzaskip
+ \setlength{\itemsep}{0pt}%
+ \setlength{\topsep}{0pt}%
+ \setlength{\partopsep}{0pt}%
+ \ifdim #1 < \linewidth
+ \rightmargin \z@
+ \setlength{\leftmargin}{\linewidth}%
+ \addtolength{\leftmargin}{-#1}%
+ \addtolength{\leftmargin}{-0.5\leftmargin}%
+ \else
+ \rightmargin \leftmargin
+ \fi
+ \addtolength{\leftmargin}{\vindent}}%
+ \item[]%
+}
+{\endlist}
+\else
\newlength{\ekdverseindentlength}
\setlength{\ekdverseindentlength}{\parindent}
-\newenvironment*{ekdverse}[1][\ekdverseindentlength]{
+\NewDocumentEnvironment{ekdverse}{O{\ekdverseindentlength}}{
\begin{list}{}{%
\setlength{\leftmargin}{#1}
\setlength{\itemsep}{0pt}
@@ -1059,6 +1188,7 @@
}
\item[]
}{\end{list}}
+\fi
\NewDocumentEnvironment{ekdpar}{}{\par}{\par}
\endinput
%%