Notre exemple
Soit cinq manuscrits d’un texte : P, A, B, C, D. P est le manuscrit qui sert de référence. Les variantes de A, B, C, D sont indiquées dans l’apparat.
Soit le pseudo-mot « Lorem ». Ce mot subit les variantes suivantes :
- manuscrits A et B : mot omis.
- manuscrit C : mot remplacé par « loram ».
- manuscrit D : mot remplacé par « lorim ».
Approche non formalisée
Si on ne formalise notre apparat, on pourrait mettre :
\edtext{lorem}{\Afootnote{AB \emph{omit} ; C loram ; D lorim}}
Qui produit dans l’apparat :
lorem] AB omit ; C loram ; D lorim
Les limites de cette approche sont évidentes :
- Si on change de présentation, on doit changer toutes nos notes.
- Impossible de produire des statistiques.
- Difficulté à exporter vers d’autres formats que LaTeX.
- Impossible de vérifier si on ne s’est pas trompé dans l’indication du manuscrit.
Proposition de formalisation
Pour obtenir le même résultat, nous proposons la formalisation suivante :
\var{lorem}{A,B}{
{{C}{loram}},
{{D}{lorim}}
}
\var
est une commande personnalisée, qui prend les arguments suivants :
- Texte principal
- Liste des manuscrits où le mot est omis.
- Liste des variantes, séparées par des virgule. Chaque variante est indiquée sous la forme
{manuscrit}{variante}
.
Mise en œuvre : liste des commandess
Nous allons déclarer les commandes suivantes :
-
\var
(3 arguments), commande principal, qui appellera :-
\del
(1 argument), chargée d’indiquer les omissions [3] -
\variantes
(1 argument) chargé d’indiquer les variantes. Cette commande appelera elle même une commande\variante
chargé de formaté une variante particulière (2 argument : le manuscrit et la variante).
-
Ce qui donne le schéma suivant :
Mise en œuvre, étape 1 : la commande \del
Commençons par déclarer notre commande principale, \variante
.
Pour le moment, nous ne nous occupons que d’indiquer les omissions. Nous passons le premier argument de \var
comme premier argument de \edtext
, et nous passons le second argument à la commande \del
, à l’intérieur de l’argument dans \Afootnote
.
La commande \var
est définie ainsi :
\newcommand{\del}[1]{%
\renewcommand{\do}[1]{##1}%
\docsvlist{#1} \emph{omit}%
}
Analysons le code, en commençant par la ligne 3 :
\docsvlist
est une commande d’etoolbox. Elle analyse une liste d’éléments séparés par des virgules [4]. Chaque élément de la liste est passé à une commande \do
. Ici, nous analysons l’argument #1
, qui contient la liste des manuscrits où la variante est omise.
Une fois cette boucle effectuée, nous indiquons que les manuscrits omettent la variante via \emph{omit}
La commande \do
est définie en standard par etoolbox. Cependant nous allons ici la rédéfinir, mais uniquement à l’intérieur de \del
. C’est à dire que la définition que nous en donnons ne sera pas valable si on l’appel en dehors de \del
.
Ici, nous nous contentons d’afficher l’argument, dans le cas présent le manuscrits. Comme notre commande est définie à l’intérieure d’une autre commande, ses arguments sont indiqués par deux #
, et non pas un seul.
Si nous utilisons la formulation précédente, nous obtenons alors :
lorem ] AB omit
Ce qui est bien. Néammoins supposons que nous ne souhaitons pas indiquer de manuscrits omettant le mot, mais seulement des manuscrits le changeant :
\var{ipsum}{}{{C}{ipsem}}
On obtient alors un inesthétique :
ipsum] omit
Pour éviter ce problème, nous allons utiliser la commande \ifstrempty{chaîne}{sioui}{sinon}
, qui appelle sioui
si chaîne
est vide, et sinon
si la chaîne n’est pas vide.
Nous ferons l’appel dans la commande \variante
, pour conditionnner l’appel à \del
:
Mise en œuvre, étape 2 : les commandes \variante
et \variantes
La commande \variantes
est la suivante :
\newcommand{\variantes}[1]{%
\newif\iffirst%
\firsttrue%
\renewcommand{\do}[1]{\iffirst\firstfalse\else ; \fi\variante##1}%
\docsvlist{#1}%
}
Analysons :
- L. 2-3 : nous déclarons un test :
\iffirst
. Cela nous permettra d’afficher un point virgule avant le variante uniquement si nous ne somme pas à la première variante. - L. 4 : à nous une commande
\do
:-
\iffirst\firstfalse\else ; \fi
:\iffirst
teste si nous sommes à la première variante (cf. l. 2-3).- Si tel est le cas, nous appelons
\firstfalse
, qui permettra que\iffirst
soit faux prochain passage. - Si tel n’est pas le cas (
\else
), on affiche un point virgule :\else ;
. -
\fi
finit la structure de test commencé par\iffirst
.
- Si tel est le cas, nous appelons
- Nous appelons ensuite la commande
\variante
. Notez à nouveau le double#
. Vous remarquerez que nous ne mettons pas de{}
pour indiquer les arguments de la commande. En effet, si vous vous rappellez de la syntaxe utilisée, nos variantes sont justement indiqué sous la forme{manuscrit}{texte}
.- L. 5 nous bouclons sur toute les variantes.
-
Passons à la commande \variante
. Elle est déclaré ainsi :
Rien de bien méchant : on affiche simplement le manuscrit (#1
, puis la variante (#2
).
Il nous faut maintenant appeler \variantes
à l’intérieur de \var
.
Le seul élément notable est l. 3 : après avoir affiché les omissions, nous affichons un point virgule, si jamais nous avons des variantes (\ifstrempty{#3}{}{ ; }
.
Nous obtenons alors le résultat désiré :
lorem] AB omit ; C loram ; D lorim
Et pour un peu plus de contrôle : une liste des manuscrits
Suppons que par inadvertance, nous ayons indiqué un manuscrit E
, qui n’existe pas :
\var{dolor}{E}{}
Il serait bon que LaTex nous indique notre erreur.
Pour ce faire nous allons utiliser :
- le mécanisme d’affichage d’erreur dans les logs, fournit par eledmac, à savoir la commande
\eledmac@warning
. - le mécanisme d’etoolbox de déclaration de liste.
Comme la commande \eledmac@warning
contient un arobase, il nous faudra déclarer nos commande entre \makeatletter
et \makeatother
.
Commençons par créer une commande : \manuscrits
. Cette commande contiendra une liste de manuscrits, qu’etoolbox pourra consulter pour :
- vérifier si un manuscrit existe, avec
\ifinlist{\manuscrits}{sioui}{sinon}
. - faire une boucle dessus pour afficher les manuscrits avec
\dolistloop{\manuscrits}
.
L. 1 nous déclarons une liste vide, l. 2-5 nous la complétons.
Puis modifions nos commandes \del
et \variante
.
- L. 3 : Nous testons si le manuscrit se trouve dans la liste
- L 4 : Si tel est le cas, nous l’affichons.
- L 5 : sinon nous émettons un message d’erreur, précisant le numéro de page (
\the\page@num
et de ligne\the\line@num
[5]). Nous affichons également dans le PDF l’erreur.
Pour \variante
, le code est similaire, mais nous indiquons également la variante proposée :
Vos commentaires
# Le 20 septembre 2012 à 19:41, par Doc73 En réponse à : Formaliser les variantes textuelles avec (E)ledmac
A similar approach is used by MauroTeX. Cf. http://www.maurolico.unipi.it/mtex/mtex.htm
# Le 20 septembre 2012 à 20:54, par Maïeul En réponse à : Formaliser les variantes textuelles avec (E)ledmac
Yes, and I think is the more pertinent approach