summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/eledform/eledform.dtx
blob: 31114fc74db236d18805bdc80b6879993335b33b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
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