From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/eledform/eledform.dtx | 354 +++++++++++++++++++++++++++++
 1 file changed, 354 insertions(+)
 create mode 100644 macros/latex/contrib/eledform/eledform.dtx

(limited to 'macros/latex/contrib/eledform/eledform.dtx')

diff --git a/macros/latex/contrib/eledform/eledform.dtx b/macros/latex/contrib/eledform/eledform.dtx
new file mode 100644
index 0000000000..31114fc74d
--- /dev/null
+++ b/macros/latex/contrib/eledform/eledform.dtx
@@ -0,0 +1,354 @@
+%\iffalse meta-comment
+%
+% Copyright (C) 2012 by Maïeul Rouquette 
+%
+% This file may be distributed and/or modified under the 
+% conditions of the LaTeX Project Public License, either 
+% version 1.3 of this license or (at your option) any later 
+% version. The latest version of this license is in: 
+%
+% http://www.latex-project.org/lppl.txt 
+%
+% and version 1.3 or later is part of all distributions of 
+% LaTeX version 2003/06/01 or later.
+% This work has the LPPL maintenance status "unmaintained".
+%
+% \fi
+
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{polyglossia,csquotes}
+\setmainlanguage{english}
+\usepackage[noreledmac]{eledmac}
+\usepackage{eledform,tikz,tikz-qtree}
+\usepackage{hyperref}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{eledform.dtx} 
+\end{document}
+%</driver>
+% \fi
+% \CheckSum{106}
+% \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
+%   Lower-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
+%   Digits        \0\1\2\3\4\5\6\7\8\9
+%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%   Dollar        \$     Percent       \%    Ampersand     \&
+%   Acute accent  \'     Left paren    \(     Right paren   \)
+%   Asterisk      \*     Plus          \+     Comma         \,
+%   Minus         \-     Point         \.     Solidus       \/
+%   Colon         \:     Semicolon     \;     Less than     \<
+%   Equals        \=     Greater than  \>     Question mark \?
+%   Commercial at \@     Left bracket  \[     Backslash     \\
+%   Right bracket \]     Circumflex    \^     Underscore    \_
+%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%   Right brace   \}     Tilde         \~}
+%
+% \changes{v1.0}{2012/10/01}{First public release.}
+% \changes{v1.1}{2012/10/08}{News options to change the order of the elements.}
+% \changes{v1.1a}{2015/13/08}{Package unmaintened.}
+% \GetFileInfo{eledform.sty}
+%\DoNotIndex{\csgdef,\if,\fi,\else,\listgadd}
+%
+%\title{The eledform extension for eledmac}
+% \author{Maïeul Rouquette \\ maieul at maieul dot net}
+% \date{\fileversion\space\filedate}
+% \maketitle
+% \textbf{This package is unmaintened. 
+% Maïeul Rouquette has no more time to maintain it.
+% }
+% \begin{abstract}
+% The \emph{eledmac} package provides tools to make critical editions of texts.
+% But it doesn't provide any formalism to note the textual variants: each user has to make his own formalism.
+% This package tries to provide a formalism
+% which distinguishes between the \emph{formal} notation of textual variants and their typographical notation\footnote{The original idea of this package is described at \url{http://geekographie.maieul.net/Formaliser-les-variantes}. You can suggest new features or report bugs at \url{https://github.com/maieul/eledform/issues}.}.
+% \end{abstract}
+% \tableofcontents
+% \section{Use}
+% \subsection{One Example}
+% \subsubsection{Without formalism}
+% Suppose this case :
+% \begin{enumerate}
+% \item One text, with fives manuscripts: P, A, B, C, D.
+% P is the manuscript which is used as reference.
+% Variants in A, B, C, D are shown in the apparatus.
+% \item The pseudo-word \enquote{lorem} has these variants:
+%     \begin{description}
+%       \item[A and B]the word is omitted.
+%      \item[C]the word is replaced by \enquote{loram}.
+%      \item[D]the word is replaced by \enquote{lorim}. 
+%     \end{description}
+% \end{enumerate}
+% Without formalism, you could write:
+% \begin{verbatim}
+% \edtext{lorem}{\Afootnote{AB \emph{omit}; C loram; D lorim}}
+% \end{verbatim}
+% Which produces this critical note:
+% \begin{quote}
+% lorem] AB omit; C loram; D lorim
+% \end{quote}
+% There are some limits for this method:
+% \begin{itemize}
+% \item If we want to change display, we must changes all notes.
+% \item We can't produce statistics.
+% \item Difficulty to export in other format than \LaTeX.
+% \item No method to check if we're making mistakes regarding to the manuscripts.
+% \end{itemize}
+% \subsubsection{With formalism}
+% To describe the same situation, we propose this formalism :
+% \begin{verbatim}
+%\var{lorem}{A,B}{
+%{{C}{loram}},
+%{{D}{lorim}}
+%}
+% \end{verbatim}
+% With \emph{eledform}, this will produce the same result as the non-formalised form,
+% but without the described inconveniences.
+% You can see an example in the file \href{example.tex}{example.tex}, which produces \href{example.pdf}{example.pdf}.
+% \subsection{References}
+% \subsubsection{Declare the manuscripts}
+% \DescribeMacro{\manuscripts}
+% You have to use \cs{Manuscripts}\marg{list}
+% to provide the list of manuscripts used in the apparatus.
+% \LaTeX\ prints a warning message in the log file if you're referring to a
+% manuscript that is not declared before.
+% It also prints an error in the resulting file.
+% The list of manuscripts is a comma separated list:
+% \begin{verbatim}
+% \manuscripts{A,B,C,D}
+% \end{verbatim}
+% \subsubsection{Declare variants}
+% \DescribeMacro{\var}
+% The main macro is \cs{var}\oarg{short}\marg{lemma}\marg{del}\marg{variants}\oarg{other}.
+% This macro takes five arguments, two are optional.
+% \begin{description}
+%   \item[\meta{short}  (optional)]an abbreviated version of the lemma for the notes.
+%   \item[\meta{lemma}]the lemma which has variants.
+%   \item[\meta{del}]a comma separated list of manuscripts where the lemma is ommited.
+%   \item[\meta{variants}]a comma separated list of variants. Each variant has the form \verb+{+\marg{manuscripts}\marg{variant}\verb+}+, where:
+%     \begin{description}
+%      \item[\meta{manuscripts}]a comma separated list of manuscripts where the variant is.
+%      \item[\meta{variant}]the variant itself.
+%      \end{description}
+%   \item[\meta{other}(optional)]other code linked to the lemma, for example a call to an critical footnote. 
+% \end{description}
+% \subsubsection{Customize}
+% \DescribeMacro{\manposition}
+% By default (since v1.1), the manuscripts are printed after the variant. 
+% With \cs{manposition}\marg{position}, where position is any text except \verb+last+, you can change it.
+%
+% \DescribeMacro{\omitposition}
+% By default, the omission are printed at the begining of the variants. 
+% With \cs{omitposition}\marg{position}, where position is any text except \verb+first+, you can change it.
+% 
+% \DescribeMacro{\varseries}
+% By default, the notes for textual variants are printed in the A series of footnotes.
+% With \cs{varseries}\marg{letter}, you can change it.
+%
+% \DescribeMacro{\omittext}
+% When a manuscript omits a lemma, \emph{eledform} prints \verb|\emph{omit}|.
+% You can change it with \cs{omittext}\marg{text}.
+% 
+% \DescribeMacro{\manvarseparator}
+% By default, a non breakable space is printed between the manuscript letter and the variant.
+% You can change it with \cs{manvarseparator}\marg{separator}.
+%
+% \DescribeMacro{\varseparator}
+% By default, a breakable space is printed between each variant of a lemma. 
+% You can change it with \cs{varseparator}\marg{separator}.
+%\StopEventually{\PrintChanges}
+% \section{Implementation}
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{eledform}[2015/08/13 v1.1a formalism for eledmac]
+\RequirePackage{eledmac}
+%    \end{macrocode}
+% \subsection{Define manuscripts}
+% \begin{macro}{\manuscripts@}
+% The \cs{manuscripts@} macro is an etoolbox list.
+%    \begin{macrocode}
+\def\manuscripts@{}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\manuscripts}
+% The \cs{manuscripts} macro only fills the \cs{manuscripts} macro.
+%    \begin{macrocode}
+\newcommand{\manuscript}[1]{%
+    \renewcommand{\do}[1]{\listgadd{\manuscripts@}{##1}}%
+    \docsvlist{#1}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \subsection{Print the critical notes}
+% \begin{macro}{\var}
+% The \cs{var} macro is the only public macro, which calls all private macros.
+%    \begin{macrocode}
+\newcommandx*{\var}[5][1,5,usedefault]{%
+%    \end{macrocode}
+% First, call the \cs{edtext} macro.
+%    \begin{macrocode}
+    \edtext{#2}{%
+%    \end{macrocode}
+% If the \cs{var} macro is called with the optional first argument, 
+% we put it into the \cs{lemma} macro.
+%    \begin{macrocode}
+        \ifstrempty{#1}{}{\lemma{#1}}%
+%    \end{macrocode}
+% The \cs{varnote@} macro is an Xfootnote macro defined by user, with the \cs{varnote} macro (cf.~\pageref{varnote}).
+%    \begin{macrocode}
+        \varnote@{%
+%    \end{macrocode}
+% In the case where the manuscripts with omission must be printed in first position.
+% \begin{macrocode}
+        \ifdefstring{\omitposition@}{first}{
+% \end{macrocode}
+% If the third argument is not empty, we call the \cs{del@} macro, which print the manuscript where the lemma is omitted
+%    \begin{macrocode}
+            \ifstrempty{#3}{}%
+                {\del@{#3}%
+%    \end{macrocode}
+%  If the third and fourth argument are both not empty, we print the separator between variants.
+%    \begin{macrocode}
+                \ifstrempty{#4}%
+                    {}%
+                    {\varseparator@}%
+                }%
+%    \end{macrocode}
+% And so, we print all the variants which are not an omission.
+%  \begin{macrocode}
+                    \var@{#4}%
+%    \end{macrocode}
+% The same thing, but if the manuscripts with omission must be printed in last position.
+% \begin{macrocode}
+            }%
+            {%
+            \ifstrempty{#4}%
+                    {}%
+                    {\var@{#4}%
+                    \ifstrempty{#3}%
+                        {}%
+                        {\varseparator@}%
+                    }%
+            \ifstrempty{#3}{}{\del@{#3}}%
+            }%
+        }%
+% \end{macrocode}
+% Eventually, we add the critical notes which are not for textual criticism.
+% \begin{macrocode}
+    #5%
+    }%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\print@manuscript}
+% The \cs{print@manuscripts} command only prints the manuscripts where a variant exists.
+%    \begin{macrocode}
+\newcommand{\print@manuscript}[1]{%
+    \ifinlist{#1}{\manuscripts@}%
+        {#1}%
+        {\eledmac@warning{Manuscript #1 not declared, p.\the\page@num  ; l.\the\line@num}\underline{Manuscript #1 not declared!}}%
+    }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\del@}
+% The \cs{del@} macro prints the manuscripts where the lemma is omitted,
+% and after that, the text to indicate this omission.
+%    \begin{macrocode}
+\newcommand{\del@}[1]{%
+    \renewcommand{\do}[1]{%
+        \print@manuscript{##1}%
+    }%
+    \ifdefstring{\manposition@}{last}%
+            {\omittext@\manvarseparator@\docsvlist{#1}}%
+            {\docsvlist{#1}\manvarseparator@\omittext@}%
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\var@}
+% The \cs{var@} macro loops on the non omission variants. 
+% Except for the first variant, it prints the variant separator.
+%    \begin{macrocode}
+\newcommand{\var@}[1]{%
+    \newif\iffirst%
+    \firsttrue%
+    \renewcommand{\do}[1]{\iffirst\firstfalse\else\varseparator@\fi{\var@@##1}}%
+    \docsvlist{#1}%
+    }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\var@@}
+% The \cs{var@@} macro prints manuscripts for a singular variant
+% and this variant after that.
+%    \begin{macrocode}
+\newcommand{\var@@}[2]{%
+    \renewcommand{\do}[1]{%
+        \print@manuscript{##1}%
+        }%
+    \ifdefstring{\manposition@}{last}%
+            {#2\manvarseparator@\docsvlist{#1}}%
+            {\docsvlist{#1}\manvarseparator@#2}%
+    }
+%    \end{macrocode}
+% \end{macro}
+% \subsection{Customization}
+% \subsubsection{The footnote series}
+% \begin{macro}{\varnote@}\label{varnote}
+% The \cs{varnote@} macro is only a reference to a critical footnote macro of eledmac.
+% The default  is \cs{Afootnote}.
+%    \begin{macrocode}
+\let\varnote@\Afootnote
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\varseries}
+% The \cs{varseries} macro redefines this reference.
+%    \begin{macrocode}
+\newcommand{\varseries}[1]{\letcs{\varnote@}{#1footnote}}
+%    \end{macrocode}
+% \end{macro}
+% \subsubsection{Display options}
+% \begin{macro}{\new@eledform@custom}
+% The \cs{new@eledform@custom} macro has two actions :
+% \begin{enumerate}
+%    \item Define the default value of an option (\cs{option@}).
+%    \item Create the command which modifies this option (\cs{option}).
+% \end{enumerate}
+%    \begin{macrocode}
+\newcommand{\new@eledform@custom}[2]{%
+    \csgdef{#1@}{#2}%
+    \expandafter\newcommand\csname#1\endcsname[1]{\csgdef{#1@}{##1}}%
+}
+%    \end{macrocode}
+% \end{macro}
+% And so, we can call \cs{new@eledform@custom} to define options for user.
+% \begin{macro}{\omittext}
+% \begin{macro}{\manvarseparator}
+% \begin{macro}{\varseparator}
+% \begin{macro}{\manposition}
+% \begin{macro}{\omitposition}
+%    \begin{macrocode}
+\new@eledform@custom{omitposition}{first}
+\new@eledform@custom{manposition}{last}
+\new@eledform@custom{omittext}{\emph{omit}}
+\new@eledform@custom{manvarseparator}{~}
+\new@eledform@custom{varseparator}{\space}
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \subsection{Stemma of the code}
+% The next figure is a stemma of the code.
+%
+% \hspace{-3cm}\noindent\input{include/stemma}
+% \newpage
+% \addcontentsline{toc}{section}{Changes}
+% \PrintChanges
+% \addcontentsline{toc}{section}{Index}
+% \PrintIndex
+% \Finale
+\endinput
-- 
cgit v1.2.3

