Page du projet.

2 Questions diverses

2.1 Comment faire des tableaux complexes ?

Les tableaux utilisent les mêmes macros que les listes, à un détail près : on utilise .Ta pour séparer les colonnes et .It pour séparer les lignes, comme dans l'exemple qui suit :

.Bl -t table -columns |ll|
.It Pommes
.Ta 1
.It Poires
.Ta 60
.El

Comment faire des tableaux plus compliqués ? Pour les tableaux compliqués, il suffit d'utiliser les macros Bf et Ef et d'écrire le tableau en LaTeX ou HTML directement, n'oubliant pas d'ajouter un "e" après chaque backslash :

.Bf -f latex
\ebegin{tabular}{|l|l|}
  \ehline
  \emulticolumn{2}{|c|}{Ma première ligne en deux cellules} \e\e
  \ehline
  Première cellule & Deuxième cellule \e\e
\eend{tabular}
.Ef

Par contre, il ne faut pas oublier, si l'on utilise des paquets LaTeX type multirow, par exemple, d'ajouter le package au préambule LaTeX, lequel devra alors être inclus à la main.

Il est également possible d'introduire le tableau HTML ou LaTeX dans un bloc .Bd pour lui donner un style en HTML. On peut également introduire le contenu du tableau dans une table invoquée à l'aide d'un .Bl -t table Titre « vide » pour profiter de la génération automatique de la liste des tables et profiter des références.

.\" le tableau en HTML et EPUB
.Bl -t table -columns |l|l| Titre
.Bf -f xhtml,epub
<tr>
<td rowspan="2">Cellule 1</td>
<td>Cellule 2</td>
</tr>
<tr>
<td>Cellule 3</td>
</tr>
.Ef
.El
.\" le tableau en LaTeX
.Bl -t table |l|l|
.Bf -f latex
\multirow{2}{*}{Cellule 1} & Cellule 2 \\
& Cellule 3 \\
.Ef
.El

2.2 Quels types de références croisées peut-on faire ?

Pour les références croisées, on utilisera la macro Sx. Pour se réferrer à une partie, à un chapitre, à une section ou une sous-section, on reprendra le titre donné à ceux-ci :

.Ch "Introduction"
.Ch "Mon premier chapitre"
Comme dit en
.Sx Introduction ,
…

L'on pourra changer le texte du lien avec l'option -name :

Comme dit
.Sx -name "ici" Introduction .

Pour faire références aux titres des tableaux ou des figures, il suffira d'ajouter le type (lot ou lof) grâce à l'option -t :

.Sx -t lof "Titre de ma figure" .

Comment créer une référence vers un mot hors chapitre/section/… ? Il est possible de donner un id à un Sm ou à ses variantes multilignes, ainsi qu'à un Bd. On pourra référencer par la suite ce texte ou bloc de texte, toujours grâce à la macro Sx :

Les
.Sm -id label-rhinocéros -t animal rhinocéros
sont des animaux féroces.
.P
…
.P
Nous avons parlé des
.Sx -id -name rhinocéros label-rhinocéros .

2.3 Quels types de tables de matières peut-on faire ?

La macro Tc permet de créer une table de matière ainsi qu'une liste des figures ou une liste des tableaux. Avec cette macro, on peut également spécifier que l'on veut une table des matières générale de peu de profondeur avec l'option -summary. L'option mini est à utiliser lors d'une invocation en début de chapitre, et crée une table des matières qui contiendra les sections et sous-sections du dit chapitre.

.Tc -summary
.Ch "Mon premier chapitre"
.Tc -mini
.Sh "Ma section"

2.4 Comment ne pas se répéter et factoriser ?

Pour ne pas répéter les même morceaux de textes trop souvent et améliorer la maintenabilité de ses documents, il est possible de définir des variables avec .#dv, ou des macros, avec .#de.

Variables Par exemple, pour ne pas répéter tout le temps le chemin vers les images :

.#dv img /long/chemin/vers/un/dossier/contenant/les/images
.\" On peut ensuite se contenter d'écrire:
.Im \*[img]/mon-image.jpg
.\" La séquence d'échappement \*[img] est remplacée par la valeur de la
.\" variable.

De plus, de cette façon, si l'on choisit de changer le nom du dossier contenant les images, il suffira de changer la variable img pour changer les chemins dans toutes les invocations de Im.

Il peut être également utile d'utiliser des variables pour ne pas répéter tout le temps un même bout de texte.

.#dv chaperon-bleu "«Les histoires terribles et incroyables du Chaperon Bleu»"
.\" Et on pourra utiliser la variable de la façon qui suit:
Aujourd'hui nous allons analyser \*[chaperon-bleu].

L'on peut également trouver cela utile lorsque l'on a par exemple deux documents partageant une même page de titre personnalisée (c'est-à-dire dans le cas où celle par défaut ne suffit pas). On définit les variables dans les deux documents :

.\" dans le premier document
.#dv titre "Titre document 1"
.#dv auteur "Auteur document 1"
.\" puis on inclut avec un .If (Include file) la page du titre:
.If page-titre.frundis
.\" dans le deuxième document
.#dv titre "Titre document 2"
.#dv auteur "Auteur document 2"
.If page-titre.frundis

On pourra ensuite utiliser ces variables dans un fichier commun.

.\" dans le fichier appelé «page-titre.frundis» ...
.Bd -t titlepage
.Bm -t titre
\*[titre]
.Em
.Bm -t auteur
\*[auteur]
.Em
.Ed

Macros Les macros définies avec #de peuvent être utilisées à beaucoup de fins. Un cas d'utilisation simple peut être :

.#de Note
.P Note.
.#.

qui permet ensuite d'écrire :

.Note
Texte descriptif…

et ainsi utiliser la même macro pour introduire toutes les « Notes ». Si au lieu de « Note. » avec un point, on veut plus tard « Note : » avec deux points, il suffit de modifier à un seul endroit (cette macro est utilisée pour les notes de cette FAQ).

2.5 Comment réutiliser un fichier contenant des déclarations pour plusieurs documents ?

Il s'agit donc du cas où l'on a des mtags et dtags, des définitions de macros et divers paramètres de configuration globaux que l'on veut réutiliser pour divers documents distincts.

Une première méthode consiste à inclure dans chaque fichier source à l'aide de la macro If le fichier contenant les déclarations en précisant le chemin absolu, ou relatif au dossier courant.

Une méthode plus pratique est d'utiliser la variable d'environnement FRUNDISLIB pour dire à frundis de chercher des fichiers donnés par des chemins relatifs à d'autres dossiers que le dossier courant.

On pourra, par exemple, écrire dans la configuration du shell (.bashrc, .kshrc, etc.) :

export FRUNDISLIB=~/chemin/vers/mes/packages/frundis

Alors, dans le fichier source du document dans lequel on veut inclure ces déclarations, on écrit :

.If fichier-commun-01.frundis

2.6 Comment mettre les mêmes entêtes et pieds de pages dans tous les HTML générés ?

Pour cela, il existe deux paramètres, xhtml-top et xhtml-bottom, qui permettent d'inclure un fichier HTML au début et à la fin de chaque page. Il suffira d'écrire dans le fichier frundis :

.X set xhtml-top "mon-xhtml-top.html"
.X set xhtml-bottom "mon-xhtml-bottom.html"

2.7 Comment contrôler avec précision les espacements ?

Comment éliminer les espaces entre du texte et une macro ou entre macro et macro ? Lorsqu'on écrit :

Je crois qu'
.Sm -t latin "a priori" ,
c'est ça.

il y a un espace entre l'apostrophe et le texte en latin de la macro. Pour l'enlever il est possible d'utiliser l'option ns (no space) dans la macro pour enlever cet espace. L'option est valable pour Sm (et ses variantes multilignes), Lk, Sx et, en général, toute macro ayant pour but de marquer du texte à l'intérieur d'un paragraphe.

Si l'on veut éliminer totalement les espaces ajoutés entre les macros, il est possible de modifier la valeur du flag ns (mode no space) de la macro #fl, et de la fixer à 1 :

.#fl ns 1

Il ne faudra pas oublier de refixer la valeur à zéro lorsque nécessaire.

Comment insérer à la main un espace en fin de ligne ? frundis donne toujours un warning lorsqu'il y a des espaces en fin de ligne (en général ils ne servent à rien, car un retour à la ligne est inséré automatiquement). Pour éviter ce warning il suffit d'ajouter le caractère spécial \& en fin de ligne, après l'espace ajouté.

Comment éviter l'ajout d'espaces insécables automatique en français ? Lorsque le paramètre lang est fixé à “fr”, frundis ajoute automatiquement des espaces devant toute la ponctuation où ils sont, généralement, nécessaires. Pour enlever cet espace on pourra tout simplement ajouter le caractère spécial \& devant cette ponctuation :

.D
Comment ça?\&? —s'exclama la vieille sorcière.

Le premier point d'interrogation sera traité tandis que le second sera collé au premier.

S'il s'agit d'un gros bloc que l'on veut ne pas être traité par l'ajout automatique d'espaces insécables, il est possible d'utiliser la macro #fl qui peut modifier le statut du drapeau (flag) fr-nbsp-auto :

.#fl fr-nbsp-auto 0
Mon gros bloc que je ne veux pas échapper.
.\" puis je refixe à 1 le paramètre:
.#fl fr-nbsp-auto 1