summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/eledform/eledform.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/eledform/eledform.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/eledform/eledform.dtx')
-rw-r--r--macros/latex/contrib/eledform/eledform.dtx354
1 files changed, 354 insertions, 0 deletions
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