From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining 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} +% +% \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