Applyx 076 (LYX 2.1.5)

Pierre L. Douillet 17 septembre 2019

(a short tale of modern ages - 3)

Résumé Tant que l’on n’a jamais su que Alzheimer s’écrivait avec un "h", il n’y a aucun problème à ne pas s’en souvenir. Mais il n’y a rien de plus agaçant que de savoir que l’on a rencontré la réponse à un problème technique dans un bouquin de 999 (et c’était sur une page de gauche, mais peut-être aussi sur une page de droite)... Tandis qu’un document informatisé est facile à interroger, et en même temps plus difficile à égarer qu’une suite de notes papier. Les distributions visées sont SuSE − 6.1, SuSE − 6.2, SuSE − 6.3, SuSE − 6.4, SuSE − 7.0, SuSE − 7.2, SuSE − 7.3, SuSE − 8.0, SuSE − 8.1, SuSE − 9.3, SuSE − 10.2, SuSE − 11.0, SuSE − 11.3, SuSE − 11.4, SuSE − 13.1 et SuSE − 42.1. D’autres distributions existent. Par exemple RedHat, dont au moins une livraison formate spontanément tous les disques durs d’une machine, etc. Dans ce qui suit, les items numérotés décrivent les questions ayant trouvé une réponse (même désagréable) tandis que les items avec des boulets décrivent les questions restées en suspens. Par ailleurs, la taille de ce document augmentant au fil du temps, nous l’avons fractionné en quatre parties : (1) installation proprement dite, (2) configuration d’un système installé, (3) partie "appli- cative" des problèmes rencontrés, (4) collation des batchs utilisés pour la configuration du barnum.

Incl. 1 Floating algorithm, with a 30_mm_cat, a boxed equation and a 15%_cat

√ ρ = ax2 + bx + c

Fig. 1 – Floating empty figure

Tab. 1 – Floating empty table

1 Index

A prettyref, 22 algorithmic, 41 pseudo-vecteur, 22 alt-rule.pro, 77 psnup, 48 amsfonts, 22 pybcheck, 21 pybibliographic, 21 B babel, 20 R bibliography, 21 Romaja, 31

C S cyberbit, 34 scilab, 55 scim, 33 D scribus, 48 Dubeolsik, 31 slides, 45

E T enchant, 27 tesseract, 48 evince, 26 texmf, 18 theHalgorithm, 41 F floats, 41 V frenchb, 20 vecteur, 22 vi, 12 G geogebra, 55 W gs, 47 whois, 14

H X , 30 xdvi, 26 hanja, 31, 32 hostid, 64 Y hyperref, 29 yast2, 24

I ibus, 30 index, 19

K kdesktop,9 kicker, 11 kmail, 12 kpsewhich, 18 kseg, 52 kwrite, 12

L latex, 18 latex guru, 22 latexq, 68 LYX, 23 M maple, 64 marginpar, 19 mathop, 22 mkpasswd, 14

P pdftk, 47

2 TABLE DES MATIÈRES TABLE DES MATIÈRES

Table des matières

Index 2

Table des matières 3

Liste des Figures 7

Liste des Tableaux 7

Liste des Inclusions 8

1 Décision concernant les répertoires9

2 Bureau "WinLike" 9 2.1 Mimelinks...... 9 2.2 Filepifs : fichiers kdelnk et kdesktop...... 9 2.3 Plasmashell, the famous shit...... 11 2.4 Lanceur kicker...... 11 2.5 Lanceur kpanel...... 11 2.6 Templates...... 12 2.7 Les éditeurs...... 12 2.7.1 Pour mémoire : éditeur kedit...... 12 2.7.2 Éditeur kwrite...... 12 2.7.3 Éditeur vi...... 12 2.7.4 Autres éditeurs...... 12 2.8 kmail...... 12 2.8.1 Conversion de kmailrc(1) vers kmailrc(2)...... 13 2.9 StarOffice...... 13

3 Réorganisation du site web 14 3.1 Fichiers centraux...... 14 3.2 Contrôle d’accès...... 14 3.3 Fichiers de service...... 14 3.4 Arborescence fantôme...... 14 3.5 jeudi...... 15 3.6 cours...... 15 3.7 html_ro...... 16

4 Uniformisation des menus du site web 16 4.1 Gestion des menus ordinaires...... 16 4.2 Le cas spécial du fichier racine...... 17 4.3 Gestion des dates dans les fichiers menu...... 18

5 TeTEX, TEX, LATEX 18 5.1 Ajout d’une classe ou d’un style...... 18 5.2 Liste des modules modifiés...... 18 5.3 index...... 19 5.3.1 Le mécanisme LATEX...... 19 5.3.2 A l’intérieur d’un document LYX:...... 19 5.4 Notes marginales...... 19 5.5 babel...... 20 5.6 Bibliographie...... 21 5.6.1 Fichiers *.bib...... 21 5.6.2 bst...... 21 5.7 Quelques commandes utiles...... 22 5.8 Le package prettyref...... 22

3 TABLE DES MATIÈRES TABLE DES MATIÈRES

6 LYX 23 6.1 Copie rapide d’une installation déjà en place...... 23 6.2 D’une version à l’autre...... 23 6.2.1 Inventaire...... 23 6.2.2 A propos de la base de données des rpm...... 24 6.2.3 Upgrader LYX, à SuSE constant (SuSE − 11.4) ...... 24 6.2.4 Upgrader LYX, à SuSE constant (SuSE − 10.2) ...... 24 6.2.5 Quelques commandes sans raccourcis...... 25 6.3 Fichiers de lancement...... 25 6.4 Configuration...... 26 6.5 Copier-coller...... 26 6.6 Correcteur orthographique...... 26 6.7 Exclusion du correcteur orthographique...... 27 6.8 Imprimantes...... 28 6.9 Table des matières...... 28 6.10 Layout AAA-dou-hyperref-6 (article)...... 28 6.11 hyperref...... 29 6.12 hyperref (SuSE − 11.3)...... 29 6.13 Babel...... 30 6.14 Hangul...... 30 6.14.1 Keyboard Hardware...... 30 6.14.2 Moteur ibus (SuSE − 42.1)...... 30 6.14.3 Hangul keyboard= Dubeolsik...... 31 6.14.4 Hangul keyboard=Romaja...... 31 6.14.5 Sortie Hangul SuSE − 42.1 ...... 32 6.14.6 Moteur scim (SuSE − 11.3) ...... 33 6.14.7 Sortie Hangul SuSE − 13.1 depuis TEX/LYX...... 34 6.14.8 cyberbit, télécharger...... 34 6.14.9 mycyberbit, compiler...... 35 6.14.10 myeongjo...... 37 6.14.11 Bilan...... 37 6.15 Clavier...... 38 6.15.1 Généralités (tout sauf LYX)...... 38 6.15.2 Déterminer ce qui est spécifique à LYX...... 38 6.15.3 Langage de programmation...... 38 6.16 Tables...... 40 6.17 ni LYX, ni TEX, mais le pilote (SuSE − 8.1)...... 40 6.18 LYX sous Window$...... 40 6.19 A propos de KLYX...... 41

7 WP 41

8 Algorithmic 41 8.1 Hal strikes again...... 41 8.2 Le package floats...... 41 8.3 Tentative de réécriture de floats.sty...... 43 8.4 L’environnement algorithm ...... 43 8.5 Environnement algorithmic ...... 44

9 Slides 45 9.1 Provided by EA Gonzalez-Solares...... 45 9.2 Provided with Lyx : seminar.layout...... 46 9.3 Seminar revisited (SuSE − 42.1)...... 46 9.3.1 A recaser...... 47 9.4 FAQs...... 47

4 TABLE DES MATIÈRES TABLE DES MATIÈRES

10 Gestion des fichiers pdf 47 10.1 La commande de base: pdfjam...... 47 10.2 Impression booklet...... 47 10.3 gs...... 47 10.4 pdftk...... 47 10.5 psnup...... 48 10.6 Un exemple...... 48 10.7 scribus...... 48 10.8 tesseract...... 48

11 PostScript 49 11.1 Images encapsulées...... 49 11.2 Visualiser...... 49 11.3 Pages man...... 50 11.4 Mise en page compacte de fichiers texte...... 50 11.5 enscript...... 51 11.6 Recto-verso sur imprimante recto...... 51 11.6.1 Principe de la manoeuvre...... 51 11.6.2 Détails des scripts...... 52

12 kseg 52 12.1 Installation...... 52 12.2 wine-kseg...... 54

13 Phorum 54 13.1 Description...... 54

14 Geogebra 55 14.1 Install from tar.bz2 (SuSE − 42.1)...... 55 14.2 Install from rpm (SuSE − 13.1)...... 55 14.3 Install from sources...... 55

15 Scilab 55 15.1 Installation 5.5.2 (SuSE − 42.1)...... 55 15.2 Installation 5.5.1 (SuSE − 13.1)...... 55 15.3 Installation 5.3.1-13.1 (SuSE − 11.4)...... 56 15.4 Installations précédentes...... 56 15.4.1 Configuration...... 56 15.4.2 Spécialement 5.0.3...... 57 15.4.3 Spécialement 5.0...... 57 15.4.4 Spécialement 4.1.1...... 57 15.5 Tentative de compilation 5.03 sur 10.2...... 57 15.6 Tentative de compilation 4.1 sur 10.2...... 58 15.7 Prise en main...... 59 15.8 CAVAPA (5.0.3)...... 59

16 Mathematica 60

17 Sage 60 17.1 Compilation...... 60 17.1.1 Exemples de compilation...... 60 17.2 Mise en place...... 61 17.3 Interface avec Maple...... 62 17.3.1 Sage 6.3 (sur madiran 1)...... 62 17.3.2 Sage 5.3 (sur mirabel)...... 62 17.3.3 Essais...... 62 17.4 Create a maplechild...... 62

5 TABLE DES MATIÈRES TABLE DES MATIÈRES

18 Maple 64 18.1 Maple 18 (SuSE − 42.1)...... 64 18.2 Maple 18 (SuSE − 13.1)...... 64 18.3 Maple 14 (SuSE − 11.3)...... 66 18.4 Installations plus anciennes...... 66 18.4.1 maple 6...... 67 18.4.2 maple 9.5...... 68 18.4.3 maple 12...... 68 18.5 Récupération de résultats Maple vers LYX...... 68 18.6 Récupération d’une procédure Maple vers LYX...... 68 18.6.1 Principe...... 68 18.6.2 Le batch principal...... 69 18.6.3 Traitement des fins de ligne, et redécoupage...... 69 18.6.4 Le cas spécial des multiline...... 69 18.6.5 Le filtre principal...... 70

19 Geometry 70 19.1 Configurer Maple...... 70

20 Html : latex2html 71 20.1 pdf, url et hyperref...... 71 20.2 La concurrence : tth...... 73 20.3 Présentation de latex2html...... 73 20.4 Le gang compu$erve...... 74 20.5 Configuration...... 74 20.6 Réutilisation des images...... 74 20.7 Les barres noires...... 74 20.8 pictogrammes de navigation...... 77 20.9 Marche à suivre...... 77 20.10Difficultés...... 78 20.11Guerre des quotes...... 79

21 Archivage 79 21.1 Méthode...... 79 21.2 Fichiers à sauvegarder...... 79 21.3 Questions quant à la sauvegarde...... 79 21.4 Batch : mk_arc (principe)...... 79

22 Tablette 80 22.1 Mise à jour...... 80

Références 81

6 LISTE DES TABLEAUX LISTE DES FIGURES

Liste des Figures

1 Floating empty figure...... 1 2 Franchouillation éternelle du point-point...... 20 3 Franchouillation des puces...... 21 4 Choix du candidat pour "mun"...... 32 5 CJK is working !!!...... 36 6 fig...... 42 7 fig...... 42 8 fig...... 42 9 fig...... 43 10 fig...... 43 11 Avatars et barres noires...... 76

Liste des Tableaux

1 Floating empty table...... 1 2 Correspondance Suse LYX...... 24 3 table...... 42 4 table...... 42 5 table...... 42 6 table...... 43 7 table...... 43

7 LISTE DES INCLUSIONS LISTE DES INCLUSIONS

Liste des Inclusions

1 Floating algorithm, with a 30_mm_cat, a boxed equation and a 15%_cat...... 1 2 Lancement de kwrite...... 9 3 /bin/qxp_purge_desktop...... 10 4 Fichiers .directory...... 10 5 Deux fichiers mimelink/application/*.desktop...... 10 6 Le fichier dat2_cours...... 16 7 La nouvelle procédure prettyref...... 23 8 Les fichiers de description de LYX...... 25 9 Les fichiers de lancement de LYX...... 25 10 Le module mycyan...... 28 11 mygul (nouvelle version)...... 33 12 mk-cyberbit...... 35 13 qyk_docs_keys...... 39 14 tell_commands.bat...... 40 15 algo...... 42 16 algo...... 42 17 algo...... 42 18 Tirets français et tirets anglais...... 43 19 algo...... 43 20 algo...... 43 21 floatc@ruled et fs@ruled...... 44 22 newfloat...... 44 23 Un exemple d’encadré "algorithme"...... 44 24 Version active...... 45 25 Les sources du précédent...... 45 26 bin/qbb_bounding_box...... 49 27 Le script pman...... 50 28 Le script rv_edit...... 50 29 Impression recto-verso...... 53 30 kseg : intégration dans kde : mimetype, applnk...... 54 31 Scilab : applications requises avant compilation...... 58 32 Restarting Maple from Sage...... 63 33 child’s commands...... 63 34 Maple18 : intégration dans kde4 : mimetype, applnk...... 65 35 Maple14 : intégration dans kde4 : mimetype+magic, applnk...... 66 36 Maple : intégration dans kde : magic, mimetype, applnk...... 67 37 Maple : lanceurs en mode texte et mode graphique...... 67 38 Lancement simplifié (écriture d’un article)...... 69 39 Le batch principal...... 69 40 Le filtre sed_coupe...... 70 41 Le filtre sed_multiline...... 70 42 Le filtre principal (début)...... 71 43 Le filtre principal (fin)...... 72 44 User-level configuration file...... 75 45 Création de l’image et de ses barres noires...... 75 46 Reconfigurer la barre de navigation...... 77

8 2 BUREAU "WINLIKE"

1 Décision concernant les répertoires

Les logiciels installés "à la main" se placent en /opt/xxx (pour balancer la charge entre le disque exécutable et le disque données). Propriétaire = root, statut = read-only. Par contre, tous les fichiers de configuration se placent en /home/opt/xxx, et sont liés à la bonne place. Propriétaire du fichier = ipse, propriétaire du lien = root. L’objectif est d’améliorer les chances de survie de ces fichiers.

2 Bureau "WinLike"

dvi: Exec=xdvi %U -linkstyle 2 doc-style: dou-hyperref

2.1 Mimelinks 1. Commande de base ***** update-mime-database /usr/share/mime

2.2 Filepifs : fichiers kdelnk et kdesktop 1. Chaque filepif permettant de lancer un programme est en fait un fichier spécial, comme décrit Alg. 2.

Incl. 2 Lancement de kwrite [Desktop Entry] # KDE Config File Categories=Qt;KDE;TextEditor; [KDE Desktop Entry] DocPath=kwrite/index.html BinaryPattern= Encoding=UTF-8 Comment[C]=Advanced Editor Exec=kwrite %U Exec=kwrite -caption "%c" %i %m %f GenericName=Text Editor Icon=kwrite.xpm Icon=kwrite MimeType=application/x-kdelnk; InitialPreference=8 MiniIcon= MimeType=application/x-desktop;... Name[C]=k&Write Name=&KWrite Path= Path= Protocols= Terminal=false SwallowExec= Type=Application SwallowTitle= X-DCOP-ServiceType=Multi Terminal=0 X-KDE-StartupNotify=true TerminalOptions= X-SuSE-Unimportant=true Type=Application X-SuSE-translate=true

KdE_1 : Editors/kwrite.kdelnk KdE_2/KdE_3 : Editors/kwrite.desktop

1. Avec KdE_2/KdE_3, ces fichiers sont de plus en plus encombrés par des traductions à la noix. Se placer successivement en /etc/opt/kde3/share/applnk/SuSE (menu SuSE), /opt/kde3/share /applnk/ (menu KdE) puis /opt/kde3/share/mimelnk/ (mimelink) et lancer le batch qxp_purge _desktop (Alg. 3). 2. La colonne "filetype" des fichiers contient (le plus souvent) le commentaire figurant dans le fichier mimetype associé. Il faut donc virer tous ces commentaires verbeux et les remplacer par des acronymes raisonnables. Le batch qxt_type_desktop fait cela. Le compléter au fur et à mesure. 3. Lier à kwrite les fichiers *.log, *.desktop. 4. Mettre une initiale soulignée dans les noms des commandes les plus utiles. Au moins Kwrite. 5. Les filepifs de répertoire ont un format spécial. L’encadré Alg. 4 montre un tel fichier .directory. La ligne SortOrder permet de modifier l’ordre d’apparition des pictogrammes. Être attentif à bien donner le nom exact des fichiers (et pas les noms de fantaisie). 6. Ces fichiers spéciaux peuvent devenir "immédiatement éditables" en définissant un type "x-dir" et un type "x-pif". Créer un fichier de ce nom dans mimelink/application, comme décrits Alg. 5. Choisir une image. Il faut ensuite ajouter ce type à la liste des types gérés figurant dans le filepif de l’application voulue (applnk/editors/kwrite).

9 2.2 Filepifs : fichiers kdelnk et kdesktop 2 BUREAU "WINLIKE"

Incl. 3 /bin/qxp_purge_desktop. mkdir -p ~/tmp ; liste=~/tmp/liste ; tmp_sed=~/tmp/tmp_sed tmp_seda=~/tmp/tmp_seda ; tmp_file=~/tmp/tmp_file ; tmp_prop=~/tmp/tmp_prop cat << EOF > $tmp_seda /\[Property/, $ p EOF cat << EOF > $tmp_sed /\[Property/, $ d ; /^$/d ; /\[Desktop\ Entry\]/ d ; /\[af\]/ d ; /\[ar\]/ d ; ... ; /\[zh_TW\]/ d ; /\[zu\]/ d EOF find . | grep desktop | grep -v "desktop.save" > $liste find . | grep directory | grep -v "rectory.save" >> $liste for i in ‘cat $liste‘ ; do echo $i ; cp $i $i.save sed -n -f $tmp_seda $i > $tmp_prop ; sed -f $tmp_sed $i > $tmp_file echo "[Desktop Entry]" > $i ; sort $tmp_file >> $i echo "" >> $i ; cat $tmp_prop >> $i done

Incl. 4 Fichiers .directory. # KDE Config File [KDE Desktop Entry] BgImage= Icon=applications_package.xpm [Desktop Entry] MiniIcon=applications_package.xpm Name=Editors Name=&Editeurs Icon=package_editors SortOrder=khexedit.kdelnk,... SortOrder=khexedit.desktop,...

KdE_1: .directory KdE_2/KdE_3 : .directory

7. Sous KdE_1, les "&" figurant dans les champs "name" des fichiers liens permettent de définir des "hot keys" et de constituer un "menu démarrer" à la façon Windows.

 C’était trop beau : cette possibilité a été sabotée dans la version KdE_2/KdE_3. Comment faire comprendre quelque chose à ces gens-là ?  De l’utilité des batchs : YoU, Yast2, etc. ont une tendance fâcheuse à réécrire les applnks/mimelinks. Repurger régulièrement toute cette enchilada.

1. Il semblerait que, dans KdE_3.4, la partie "menu rapide" accepte le début du nom d’un pro- gramme comme raccourci avant [Enter].

Incl. 5 Deux fichiers mimelink/application/*.desktop [Desktop Entry] [Desktop Entry] Comment=.dir Comment=.pif Icon=dir Icon=exec MimeType=application/x-dir MimeType=application/x-pif Patterns=*.directory Patterns=*.desktop;*.kdelnk; Type=MimeType Type=MimeType x-dir.desktop x-pif.desktop

10 2 BUREAU "WINLIKE" 2.3 Plasmashell, the famous shit

2.3 Plasmashell, the famous shit

Reloading Plasma. From https://userbase.kde.org/Plasma : Sometimes you might want to reload Plasma, like right after changing system language so the changes takes effect, or because of a problem with the desktop. To do that, open a terminal(or KRunner) and run these commands: kquitapp5 plasmashell ; kstart5 plasmashell &

2.4 Lanceur kicker

Le lanceur de KdE_2/KdE_3 est kicker. 1. La configuration du "Menu Démarrer" se trouve dans ~/.kde2/share/config/kickerrc. Ce fichier est lu au démarrage du client graphique, puis écrasé au fur et à mesure. Il faut donc lancer un éditeur et une console, faire les modifs avec l’éditeur, utiliser la console pour localiser et tuer kicker, sauver les modifs, et enfin relancer kicker. 2. En particulier, on peut supprimer certaines filepifs du "top 8" en agissant sur la ligne Recen- tAppsStat. Filtre proposé pour découper et trier par fréquence :

grep RecentAppsStat kickerrc | sed -e " s/RecentAppsStat=// " | tr "," "\n" | sort -n -rx

3. Le répertoire /opt/kde2/share/applink/ est le répertoire principal du "Menu Démarrer" affiché par kicker, tandis que /etc/opt/kde2/share/applink/ fournit le sous répertoire SuSE de ce même "Menu Démarrer". Les liens en double (un dans Kde et l’autre dans SuSE) sont gênants : supprimer les doublons. 4. Par contre, le "véritable" répertoire mimelink est /etc/opt/kde2/share/mimelink, tandis que le répertoire /opt/kde2/share/mimelink ne sert à rien (i.e. n’est pas utilisé dans la compilation de ksycoca, la "base de registre", par kbuildsycoca). Il est efficace de remplacer le répertoire inutile par un lien.  YaST refabrique systématiquement un certain nombre de filepifs dans le menu /etc/opt/... et ces filepifs viennent en double dans les menus contextuels. Faire un batch pour les supprimer (qzq_anti_suse fait cela).  Pour la SuSE − 7.3, il faut réécrire les mimelink de /etc/opt/... parce qu’ils affichent unifor- mément "Mime Type" comme type de fichier (ce qui s’affiche est le commentaire).  Comment relancer kicker en en changeant la configuration ?

2.5 Lanceur kpanel

Le lanceur de KdE_1 était kpanel. 1. Les changements dans l’arborescence des filepifs doivent être validés en relançant kpanel. Le lancement effectif des applications depuis les filepifs est sous le contrôle de kfm. 2. Le pictogramme K affiche le contenu de /opt/kde/share/applnk. Les noms utilisés viennent de la ligne Name[C] des fichiers *.kdelnk. L’ordre d’apparition est celui des noms des fichiers des noms des fichiers *.kdelnk eux mêmes, mais il peut être modifié par la ligne SortOrder= du fichier .directory. Par conséquent, les changements de noms dus aux changements de langue de sont pas répercutés dans le tri des items des menus, et le résultat peut sembler en désordre.  D’où vient le commentaire de "K" ? En tout cas, pas du fichier /opt/kde/share/applnk.directory 3. On peut obtenir un "menu démarrer" à la sauce Windows. Il suffit de positionner un "&" dans le nom de fantaisie. La déclaration de [pomme]comme "custom key" du lancement du "pop-up system menu" est à faire avec kcontrol (section keys) ou bien directement avec kcmkeys. 4. Les pictogrammes SuSE, Utils dans la barre "kpanel" reprennent les sous-répertoires ad hoc. 5. La barre des pictogrammes standard est décrite par ~user/.kde/share/config/kpanelrc.  grosse bagarre pour l’ordre et l’espacement des apparitions. En particulier, "system" (= menu démarrer) doit être vers le début, sinon l’énumérateur de bureaux se place n’importe comment.  il est donc intéressant d’avoir une copie de secours de kpanelrc ...

11 2.6 Templates 2 BUREAU "WINLIKE"

2.6 Templates 1. Un item "new" figure dans le menu contextuel d’un répertoire. Cet item reprend le répertoire /~/Desktop/Templates/. 2. Par conséquent, y recopier les filepifs des exécutables favoris.  Comment créer un fichier et non un *.kdelnk ?

2.7 Les éditeurs 2.7.1 Pour mémoire : éditeur kedit

1. Font = courrier 12, backcolor = (255, 224, 213), ne pas oublier de sauvegarder les changements. 2. Commande d’impression pour kedit : enscript -2rG -Pklein 3. Tombé en désuétude pour avoir été aussi peu fonctionnel que le fameux notepad.

2.7.2 Éditeur kwrite

Cet éditeur permet de mettre en relief la structure d’un texte source dans divers langages de pro- grammation. On peut aller au début et à la fin. 1. SuSE − 9.3 Réglages : (a) abandon fonte monospace (apparaît trop blanche) (b) police 12

2. Modifier le fichier applnk de kWrite pour la lier à application/x-shellscript. Ces fichiers sont alors reconnus par kfm, qui propose kwrite dans le menu par défaut. 3. Comme rien n’est simple, le highlight des fichiers script, à savoir bash2, doit être lié avec application/octet-stream.  Comment unifier les deux points de vue ??? (une modif de mimelink ne semble pas suffire). 4. Sous KdE_1, faire de même avec text/x-.  Créer un highlight, ou bien utiliser celui de TEX. Où faire la modif ??? 5. Problèmes variés  Comment configurer le clavier (bind) ?  Comment sélectionner rapidement un mot ?  Comment imprimer efficacement ?

2.7.3 Éditeur vi

1. Dans les temps anciens, vi était considéré comme un éditeur graphique (par comparaison avec edlin). 2. Reste néanmoins bien utile pour travailler sur un terminal à distance. 3. Il faut absolument résister à la tentation de taper [Ctr − S] pour sauvegarder, car cela plante vi...

2.7.4 Autres éditeurs

1. Kate, Emacs, etc. Purger toutes les filepifs correspondantes de leur ligne mimelink pour conserver kwrite comme application automatiquement utilisée.

2.8 kmail Ce logiciel de courrier commence à ressembler à Eudora. Pour la version présente dans SuSE − 7.2, on peut définir des règles de filtre assez efficace... mais uniquement par cliquodromie.  Comment modifier les priorités des fichiers reçus ?  Comment avoir un carnet d’adresses efficace ?  Gestion des attachements : il serait commode de les détacher automatiquement vers un répertoire (en laissant un lien).

12 2 BUREAU "WINLIKE" 2.9 StarOffice

2.8.1 Conversion de kmailrc(1) vers kmailrc(2) 1. Supprimer la ligne # KDE config file 2. Utiliser une copie de kmailrc(1) a pour effet de trier ce fichier de config par clefs. Il faut alors que la section [General] indique le bon nombre pour "accounts" et pour "filters" . 3. Il semble que le codage des passwords ait changé (impression, et non pas certitude). 4. Le filtre #0 n’est pas reconnu.

2.9 StarOffice Le fameux obésiciel. 1. Installation : SuSE −7.0 copie les fichiers dans /opt/office52, sans positionner de raccourcis dans les menus kde. 2. On va donc à la pêche, et on tombe sur ce répertoire. On lance... et il propose une installation complète... qui ne sert à rien ! Ne pas la faire !!! 3. Se limiter à l’installation de l’utilisateur local. 4. Pourquoi est-ce aussi lent ???

13 3 RÉORGANISATION DU SITE WEB

3 Réorganisation du site web 3.1 Fichiers centraux 1. On revisite le site web. Bien entendu, on suppose que apache, php5, perl sont correctement installés. 2. Le répertoire /srv/www/Counter/data doit appartenir à wwwrun:www si l’on veut que de nouveaux compteurs puissent être créés. C’est une porte ouverte à un DoS: ne pas laisser ouvert au delà du nécessaire. 3. A cause d’un grand nombre de demandes, on place dans /srv/www/htdocs les fichiers suivants apple-touch-icon-120x120-precomposed.png apple-touch-icon-120x120.png apple-touch-icon-152x152-precomposed.png apple-touch-icon-152x152.png apple-touch-icon-precomposed.png (32x32) apple-touch-icon.png favicon.ico (1616) favicon.png (16x16) 4. Dans /etc/apache2/default-server.conf # Options SymLinksIfOwnerMatch Options None RedirectMatch 301 /*.php /favicon.png AllowOverride None Require all granted .

3.2 Contrôle d’accès 1. Redirects. On les place dans le fichier .htaccess des répertoires concernés. Dans une commande "Redirect xxx yyy", les deux estinations doivent commencer à la racine du site web. 2. Login/password. Dans le fichier .htaccess: AuthName "Restricted Area" AuthType Basic AuthUserFile /ici_et_là/.htpasswd-xxx Require valid-user Dans le fichier .htpasswd-xxx: user1:coded_passwd1:1001:500:Real_Name1 user2:coded_passwd2:1002:500:Real_Name2 Seuls les deux premiers champs sont utilisés par l’authentification. Il n’est pas demandé que user soit un -user sur la machine. Le triplet #user:#group:Real_Name était utilisé pour autre chose (création des unix-users pour le projet html_ro). Le coded_passwd vient de mkpasswd (du package whois).

3.3 Fichiers de service Les icônes de service locales sont en base/gifs.

3.4 Arborescence fantôme 1. Lorsqu’un site web doit fonctionner des années durant, il est indispensable de tout programmer, c’est à dire d’écrire un batch pour chaque chose. Quand il y a beaucoup de batchs, le plus simple est de créer une arborescence fantôme, copie conforme de celle du site web, et contenant les commandes de gestion du site.

14 3 RÉORGANISATION DU SITE WEB 3.5 jeudi

2. Une seule et unique commande donne accès à tout cela, avec affichage des commandes possibles en cas d’erreur de syntaxe. On distingue les commandes de publication: academics these, publis, sous-menus favoris à refaire mathapp cours prépa, cours Ensait (le tout en *.pdf) nullix le tout en *.pdf pictures les photos (utilisant les fichiers "web-" ) queuing|simul centre d’intérêt. Articles, slides, working papers (le tout en *.pdf) triangle ... 3. Anciennes commandes (en cours de remplacement) cours 2001, cours 2001_dev publication des anciens cours cours publication ordinaire ; traitement spécial pour les sujets d’évaluation (login/password) maotp publication spéciale des tp-mao : répertoire spéciaux, données, modèles au format html maple automate de publication des bibliothèques maple : détection de la version la plus récente, renommage et adjonction d’un éventuel fichier de test publis –> on gardera une sous-page de academics preprint, slides –> ventilés dans les centres d’intérêts. thesis –> inclus dans academics 4. D’autre part, les commandes de gestion sont : menu gestion des menus 5. Anciennes commandes de gestion clean suppression des scories de publication favoris gestion du fichier favoris horaires transforme au format winx, et ventile dans les bons répertoires, les horaires de cours déjà compilés htdig indexation du site site gestion des fichiers webalizer syncro ??? (concerne html_ro) 6. Et il y a aussi 02cours ansecpb sudoku survival syncro

3.5 jeudi Conférences du jeudi. Année 2004-2005. Remplacé par un fichier .htaccess avec RedirectMatch 301 /~douillet/jeudi/* /~douillet/gone.gif où gone.gif est en fait tower.gif (recopié des gifs).

3.6 cours Progressivement reconstruits à l’intérieur de base/mathapp. Les polys s’appellent Ensait-xxxxx.pdf, les évaluations s’appellent Ensait-xxxxx-eval.pdf. Pour certains cours, un sous répertoire est prévu. dazzle contient les datas and stories utilisées par les cours et les évaluations (tout en tas). On finira par avoir un descriptif. decis poly+eval+scilab (aussi thypo et plexp) lapla poly+eval+fourrier_html stats poly+eval+scilab

15 3.7 html_ro 4 UNIFORMISATION DES MENUS DU SITE WEB

3.7 html_ro Forte réorganisation... 1. On déplace tout sous une racine unique base/html_ro, et les années vont dans des sous répertoires dir=base/html_ro/xxhtml_ro où xx est le millésime. 2. Les fichiers index.php sont des redirections. A la base, lien sur index-racine ; dans une année, lien sur ../index-year.php. 3. L’année est stockée en $dir/99/.annee. 4. Les répertoires $dir/93trombi et $dir/94notes sont protégés par Require local AND Require valid-user (fyeo) En service normal, ils étaient protégés par d’autres ip + passwd. Le fichier index.php est à réécrire pour ne plus proposer ces options en standard. 5. Les répertoires $dir/95mip contiennent les descriptions du projet (un par année, cela a évolué). 6. Les répertoires $dir/96fraude, $dir/97secret sont des redirections (des répertoires de même nom dans le répertoire base). 7. Les répertoires $dir/98mkgrp sont des répertoires en dur. Ils contiennent des liens sur les fichiers correspondants de 98mkgrp. Actuellement protégé par Require local AND Require valid-user (fyeo) 8. Il y a eu 116 groupes validés. Les autres groupes ne sont pas conservés.

9. Les répertoires qui sont encore protégés sont nommés xxxxxx-old (ou xxxxxx-virt). Tous utilisent le même .htpassword (sur ipse).

4 Uniformisation des menus du site web 4.1 Gestion des menus ordinaires Les pages servant de menus et d’aiguillage doivent avoir un aspect uniforme, et comporter "un certain nombre de choses" ... ces choses étant susceptible de changer au gré des humeurs (noms, compteurs, barres de navigation, etc). Par conséquent, ces pages ne peuvent pas être écrites "à la main" , mais au contraire doivent pouvoir être recompilées fréquemment. Et pour cela, il faut donc séparer soigneusement ce qui relève de la sémantique (quels liens, avec quels commentaires) de ce qui relève du look and feel du site web. Les fichiers contenant les données doivent avoir une syntaxe très simple, avec une structure très visible et être facilement modifiables par de simples copier-coller. Un certain nombre d’essais nous ont conduit à adopter trois sortes de menus : ordinaire, spécial- racine, spécial-super-menu. Un fichier de menu ordinaire est une suite de lignes de commandes (Alg. 6).

Incl. 6 Le fichier dat2_cours ###### cours zzzqui cours/index.html zzztit Pierre L. Douillet - Maths @ Ensait-Roubaix zzzkey Douillet, queuing systems, waiting queue, textile,... zzzcpt cours - titi Les_modules refi #stats_A A #stats_E E Statistiques et Probabilités - tita stats_A Statistiques_(A1) (deuxième semestre) refs stats/index.html Stats-Probas pour l’ingénieur refo horaires/A1_stats.edt horaires ok: 8h CM + 12h TD

1. Chaque ligne est lue verbatim, par une commande read. On peut donc utiliser des quotes et autres caractères sensibles... dans la deuxième partie de la ligne de commande.

16 4 UNIFORMISATION DES MENUS DU SITE WEB 4.2 Le cas spécial du fichier racine

2. Lorsqu’une ligne a été lue, le coeur de l’algorithme consiste à aiguiller cette ligne vers la routine de traitement correspondant au premier mot de la ligne de commande. 3. Une syntaxe flexible a été adoptée : chaque commande requiert un certain nombre de paramètres (ci-dessous entre crochets), qui sont des mots (avec conversion des ” ” en ”_”), tandis que ce qui reste après les paramètres requis est considéré comme un seul champ. 4. Commandes gérant la création de la partie head du fichier

zzzqui la future adresse du menu dans l’arborescence zzztit [] le titre (à la fois dans la barre de titre et dans le texte) zzzkey [] keywords (avec des virgules) zzzsup [] si présent, nom du fichier supplément (devrait être traité à la façon de msg) zzzcpt [compteur] ligne obligatoire, sa lecture entraîne la compilation de l’en-tête.

5. Commandes de titres (colonne de gauche des menus)

tit [titre de bloc] commentaire pas d’espaces dans le titre ; se trouve encadré par : pour modifier la fonte, il faut d’abord refermer les tags ; le commentaire éventuel est à la ligne, en noir. tita [ancre] [titre de bloc] commentaire Cette ancre sera placée à la première ligne de la colonne de droite (cela permet de lire cette ligne lorsque le titre (de gauche) est centré verticalement. titi comme tit, mais avec une autre couleur

6. Commandes de lignes (colonne de droite des menus).

refo [adresse] [lien] commentaire le lien s’affiche en première colonne, le commentaire en deuxième colonne et la date du fichier en troisième colonne refb le même, sans date refi [adr1] [link1] [adr2] [link2] commentaire deux liens dans la première colonne refs [adresse] commentaire index.html et basename.ps du répertoire donné en adresse dvip [adresse] [lien] commentaire lien basename.dvi basename.ps refz [adresse *.ps] liens *.ps et *.ps.gz msg commentaire sur les trois colonnes photo [photo] [edtedt] [email] [webweb] commentaire special emploi du temps

7. En fin de fichier de commandes, on referme le menu, puis on insère une barre de recherche, et la date/signature du fichier de menu.

4.2 Le cas spécial du fichier racine

Le fichier racine est un cas à part. Il doit comporter une table des nouveautés, que l’on crée par une boucle spéciale. Il convient aussi de donner une autre destination à la flèche "haut". Modifs de qublic_bin/Menus_rac2/.mk_racine: 1. mailto ne comprend plus d’adresse mail. 2. élagué qublic_bin/Menus_data2/rac2_racine

17 4.3 Gestion des dates dans les fichiers menu 5 TETEX, TEX, LATEX

4.3 Gestion des dates dans les fichiers menu

1. La date de #xxx est " ". Et on s’en va. 2. Supprimer "html:" au début et une éventuelle ancre à la fin 3. Traiter séparément les fichiers

(a) sur blec.douillet.info (b) sur www.douillet.info (c) sur le web (d) locaux

5 TeTEX, TEX, LATEX

TEX et LATEX sont des langages-machine. Utiliser le frontal LYX pour tout ce qui est utilisation normale. Une installation standard part de /usr/share/texmf. Pour SuSE − 11.3, les commandes : amstex, eplain, etex, latex, musixtex, pdfjadetex, pdflatex, pdftex, pdfxmltex sont des alias pour pdfetex, qui loge à l’adresse : /usr/share/texmf/teTEX/bin/i586-/pdfetex. Pour SuSE − 13.1, les liens sont : amstex cslatex csplain etex jadetex latex mex pdfcslatex pdfcsplain pdfetex pdfjadetex pdflatex pdfmex pdfxmltex utf8mex xmltex et le programme réel est : /usr/bin/pdftex.. texmf contient : bibtex doc dvips fontname fonts makeindex metafont metapost mft pdftex source teTEX tex texconfig texdoctk doc contient les docs des packages... qui ont une doc. C’est utile (quand il y a une doc). tex contient cslatex csplain cyrplain fontinst generic latex mex plain platex texinfo latex i.e. texmf/tex/latex/ contient l’arborescence des packages

5.1 Ajout d’une classe ou d’un style

On a le choix entre laisser le fichier *.sty ou *.cls dans le répertoire courant, ou le centraliser. 1. Un fichier local doit être recopié dans chacun des répertoires (et modifié dans chaque répertoire en cas de mise à jour). 2. Un fichier central (dans /usr/share/texmf/tex/latex/) doit être signalé par la commande texhash. 3. Un fichier *.zip récupéré sur une archive contient un fichier *.idx. C’est ce fichier qu’il faut compiler avec latex, puis placer là où il faut. 4. Mécanisme de surcharge : créer un répertoire /usr/share/texmf/tex/latex/_modified_latex (qui sera en début d’arborescence). Y placer les nouveautés. Exécuter texhash. Vérifier que la version active du fichier visé est bien celle souhaitée par la commande kpsewhich nom.complet. 5. Mécanisme de sauvegarde. Placer l’original en ipse/.lyx/_modified_latex et utiliser un lien. Pour éviter qu’une modification mal faite gène la bonne exécution des anciens programmes, sauvegarder les versions successives de ce répertoire.

5.2 Liste des modules modifiés algorithmic Section8 seminar Section9 prettyref Subsection 5.8 url Subsection 20.1 svgcolor manque sous SuSE − 13.1. L’ajouter dans le répertoire _modified.

18 5 TETEX, TEX, LATEX 5.3 index

5.3 index

5.3.1 Le mécanisme LATEX La construction d’un index se fait en trois étapes. 1. Un premier passage, contrôlé par la commande \makeindex (à placer dans le préambule), prend en compte des commandes \index{} placées dans le texte et crée un fichier *.idx, avec les numéros de page. 2. Puis l’utilitaire extérieur makeindex compile un fichier *.ndx. La principale manoeuvre consiste à trier le fichier des clefs d’index. 3. Enfin, le fichier *.ndx est inclus dans le fichier principal, à l’endroit où se trouve la commande \printindex. Une modification n’est donc pas prise en compte immédiatement.

5.3.2 A l’intérieur d’un document LYX: 1. Avec la SuSE −11.3, on obtient un index en se contentant d’utiliser des commandes [Alt − I][D] pour poser les balises et une commande globale pour positionner l’index dans le document. 2. On choisit la couleur du lien hyperref par une commande dans le préambule (un bon layout fait cela) : \usepackage{color, svgcolor} \def\@linkcolor{darkred} 3. Dans les gros index, il peut être utile de positionner les "très utiles" tout en tête, en utilisant = comme premier caractère. 4. Pour que l’index figure dans la table des matières (diminuer les niveaux pour un article), \cleardoublepage \phantomsection %To make hyperref link correct \addcontentsline{toc}{chapter}{Index} 5. Si l’on veut un meilleur contrôle de ce qui se passe, consulter man makeindex. Les directives sont à placer dans un fichier *.mst. Celui-ce sera traité comme le fichier *.ist décrit dans man, à ceci près que le fichier *.mst sera pris en compte automatiquement, tandis qu’un fichier *.ist nécessite un appel explicite par makeindex -s configfile.ist filename.idx. 6. Pour obtenir des lettrines de sectionnement, *.mst contiendra pheadings_flag 1 heading_prefix "{\\bfseries " heading_suffix "}\\nopagebreak\n" 1. Pour obtenir des sous entrées, utiliser \index{entry!subentry} comme marqueur. 2. Pour obtenir un traitement spécial de la pagination, utiliser \index{entry|spc}, la commande spéciale étant \spc. Par exemple, une référence sur une note en bas de page pourra utiliser \newcommand{\nnn}[1]{\hyperpage{#1}n}. 3. La précédente définition peut se trouver dans le fichier principal, ou bien dans le fichier *.mst (à la fin du paragraphe preamble). Par exemple preamble "\n\\begin{theindex}\n \\providecommand*{\\nnn}[1]{\\hyperpage{#1}n}\n" 4. On constate que LYX ne prend pas en compte le fichier *.mst, et supprime toutes les entrées de l’index qui utilisent un formatage spécial. On est réduit à exporter en latex, puis lancer les trois passages.  Pour une raison ou une autre, la compilation de l’index à l’époque de klyx nécessitait babel et french... et ne se faisait pas lorsque le document n’était pas en français (remarque : c’est latex et non klyx qui était en cause, le problème restait avec des fichiers exportés en latex).

5.4 Notes marginales

1. On déclare une note marginale dans LYX par [Alt − I][M]. Cela engendre une commande \marginpar{} dans LATEX. 2. Ces notes se situent par défaut sur les marges extérieures. On peut les placer sur les marges intérieures par \reversemarginpar. Ce n’est pas une bascule. Utiliser \normalmarginpar pour revenir à la position extérieure.

19 5.5 babel 5 TETEX, TEX, LATEX

3. La taille (largeur) de ces notes se règle par \setlength{\marginparwidth}{40pt}. 4. Si l’on veut place en marge les anciens numéros de page d’un document scanné, les numéros en page paire semblent avoir disparu lorsque la largeur des marginpar est trop grande. On obtient un bon comportement par une taille 40pt et : \let\oldmarginpar=\marginpar \def\marginpar#1{\oldmarginpar {\begin{center} {#1} \par \end{center}}}

5.5 babel

1. Pour comprendre les (dys)fonctionnements du package babel, il suffit d’examiner le répertoire /usr/share/texmf/tex/generic/babel. La langue american n’est pas une langue comme une autre qui, elle aussi, redéfinirait les commandes génériques de TEX/LATEX. Les ordinateurs parlent globish, les babelisateurs parlent globish, et les peuplades parlant le c-cédille-circonflexe aiment se compliquer la vie. 2. Déclarer une langue a pour premier effet de sélectionner le correcteur orthographique. Pour le français, il y a eu french (B. Gaulle) puis frenchb (Babel). Les langues sont LATEX déclarées par:

\documentclass[twoside,american,frenchb]{article}.

3. Sous LYX, ces langages sont appelés French pour frenchb et French (Gutenberg) pour french. Dans les *.bind, nous avons défini [F 11]=american et [F 12]=frenchb. Les langues sont LYX déclarées par :

\language frenchb (au début du fichier) \lang american (à l’intérieur d’un layout)

4. Bien entendu, les deux modules de franchouillation n’ont pas la même opinion sur la "typographie éternelle de la France éternelle". Il semble que frenchb ait été écrit d’une façon légèrement moins arrogante –d’où le choix [F 12]=frenchb. Néanmoins, le bilan est gênant, sans même être robuste : les "comportements surprenants" ne sont pas clairement reproductibles. 5. La franchouillation éternelle du caractère ":" a pour résultat que l’espace après est diminué, tandis que (depuis SuSE − 9.3) un espace est inséré automatiquement devant (2). Un examen attentif de /usr/share/texmf/tex/generic/babel/frenchb.ldf ... et des dégâts produits montre que la franchouillation éternelle touche les caractères [;], [:], [?], [!].

a: a xa: a (frenchb) a: a xa: a (american) a: a xa: a (frenchb)

sans espace automatique avec espace automatique Fig. 2 – Franchouillation éternelle du point-point

6. On se débarrasse de tout cela par en remplaçant les shorthand franchouillés par

\declare@shorthand{french}{;}{\string;} %etc

On constate alors que les problèmes de prettyref, hyperref, etc. sont réglés. 7. Les méthodes à utiliser pour imposer son point de vue quant aux légendes et références sont examinées Subsection 8.2 et Subsection 5.8.

 Franchouillation des puces. Des puces françaises remplacent les puces ordinaires lorsque la langue française remplace les langues ordinaires. La Fig. 3 montre ce qu’il advient des boulets du deuxième ordre :

20 5 TETEX, TEX, LATEX 5.6 Bibliographie

z puce française, définie par \renewcommand{\labelitemii}{\(\maltese\)} (z) z (american) puce ordinaire , définie par \AtBeginDocument{ \renewcommand{\labelitemii}{\(\blacktriangleright\)}} (I) z puce française Fig. 3 – Franchouillation des puces

Changer les puces, "çà, c’est Paris". z Et en plus, latex2html n’est pas d’accord sur le fait qu’il s’agisse de puces du second ordre, et les code en premier ordre.  Tant qu’à franchouiller, autant vaudrait avoir un accès aux noms suivants : Table des Algorithmes, Sections, Sous-sections, etc... Et d’ailleurs cela ne servirait à rien, car à peu près aucun des styles usuels n’est babel-compliant.  Refabriquer le tout à partir de slovene.ldf (qui, pour l’instant est quasiment vide). /usr/share/texmf/tex/generic/babel-slovenian/slovene.ldf

5.6 Bibliographie

Il faut un fichier *.bib (data) et un fichier *.bst (format). Sous LYX, le *.bib peut être donné avec son chemin complet. Par contre le *.bst doit être dans l’un des répertoires spéciaux (ou bien dans le répertoire en cours).

5.6.1 Fichiers *.bib

1. Un exemple est donné ici: /usr/share/texmf/bibtex/bib/base/xampl.bib 2. Utiliser des clefs d’accès à la façon de nom:keyword99 est commode lors de l’utilisation, et protège raisonnablement contre les doublons. 3. Pour les nouvelles références, récupérer si possible les bibentries sur le site du journal concerné. 4. Pour d’anciennes références, contenues dans un fichier *.tex, récupérer \thebibliography c’est à dire les \bibitem à l’aide du batch re_bib (yanb). On obtient un fichier *.bib qu’il faut un peu corriger. 5. Déclarer l’endroit où l’on veut insérer la bibliographie. Avec TEX, utiliser \bibtex[format]{bibli}

où bibli.bib est la liste de toutes les références, et format.bst est le fichier de style. Avec LYX, cela s’obtient par [Insert − BibT eX]. 6. Une première exécution de "latex aaa" crée un fichier aaa.aux qui contient entre autres la liste des références à extraire. Exécuter ensuite "bibtex aaa", ce qui crée un fichier aaa.bbl contenant une compilation des références extraites. Consulter aaa.blg quand cela se passe mal. 7. L’utilisation de natbib.sty permet de disposer de plusieurs méthodes de citation (nom, date, regroupements) qui facilitent la vie. Parfois cela n’est pas compatible avec le *.bst fourni. 8. Un éditeur de *.bib est pybibliographic (frontal). Le testeur pybcheck est efficace. Lorsqu’il manque une virgule, le signalement porte sur le début de la bibentry, et non sur la virgule manquante. Semble s’interfacer avec LYX.

5.6.2 bst 1. Lorsque l’éditeur d’une revue est incapable de fournir un fichier *.bst, recopier le répertoire latex/custom-bib vers un endroit où l’on puisse écrire e.g. ~/docs/Bibliography/custom-bib. Copier le fichier english.mbs en aaa.mbs (il y a toujours quelque chose à modifier à cet endroit). Utiliser la commande latex makebst.tex. Ce batch utilise merlin.mbs pour obtenir les réponses à un grand nombre de questions. Déclarer le nom du fichier de sortie (aaa.dbj) et le fichier langue aaa.mbs. Le fichier aaa.dbj peut être modifié à la main. La compilation latex aaa.dbj fournit le fichier aaa.bst voulu.

21 5.7 Quelques commandes utiles 5 TETEX, TEX, LATEX

2. Le placement d’un fichier *.bst n’obéit pas aux mêmes règles qu’un fichier *.sty ou *.tex. Pour du tex, la règle est donnée par kpsewhich -show-path=tex. Ce qui revient à :

for aa in kpsewhich// generic// /// ; do for bb in /home/ipse !!/etc !!/var/lib !!/usr/local/share !!/usr/share ; do $$bb/texmf/tex/$aa

3. Tandis que pour un fichier *.bst, la règle est donnée par : kpsewhich -show-path=bst. Ce qui revient à :

for aa in bst// csf// ; do for bb in /home/ipse !!/etc !!/var/lib !!/usr/local/share !!/usr/share ; do $$bb/texmf/bibtex/$aa

4. On lie /usr/share/texmf/bibtex/bst/_modified_bst avec $ipse/.lyx/_modified_bst et on travaille dans ce répertoire. Une référence ****

5.7 Quelques commandes utiles

1. Fontes mathématiques. Pour accéder aux caractères blackboardbold, c’est à dire à NZRCU, utili- ser \usepackage{amsfonts} (cela se trouve automatiquement dans les LYX-layouts spécifiques). On appelle la fonte par \mathbb {}. 2. Pour obtenir que les indices et exposants se comportent comme pour P (en mode displaystyle), utiliser \mathop{S}_1 qui donnera : S 1 3. Pour obtenir la même chose pour un S gros, utiliser \def\sumS{\mathop{\mbox{{\LARGE $\mathfrak{S}$}}}}

6 S j=1

4. Pour obtenir de beaux vecteurs, \overrightarrow (la macro [altM][v] fait cela). Pour les pseudo- vecteurs, le mieux à faire est \overset{\curvearrowright}{B}, qui donne

y B

5. Tableaux. http://www.latex-howto.be/files/LaTeX-HowTo-ch5.pdf http://fr.wikibooks.org/wiki/LaTeX/Tableaux Pour écraser les marges, ajouter @{}l ou bien r@{} dans [clic − droit]−m−g . Latex_argument. Dans une cellule simple, cela modifie toute la colonne. Dans une cellule multi-colonne, cela ne modifie que le groupe. Et alors la largeur est décidée par le plus large. 6. Remarque: [C − S − v] permet de coller des cellules depuis une table excel.

5.8 Le package prettyref

1. Ce package permet d’utiliser des références formatées c’est à dire nommées. Une référence fig:chat- noir est décodée en "figure" + "chat-noir"... à condition que babel (ou un autre) n’ait pas redéfini le caractère [:]. 2. Quand tout va bien, on a le nom_du_type de l’objet référencé, un espace insécable (fourni par prettyref) puis la valeur du compteur utilisé (fourni par ref, à qui prettyref sous-traite la deuxième partie de la référence). 3. Dans SuSE − 9.3, prettyref ne fait plus partie de la distribution LATEX standard. Ceci peut être dû au manque de compatibilité, ou à toute autre raison. On peut la retrouver depuis ctan mais... cela ne fonctionne pas (conflit avec babel). Nous avons fini par réécrire ce package en entier, avec les remarques suivantes :

22 6 LYX

Incl. 7 La nouvelle procédure prettyref \@ifundefined{algoname}{\def\algoname{\fname@algorithm}}{} \def\newrefformat#1#2{\@namedef{pr@#1}##1{#2}} \newrefformat{alg}{{\algoname}~\ref{#1}} \newrefformat{fig}{{\figurename}~\ref{#1}} \newrefformat{tab}{{\tablename}~\ref{#1}}

\newrefformat {eq}{\textup{(\ref{#1})}} \newrefformat{zalg}{Algorithm~\ref{#1}} \newrefformat{cha}{Chapter~\ref{#1}} \newrefformat{cor}{Corollary~\ref{#1}} \newrefformat{def}{Definition~\ref{#1}} \newrefformat{exa}{Example~\ref{#1}} \newrefformat{lem}{Lemma~\ref{#1}} \newrefformat{not}{Notations~\ref{#1}} \newrefformat{pro}{Proposition~\ref{#1}} \newrefformat{rem}{Remark~\ref{#1}} \newrefformat{ses}{Session~\ref{#1}} \newrefformat{sec}{Section~\ref{#1}} \newrefformat{sub}{Subsection~\ref{#1}} \newrefformat{thm}{Theorem~\ref{#1}} \newrefformat{xca}{Exercice~\ref{#1}}

\newcommand{\prettyref}{\catcode‘\:=12 \pprettyref} \def\pprettyref#1{\@prettyref#1:}

\def\@prettyref#1:#2:{ \expandafter\ifx\csname pr@#1\endcsname\relax \PackageWarning{prettyref}{Reference format #1\space undefined} \ref{#1:#2} \else \csname pr@#1\endcsname{#1:#2}\fi}

1. Le package prettyref n’est pas le mieux placé pour définir les noms des figures et des sous-sections. Mais babel ne fournit pas les noms des sous-sections et des théorèmes (cela se trouve éparpillé dans diverses feuilles de style). Nous avons donc décidé d’utiliser les noms des trois flottants usuels et de coder en dur les autres noms. 2. Il faut faire protéger le caractère [:] des plaisanteries babelisantes. Pour cela, l’ancienne procédure prettyref est masquée en pprettyref (Alg. 7) et est précédée par un \catcode qui remet le caractère [:] à sa valeur simple.

6 LYX 6.1 Copie rapide d’une installation déjà en place 1. Copier .lyx/bind et .lyx/layout (il y a parfois quelques modifs à faire au fichier my_own_binds); 2. Copier l’incantation magique pour l’afficheur xdvi; 3. Recopier le répertoire texmf/tex/latex/_modified depuis un autre ordinateur et exécuter texhash. 4. Sous LYX : choisir le *.bind qui va bien et lancer Tools . Reconfigure. 5. Modules. Pas besoin de reconfigurer LYX lorsqu’un module a changé: supprimer et ajouter à la suite.

6.2 D’une version à l’autre 6.2.1 Inventaire 1. Nous avons pu contempler les versions suivantes (Tab. 2):

23 6.2 D’une version à l’autre 6 LYX

SuSE − 42.1 LYX 2.1.5 SuSE − 11.4 LYX 2.0.0 SuSE − 11.4 LYX 1.6.9 SuSE − 11.3 LYX 1.6.5 SuSE − 11.3 LYX 1.5.4 SuSE − 10.2 LYX 1.5.3 SuSE − 10.2 LYX 1.4.2 Win$ LYX 1.3.7 SuSE − 9.3 LYX 1.3.5 SuSE − 8.1 LYX 1.2.0 SuSE − 7.3 LYX 1.1.6

Tab. 2 – Correspondance Suse LYX

2. A chaque fois, la compatibilité ascendante est bonne pour les fichiers. LYX 2.0 donne un méca- nisme pour recoder les *.layout et les *.bind (non testé). A partir d’un certain moment, et en tout cas depuis SuSE − 11.3, il est possible d’exporter un fichier LYX dans une version précédente (1.3, 1.4, 1.5). Non testé. 3. Pour les versions 1.x de LYX, une compatibilité "raisonnable" des *.layout et des *.bind s’obtient en laissant en double les interprétations de commandes : celles qui ne s’appliquent pas provoquent un message, mais pas un arrêt. 4. Pour les versions avant la 1.6, la compatibilité descendante n’était pas prévue. Or elle est indis- pensable pour échanger des documents entre plusieurs ordinateurs. Le passage LYX 1.3.5 7→ LYX 1.2.0 ne tenait pas compte des dimensions des images (mais ne les supprimait pas). Par contre, le passage LYX 1.3.7 7→ LYX 1.3.5 nécessitait une moulinette.

6.2.2 A propos de la base de données des rpm

Description d’un problème survenu lors d’une mise à jour. Ne semble pas avoir de lien avec LYX, mais avec yast2 (ou en tout cas le mécanisme de rpm). 1. Description des circonstances. Chargement de lyx.2.0.0.rpm, placement dans un répertoire. Décla- ration dans YaST de ce répertoire. Installation du rpm. Envie de revenir en arrière. Suppression de lyx (=2.0.0) sous YaST. Installation de lyx, ayant coché version=1.6.9. Pas de problème ap- parent. 2. On lance YoU. Et il y a une suite de messages d’erreur. On revient sur YaST, et on regarde lyx. Il y en a deux. En détruire un enlève le programme du disque, mais donne une erreur. Enlever l’autre donne une erreur et ne l’enlève pas. Et YoU reste dans le malheur. 3. Remède : rpm --rebuilddb (root). Suggéré par http://www.alionet.org/archive/index. php/t-3100.html.

6.2.3 Upgrader LYX, à SuSE constant (SuSE − 11.4) Passage de LYX 1.6.9 à 2.0.0 sous SuSE − 11.4. 1. Commencer par faire une copie du répertoire ipse/.lyx car il sera modifié "automatiquement". 2. Le rpm se trouve à :http://download.opensuse.org/repositories/Publishing/openSUSE_ 11.4/x86_64/lyx-2.0.0-32.1.x86_64.rpm 3. Les nouvelles possibilités sont décrites http://wiki.lyx.org/LyX/NewInLyX20/. En particulier, support de xelatex. 4. Utilitaires de conversion: $LYXDIR/scripts/xxx.py. lyx2lyx pour upgrader un fichier (se fait tout seul) layout2layout pour upgrader définitivement un layout prefs2prefs pour convertir preference, ui, bind

6.2.4 Upgrader LYX, à SuSE constant (SuSE − 10.2) Passage de LYX 1.4.2 à 1.5.3 sous SuSE − 10.2. 1. Le rpm se trouve à : http://suse.bifi.unizar.es/packman/suse/10.2/x86_64/lyx-1.5. 3-0.pm.1.x86_64.rpm

24 6 LYX 6.3 Fichiers de lancement

2. Ne pas chercher à sauter l’installation de aiksaurus. Sinon, LYX ne démarre plus. On peut le télécharger en: ftp://ftp.gwdg.de/pub/linux/misc/suser-guru/rpm/packages/Office/ aiksaurus/libaiksaurus-1.2.1-1.guru.suse102.x86_64.rpm.

6.2.5 Quelques commandes sans raccourcis [M − p][space] ouvre la liste des styles de paragraphe, et on peut y naviguer par initiales. [M − e] . Récent ouvre une liste des derniers copier/coller [M − e] . Settings permet d’accéder au dialogue des propriétés de l’encadré [inset-settings]. C’est ainsi qu’un ert peut être inline. azor [M − b][n] Buffer-next [M − b][S − N] Buffer-previous Un diff entre LYX.1.4.2.commands et LYX.1.5.3.commands comporte 250 lignes. Pas encore examiné tout cela.

6.3 Fichiers de lancement 1. Depuis SuSE − 11.4 (et peut-être même avant), ces fichiers sont mis en place par le rpm. 2. Le mimetype d’un fichier *.lyx est application/x-lyx. Le bon fonctionnement nécessite donc un fichier de typage /opt/kde3/share/mimelnk/application/x-lyx.desktop et un fichier de lancement /usr/share/applications/lyx.desktop. La version SuSE − 10.2 de ces fichiers est donnée Alg. 8.

Incl. 8 Les fichiers de description de LYX. [Desktop Entry] [Desktop Entry] Comment=.lyx Categories=Office;WordProcessor Encoding=UTF-8 Encoding=UTF-8 Icon=dvi Exec=lyx MimeType=application/x-lyx GenericName=Word Processor Patterns=*.lyx Icon=lyx Type=MimeType MimeType=application/x-lyx Name=LyX [Property::X-KDE-text] Terminal=false Type=bool Type=Application Value=true X-SuSE-translate=true KdE_3.5 : mimelnk/.../x-lyx.desktop KdE_3.5 : applications/lyx.desktop

Incl. 9 Les fichiers de lancement de LYX. # KDE Config File [Desktop Entry] [KDE Desktop Entry] Name=&LyX BinaryPattern=lyx; Comment=LyX Comment[C]=The klyx text processor Exec=lyx Exec=klyx Icon=kfract Icon=klyx.xpm MimeType=text/x-lyx; MimeType=text/x-lyx; Type=Application MiniIcon= Name[C]=k&Lyx Path= Protocols= . SwallowExec= . SwallowTitle= . Terminal=0 . TerminalOptions= . Type=Application . KdE_1 : Editors/klyx.kdelnk KdE_2/KdE_3 : Editors/lyx.desktop

25 6.4 Configuration 6 LYX

3. Sous KdE_1, il était utile de modifier kEdit et kWrite pour leur adjoindre le type x-lyx. Moyen- nant quoi, les fichiers *.lyx étaient affichés avec des liens actifs sur klyx, kedit et kwrite, avec kedit comme application par défaut.  Avec KdE_2/KdE_3, le lien LYX est relégué en arrière plan si kedit ou kwrite sont déclarés.

6.4 Configuration Les fichiers concernés se trouvent dans lyxdir (i.e. /usr/share/lyx) et dans ~/.lyx. Nous avons choisi d’implémenter le plus de choses possibles dans le répertoire ~/.lyx. On recopie donc lyxdir/lyxrc. example vers ~/.lyx/lyxrc et lyxdir/bind/* vers ~/.lyx/bind. La valeur effective de lyxdir se lit par Help/Version. Laisser lyxrc.default dans lyxdir. En cas de modification de la configuration de- puis un LYX en exécution, il se crée un fichier .lyx/preferences. Dans lyxrc, configurer les points suivants : LookNfeel interface=default, bind=my_own_binds, backup=5mn Language babel, enchant (see Section 6.6) Outputs default_paper=A4, Paths temporaires=rien File/Formats dvi = xdvi -geometry 924x960 -browser konqueror -expertmode 4 -s 6 -linkstyle 2 File/Formats pdf2 (pdflatex) : pdf = evince Converters? 1. Les fichiers temporaires vont dans /tmp/lyx_session/lyx_buffer. On constate que LYX sup- prime "le plus souvent" ces répertoires temporaires, contrairement à KLYX qui les laissait "le plus souvent". 2. Visualisation : à nouveau xdvi et evince  Avant, on pouvait supprimer l’écran initial

6.5 Copier-coller

Dans les anciennes versions de LYX, il y avait un fonctionnement différent du copier-coller selon le tandem source-destination. Pour les versions SuSE − 11.4 et SuSE − 42.1: 1. Depuis le monde extérieur vers LYX : le tandem [C − c], [C − v] colle en joignant les lignes. Il en est de même pour une sélection souris, suivie d’un clic central. Les deux actions utilisent des buffers différents 2. Depuis LYX vers le monde extérieur: idem. 3. Depuis le monde extérieur (e.g. sage ou Maple) vers l’éditeur d’équations: idem. Bilan: tout est redevenu standardisé. En outre, [S − C − v] colle sans joindre les lignes. Et en outre colle les cellules d’un tableau externe (excel) dans les cellules d’un tableau LYX (attention néanmoins aux scories: définition de styles par défaut, qui sont donc inutiles, mais ne sont pas filtrés).

6.6 Correcteur orthographique Choix au 2016-12-12: enchant. 1. Il y a plusieurs choix possibles Atkinson, Kevin(2011). Évidemment, il faut prévenir les logiciels (en particulier LYX du choix qui a été fait...). 2. Cela commence par des dictionnaires. Il y a aspell-fr, ispell-french et myspell_fr_FR. 3. Cela continue par des programmes qui les utilisent. Il y a aspell, ispell, enchant (libenchant1 + enchant-tools), hunspell. Et l’on a (SuSE − 42.1): ispell -v | head -n 1 @(#) International Ispell Version 3.3.02 12 Jun 2005 aspell --help | grep Copy Aspell 0.60.6.1. Copyright 2000-2011 by Kevin Atkinson. enchant -v @(#) International Ispell Version 3.1.20 (but really Enchant 1.6.0) hunspell -v @(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2) Copyright (C) 2002-2008 László Németh. License: MPL/GPL/LGPL.

26 6 LYX 6.7 Exclusion du correcteur orthographique

4. gedit...

5. Jusqu’à SuSE −11.4,LYX utilisait aspell. Depuis SuSE −13.1,LYX utilise hunspell (par défaut) ou bien enchant. Nous avons choisi enchant (mieux documenté sur le web ?).

6. On obtient la liste des dictionnaires installés par la commande

enchant-lsmod -list-dicts en (aspell) ; en_CA (aspell) ; en_GB (aspell) ; en_US (aspell) fr (aspell) ; fr_CH (aspell) ; fr_FR (aspell)

7. On remarque que enchant donne la préférence aux dictionnaires aspell sur les dictionnaires myspell (qui étaient chargés également).

8. Depuis SuSE − 42.1, enchant sous LYX utilise les indications de langue au sein d’un document pour changer de dictionnaire en tant que de besoin ... et le nom de ce dictionnaire s’affiche (pour changer de variante locale). Le même avait lieu sous SuSE − 11.3 avec aspell_(library), sans que le dictionnaire en cours soit affiché.

9. Les mots spéciaux (i.e. les mots déclarés valables au cours des sessions de correction se trouvent en.

~/.config/enchant (SuSE − 42.1), après avoir été en ~/.ispell_langue (SuSE − 11.4)

 Erreur SuSE − 6.4. Quand la langue est français, elle est codée french et ispell ne trouve pas le dictionnaire francais. Contournement : placer des liens symboliques dans /usr/lib/ispell sur les fichiers *.aff et *.hash (intégré dans nullix_config)  Comment isoler les passages que l’on ne veut pas corriger ?  Comment modifier le texte en cours de correction, autrement qu’en fermant le correcteur pour le rouvrir ensuite ?

6.7 Exclusion du correcteur orthographique

Pour éviter qu’une structure LYX soit passée au correcteur orthographique, ajouter la ligne suivante dans le Layout qui la concerne:

SpellCheck 0

Pour obtenir une zone d’exclusion qui se comporte à la façon de URL, utiliser le module "mycyan".

27 6.8 Imprimantes 6 LYX

Incl. 10 Le module mycyan #\DeclareLyXModule{mycyan} #DescriptionBegin #Adds a mycyan inset #DescriptionEnd Format 11

InsetLayout Custom:mycyan LyXType custom LatexType command LatexName mycode Decoration minimalistic Font Color latex Family typewriter EndFont LabelFont Color latex Size Small EndFont LabelString cyan SpellCheck 0 ##### End

AddToPreamble \usepackage{color,svgcolor} \newcommand{\mycode}[1]{\texttt{\textcolor{darkgreen}{#1}}} EndPreamble

6.8 Imprimantes 1. Dans le temps, les noms d’imprimantes proposés sont composés de la liste triée caps_first des derniers alias dans /etc/printcap ... donc klein|so_und_so|Klein ..... 2. Au moins depuis SuSE − 11.4, le nom d’imprimante est en blanc. Si l’on ajoute un nom, rien ne se passe.  Imprimer des multiples : il semble que klyx ne transmet pas la multiplicité au spooler. En tout état de cause, les batchs rv* résolvent la question.

6.9 Table des matières Les sections étoilées (chapter*, section*, etc) ont été crées pour ne pas être numérotées... et ne pas figurer dans la table des matières. Mais il est bien commode d’avoir Index, Biliography, etc. dans la table des matières. Utiliser pour cela: \cleardoublepage \phantomsection %To make hyperref link correct \addcontentsline{toc}{chapter}{Index} On remarque que [BibTEX Generated Bibliography] (le dispositif fourni par LYX) ne fournit pas le \phantomsection nécessaire. Faire ce qu’il faut.

6.10 Layout AAA-dou-hyperref-6 (article) Version SuSE − 42.1. NoStyle Chapter, Chapter* NoStyle Algorithm ## conflit avec encadré algorithm Part, Part* Proof (proof)

28 6 LYX 6.11 hyperref

Keywords (keywords) Thanks (thanks) Algorithme (zalg) CopyStyle Definition Construction (con) CopyStyle Theorem Exercise (xca) CopyStyle Definition Maple (map) CopyStyle Definition Zilab (sci) CopyStyle Definition LYX-Code (lyxcode) Preamble contains what is needed for the styles, together with: \usepackage{amsmath} \usepackage{amsthm} \usepackage{color,svgcolor} \usepackage{xcolor} \usepackage{hyperref} \providecommand{\backref}[1]{\relax} \renewcommand*{\backref}[1]{} \providecommand{\backrefalt}[4]{\relax} \renewcommand*{\backrefalt}[4]{ ... } \hypersetup{colorlinks, linkcolor={red!50!black}, citecolor={blue!50!black}, urlcolor={blue!80!black} }

6.11 hyperref

1. Le package hyperref permet d’obtenir des documents contenants des liens hypertexte, à la fois dans les fichiers dvi et dans les fichiers pdf. Il faut trouver les bons réglages... et ne pas les égarer. Autrement dit, il faut inclure tout cela dans une feuille de style (LYX-layout). 2. Évidemment, il faut utiliser des viewers qui voient les liens. Cela veut dire xdviviewer (dvi) et evince (pdf). 3. Si l’on fabrique les pdf avec dvipdfm, il faut s’attendre à des drames: le pdf va dépendre de ce qui est transmis par le dvi... et cela n’est pas documenté. Donc fabriquer les pdf en direct, en utilisant pdflatex (modifier les *.bind en conséquence, le code est pdf2). 4. Dans les options du document: a4paper, obeyspace, breaklinks. Et c’est tout. Surtout pas hyper- ref. Ne rien cocher sous LYX. 5. Si l’on veut les backref, ajouter cette option au document (les routines sont déjà déclarées dans le LYX-layout).

6.12 hyperref (SuSE − 11.3) Ma config de l’époque utilisait dvipdfm. Mauvaise idée. 1. Les expérimentations qui suivent sont SuSE − 11.3. 2. Le fichier newfile1.lyx est de style article

options . backref, a4paper, obeyspaces, breaklinks, hypertex préambule . vide résultat: aucun lien 3. Le fichier newfile1.lyx est de style article

options . backref, a4paper, obeyspaces, breaklinks, hypertex préambule . \usepackage{hyperref} résultat: liens bibliographie bleu, liens sections bleu, urls bleu, visités violet les urls ne sont pas coupées si hypertex manque, et obeyspaces, breaklinks semblent sans effet. 4. Le fichier newfile2.lyx est de style AAA-pldx. Le fichier article2.layout contient (vers la fin) une ligne

29 6.13 Babel 6 LYX

\usepackage[dvips, breaklinks, colorlinks=true, urlcolor=red, citecolor=blue, anchorcolor=blue, linkcolor=magenta]{hyperref}

résultat: liens index magenta, bibliographie bleu, sections rouge, urls rouge, visités violet les liens ne coupent pas, avec ou sans préambule, avec ou sans options 5. Le fichier newfile3.lyx est de style AAA3-pldx. Préambule vide. Options backref (et c’est tout). Le fichier article3.layout contient (vers la fin) une ligne

\usepackage[hypertex, colorlinks=true, urlcolor=red, citecolor=blue, anchorcolor=blue, linkcolor=magenta]{hyperref}

résultat: liens index magenta, bibliographie bleu, sections rouge, urls rouge, visités violet les liens coupent. Il faut hypertex (soit dans le layout, soit dans les options ; on le place donc dans le layout) 6. Pour ce qui est de newfile3.lyx, on obtient un pdf avec liens par dvipdfm. Mais alors, les liens sont encadrés en bleu de façon stupide. Et les options style bordercolor ne servent à rien. Si l’on place dvipdfm dans les options de hyperref, tout est beau, mais le dvi n’a plus de liens. Tout se passe comme si hyperref plaçait les aiguillages comme il faut et que chaque driver en tenait compte ou non, chacun à sa façon. 7. Bilan des courses. Le contournement adopté est de maintenir deux styles en miroir, l’un pour pdf (AAA-dou-pdf) et l’autre pour le dvi (AAA-dou-dvi), que l’on commute dans la déclaration du fichier. Pour pdf, déclarer le driver dvipdfm (et tout va bien). Pour le dvi, déclarer dvips (et les liens ne sont pas coupés) ou bien hypertex (et les liens sont tous de la même couleur).

6.13 Babel

1. babel sucks (see Subsection 5.5). Néanmoins, les déclarations des langues sont utiles pour gérer le correcteur orthographique. Et donc totalement débrancher babel est "légèrement abusif". 2. La modification du french.ldf décrite supra est (le plus souvent) suffisante pour survivre. On peut aussi supprimer \addto\extrasfrench dans /usr/share/lyx/languages.

 LYX appelle babel y compris pour un document "american". Sauf qu’un tel document est, par définition, dans la langue d’origine, et que les auteurs des routines pré-babel n’en tiennent pas compte. Bilan : on peut voir un magnifique "american" au début du titre courant des pages IEEEtrans.cls. Contournement basique : ajouter, quelque part avant le \markboth, la ligne \renewcommand{\foreignlanguage}[1]{}  Le package prettyref a été réécrit pour contourner la babel-merdification du caractère [:], cf. Subsection 5.8.

6.14 Hangul 6.14.1 Keyboard Hardware

Settings . Hardware . Input devices . Keyboard Hardware: Keyboard 104-key ; Numlock on startup Zone de test: vérifier #€. Layouts Show layout indicator ; even for single ; show label (no flag) Switching policy : application Shortcuts : none Configure : fr/French variant=none label=fr

6.14.2 Moteur ibus (SuSE − 42.1)

1. Bien entendu, le moteur de SuSE − 11.3 (scim) ne fait plus partie de SuSE − 42.1. On installe ibus, soit les packages:

30 6 LYX 6.14 Hangul

chewing-data chewing-utils ibus ibus-branding-openSUSE-KDE ibus-chewing ibus-gtk ibus-gtk3 ibus-hangul ibus-lang ibus-qt libchewing3 typelib-1_0-IBus-1_0 2. On exécute ibus-setup. Cela commence par IBus has been started! If you cannot use IBus, add the following lines to your $HOME/.bashrc; then relog into your desktop. export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus (cela n’a pas été fait, et ne semble pas utile) 3. General next_input_method [M − C − space] candidate_orientation vertical show_property_panel always show_icon_in_system_tray yes use_custom_font NanumGothic_Regular_16 4. Input methods : French-French ; Korean-Hangul. 5. Advanced Use_system_keyboard_layout yes et donc, fr est toujours choisi/affiché Same_input_method_everywhere no 6. Alors, sur une console, [M − C − space] bascule l’icône entre FR et KR. En l’absence de system_keyboard, les touches [azqwx] basculent entre azqwx et qwazx.

6.14.3 Hangul keyboard= Dubeolsik

1. Properties sur Korean-Hangul équivaut à lancer ibus-setup-korean. Hangul_keyboard= Dubeolsik, ¿ºZO”d Start_in_Hangul_mode= yes Hangul/Roman= [M − C − right] Hanja= [Super_L]

2. Alors, sur LYX, [M − C − space] bascule l’icône entre FR et KR. Au début de KR, on est en mode hangul, et a=ㅂ, q=ㅁ, z=ㅈ. 3. En l’absence de system_keyboard, le mode roman donne a=q, q=a, z=w. le mode Hanja donne qnsqns& = 問問 (la touche[&] produit le caractère "1")

6.14.4 Hangul keyboard=Romaja 1. Properties sur Korean-Hangul Hangul_keyboard= Romaja Start_in_Hangul_mode= yes Hangul/Roman= [M − C − right]

31 6.14 Hangul 6 LYX

Hanja= [Super_L] 2. On tape le Revised Romanization, et cela donne le hangul correspondant. a z e r t y u i o p ^ $ 아 ㅈ \ ㄹ ㅌ sᅵ ĺ sᅵ š¸ ㅍ $ q s d f g h j k l m ù ㅋ ㅅ ㄷ ㅍ ㄱ ㅎ ㅈ ㅋ ㄹ ㅁ ù < w x c v b n , ; : ! < ĺ ㅈ ㅊ ㅂ ㅂ ㄴ , ; : ! i songgye seongdeog ya yo "é¶ sᅵ$ í>ᅨ $ í ü 야 ¯¹

3. En mode hangul, seonggye+Super_L donne $ í界. En mode hanja bloqué, seonggye+Super_L+Super_L donne le choix entre 星界, 成鷄 et autres (see Fig. 4

Fig. 4 – Choix du candidat pour "mun"

4. Et alors [M − C − right] permet de basculer avec sur le clavier roman, qui est ici le clavier français ordinaire. 5. La touche [escape] reste en clavier KR, mais force le mode roman.

6.14.5 Sortie Hangul SuSE − 42.1 1. On charge texlive-cjk, texlive-cjk-doc, texlive-cjk-ko, texlive-cjk-ko-doc (utile ou non). 2. On copie /kroot/usr/share/texmf/fonts/tfm/bitstream/ (utile ou non) 3. Iljimae (ancien document):

Document . Class . book(AAA-dou-broadway-dvi-5a) Document . Modules . mygul, mychi Document . Pdf . vide Document . Fonts . CJK . myeongjo Document . Language . English + Other= Unicode(utf8) Compile, avec toute la mise en page, en mode dvi. Par contre broadway-dvi-6 ne va pas. Et la sortie en pdf on plus. De toutes façons, changé: font=myegyeong et encoding=Unicode(CJK)(utf8). 4. Le présent fichier

Document . Class . article(AAA-dou-hyperref-6) Document . Class_options . a4paper, obeyspaces, breaklinks, encapsulated Document . Modules . mygul Document . Pdf . vide Document . Fonts . CJK . myeongjo Document . Language .. French + Other= Unicode(utf8) 5. Package CJKutf8. Pour une raison inconnue, ce package doit être chargé juste après

\documentclass[french,american]{article} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc}

32 6 LYX 6.14 Hangul

Incl. 11 mygul (nouvelle version)

#\DeclareLyXModule[mygul.sty]{mygul} #DescriptionBegin #Adds an mygul inset #DescriptionEnd

Format 11

InsetLayout Custom:Mygul LyXType custom %% LatexName mygul %% This is mygul.sty LatexType command %% Decoration classic %% Copyright 2011 by pldx1 Font %% Size Small EndFont \ProvidesPackage{mygul} MultiPar true \typeout{Document Style ’mygul’} LabelString mygul \RequirePackage{CJK} # Requires mygul End \newcommand{\mygul}[1]{\begin{CJK}{UTF8}{mj}% #1% AddToPreamble \end{CJK}} \usepackage{CJKutf8} \usepackage{mygul} EndPreamble mygul.module mygul.sty

Sinon les accentués vont bien jusqu’au premier mygul. Et après, cela ne va pas (caractère inconnu). Une façon simple de faire cela est de modifier le module "mygul" (cf. Alg. 11). 6. Cela a nécessité, en outre, de (a) Revoir prettyref (symbole § remplacé par \S) (b) Revoir la biblio (passer en UTF-8... et corriger les accentués). (c) Revoir certaines inclusions: tell_commands.txt, etc 7. Le fichier Queen_Inhyeon’s_Man-05 Document . Class . book(AAA-aaa-broadway-dvi-6) Document . Class_options . a4paper, obeyspaces, breaklinks, encapsulated Document . Modules . mygul Document . Pdf . vide Document . Fonts . CJK . myeongjo Document . Language .. French + Other= Unicode(utf8)

6.14.6 Moteur scim (SuSE − 11.3) 1. Charger les modules scim, scim-bridge, imhangul, scim-hangul, libhangul. 2. Placer l’icône scim juste au-dessus du menu KdE. 3. Quand on place la souris sur cette icône, elle se développe en une barre. Cette barre contient l’icône, puis un clavier puis un menu. 4. Le clavier. Un clic donne le choix entre normal/coréen, un clic droit donne un menu, dont la configuration. 5. La configuration. (a) Front_end_Global : Trigger: Control+Alt+space Input_method: Control+Alt+right

33 6.14 Hangul 6 LYX

(b) IMEngine_Global le coréen "zkzala" donne ¸úᆽny 6. Charger les fontes korean. (a) Lister ce qui existe par fc-list | sort | more. (b) La fonte Nanum Myeongjo est intéressante. Il suffit de la copier dans /usr/share/fonts/truetype. Elle est alors visible dans gimp, dans kwrite (encoding utf8), dans lyx (qui est toujours utf8) et dans konsole lorsque LANG=en_US.utf-8. Et cela s’imprime depuis kwrite. (c) Faut-il faire quelque chose pour installer ces polices ? 7. Programmes utiles : kcharselect, kfontview, kfontinst ?

6.14.7 Sortie Hangul SuSE − 13.1 depuis TEX/LYX For licensing reasons, TEXLive doesn’t contain cyberbit.ttf and corresponding TEX subfont metric files. Thus you can’t process an utf8 *.tex file without installing this font (or another) manually. Fournir une True Type Font *.ttf libre mais moche, ainsi qu’un dispositif automatisé permettant d’ins- taller une quelconque police *.ttf ne soulèverait aucun licensing problem. Ce manque engendre beaucoup de bruit sur le web. Quelques pages parmi d’autres. kile http://kile.sourceforge.net/Documentation/html/cjk.html ucsc http://people.ucsc.edu/~kirchner/resources/latex/CJK-latex.html chou http://www.ece.uci.edu/~chou/unicode-tex-ps-font.html peng http://bo-peng.blogspot.com/2008/01/building-freetype1-contrib-ttf2tfm_07.html yang http://www.cs.ust.hk/~ysyang/latex/CJK_latex_install.howto slak http://www.math.nus.edu.sg/aslaksen/cs/cjk.html tugo http://www.tug.org/texlive/Contents/live/texmf-dist/doc/latex/cjk/doc/pdfhowto/ HOWTO.txt 1. Charger la bibliothèque freetype-tools. Elle contient entre autres ttf2tfm. 2. Le package CJK d’origine (celui qui est sur ctan) contient un sous-répertoire d’exemples. Les charger si besoin est. Si l’on essaie de les compiler tous, on constate que certains réussissent, d’autres pas. En outre, UTF8.tex se compile mais le *.dvi affiche à vide.

6.14.8 cyberbit, télécharger 1. Cyberbit est une police. On suit les directives ucsc et kile. 2. Créer un répertoire. Par exemple cyberbit. Placer dedans http://orwell.ru/download/cyberbit.zip. Décompacter et minusculer. Ajouter http://delloye.free.fr/Unicode.sfd. 3. Pour les fichiers *.tfm et *.enc, la commande indiquée par kile ne fonctionne pas, et celle indiquée par ucsc ne fabrique pas les *.enc. On récupère les fichiers *.tfm en http://www. ece.uci.edu/~chou/unicode/cyberbit-tfm.tgz et les *.enc en http://www.ece.uci.edu/ ~chou/unicode/cyberbit-enc.tgz. 4. On récupère le fichier *.map depuis http://delloye.free.fr/cyberbit.map. 5. On récupère le fichier 70 depuis http://delloye.free.fr/c70cyberbit.fd. 6. La commande kile ttf2pfb cyberbit.ttf -o cyberbit.pfb donne un fichier illisible par le lecteur de fontes. L’archive http://people.ucsc.edu/%7Ekirchner/resources/files/pk.zip de ucsc n’existe pas. 7. On peut fabriquer les *.720pk par ttf2pk -q cyberbit$ii$jj 720 à l’intérieur d’une boucle. Il n’y a besoin de rien d’autre dans le répertoire de construction lorsque l’on a déjà passé texhash. On fait la même chose avec les *.1200pk. 8. Agir sur le fichier texmf.cnf. Commencer par le localiser à l’aide de kpsewhich. Il se trouve en /etc/texmf/web2c/texmf.cnf. Vérifier que la ligne parlant de TTFONTS est active (uncom- mented) et pointe sur le répertoire où se trouve cyberbit.ttf. 9. Et maintenant, on place ce qu’il faut là où il faut. On crée le batch Alg. 12, à exécuter par root.

34 6 LYX 6.14 Hangul

Incl. 12 mk-cyberbit dirtfm=$TEXMF/fonts/tfm/bitstream/$name #ucsc direnc=$TEXMF/fonts/enc/pdftex/$name dirmap=$TEXMF/fonts/map/pdftex/$name dirpk6=$TEXMF/fonts/pk/$name/dpi600 dirpk7=$TEXMF/fonts/pk/$name/dpi720 dirttf=$TEXMF/fonts/truetype/$name #ucsc dirpfb=$TEXMF/fonts/type1/$name diralt=$TEXMF/tex/misc #ucsc diretk=/etc/ttf2pk #ucsc mkdir -p $dirtfm ; cp $name-tfm/* $dirtfm mkdir -p $direnc ; cp $name-enc/* $direnc mkdir -p $dirpk6 ; cp $name-pk-600/*.600pk $dirpk6 mkdir -p $dirpk7 ; cp $name-pk-720/*.720pk $dirpk7 mkdir -p $dirmap ; cp $name.map $dirmap mkdir -p $diralt ; cp c70$name.fd $diralt mkdir -p $dirpfb ; cp $name.pfb $dirpfb mkdir -p $dirttf ; cp $name.ttf $dirttf cp $diretk/ttfonts.map $diretk/tmp echo "$name@Unicode@ $name.ttf" >> $diretk/tmp sort -u $diretk/tmp > $diretk/ttfonts.map rm $diretk/tmp cd .. ; mktexlsr ; updmap ; texhash for qui in $name.map $name.ttf c70$name.fd ${name}9a.tfm ${name}9a.600pk ${name}9a.720pk do kpsewhich $qui ; done

10. Pour que LATEX puisse produire un fichier *.dvi avec des caractères CJK, il faut ajouter une ligne dans ttfonts.map. Le fichier /usr/share/texmf/ttf2pk/ttfonts.map est un lien sur /etc/ttf2pk/ttfonts.map. On y ajoute la ligne cyberbit@Unicode@ cyberbit.ttf. Rem: Alg. 12 utilise une ruse pour que sa ré-exécution ne crée pas une deuxième fois la ligne voulue. 11. La commande updmap sert à faire créer quelques fichiers utiles, tandis que le texhash est indis- pensable pour les rendre accessibles. 12. On utilise la commande kpsehich pour vérifier que les fichiers utiles sont bien accessibles. Au- trement dit, cela sert à vérifier si les répertoires choisis font bien partie de l’espace exploré par texhash. En particulier, les *.enc placés dans ../latex/cjk/... ne sont pas accessibles par kpsewhich (il faudrait sans doute reconfigurer quelque chose). De mème, les fichiers *.pk (ceux dont le nom n’indique pas la résolution) ne sont pas visibles quand ils ne sont pas dans un répertoire indiquant cette résolution comme ../cyberbit/dpi600. 13. On charge le fichier de test donné par slak : http://www.math.nus.edu.sg/aslaksen/cs/ sample-utf8.tex. La commande latex donne un *.dvi. Visionner ce *.dvi par xdvi lance un calcul de fontes, et l’on obtient le bon résultat. La commande pdflatex donne un *.pdf et sa visualisation donne tout ce qu’il faut.

6.14.9 mycyberbit, compiler On crée un nouveau répertoire (mycyberbit) et on y place une copie de cyberbit.ttf (que l’on appelle mycyberbit.tfm) 1. On copie le fichier Unicode.sdf dans le répertoire 2. Exécuter la commande ttf2tfm mycyberbit.ttf -w mycyberbit@Unicode@ qui est indiquée dans kile conduit à un fichier cyberbit.tfm de 1.6 KiB.

35 6.14 Hangul 6 LYX

J1 L`ı chun¯ Beginning of spring February 4 Z1 Yuˇ shuˇı 4 Rain water February 19 J2 J¯ıng zh´e Ê (ZÄ) Waking of insects March 6 Z2 Chun¯ f¯en  March equinox March 21 J3 Q¯ıng m´ıng  Pure brightness April 5 Z3 Guˇ yuˇ 7 (@ ) Grain rain April 20 J4 L`ı xi`a Beginning of summer May 6 Z4 Xiˇao mˇan  Grain full May 21 J5 M´ang zh`ong ’ Grain in ear June 6 Z5 Xi`a zh`ı ó June solstice June 22 J6 Xiˇao shˇu ! Slight heat July 7 Z6 D`a shˇu !! Great heat July 23 J7 L`ı qiu¯ Ë Beginning of autumn August 8 Z7 Chˇu shˇu ! (U!) Limit of heat August 23 J8 B´ai lu` } White dew September 8 Z8 Qiu¯ f¯en Ë September equinox September 23 J9 H´an lu` Ò Cold dew October 8 Z9 Shu¯ang ji`ang M Descent of frost October 24 J10 L`ı d¯ong ¬ Beginning of winter November 8 Z10 Xiˇao xuˇe ! Slight snow November 22 J11 D`a xuˇe !! Great snow December 7 Z11 D¯ong zh`ı ¬ó December solstice December 22 J12 Xiˇao h´an Ò Slight cold January 6 Z12 D`a h´an !Ò Great cold January 20

Fig. 5 – CJK is working !!!

3. La commande sans le -w crée 165 fichiers en *.tfm, mais pas de fichiers *.enc. Le programme engendre plein de messages. On les enregistre en mycyberbit.log. 4. Chaque fichier *.enc contient 260 mots (tester par wc -w). La première ligne du fichier cyber- bit03.enc est /cyberbit03Encoding [ tandis que la dernière est ]def Entre les deux, on a soit /index0x0125 pour faire référence à un caractère (ici hexa 0125) soit /.notdef pour indiquer la non existence. 5. On peut donc fabriquer les fichiers *.enc à partir du fichier *.log de ttf2tfm. Lorsque les 256 mots d’un fichier *.enc sont /.notdef, le plus simple est de détruire ce fichier. Le batch mk-enc vient gérer tout cela et placer les fichiers dans un sous répertoire. 6. Le fichier *.map contient une ligne cyberbit00

36 6 LYX 6.14 Hangul

10. On passe au fichier test-mycyberbit.lyx (avec la bonne police dans la fenêtre CJK du descripteur de fontes). On l’exporte en *.tex. On lance latex. Cela se compile. On ouvre le *.dvi sous okular depuis une console. Message "TexFont_PK:Character 99 not defined in font .../mycyberbitba.1200pk". Le dvi est lisible. On ouvre le mème *.dvi sous xdvi depuis une console. Cela engendre c8 et ba, sans message d’erreur, en 600 dpi. On compile avec pdflatex. Message pour c8 et ba, 600pk. Cela s’ouvre sous acroread. En zoom 1600%, la police roman est impeccable, la police hangul est crénelée. 11. On crée les *.1200pk et les .*720pk. On les supprime de /var/lib/texmf/... et on les place dans TEXMF/fonts/pk/.... Alors kpsewhich les trouve, pdflatex et xdvi aussi. Par contre, okular ne les trouve pas et les régénère (dans /var/lib). 12. En ouvrant le fichier *.pdf (qui utilise donc les *.720pk), cela semble mieux qu’avant (qui utilisait *.600pk).

6.14.10 myeongjo 1. On part de la police qui se trouve en /usr/share/fonts/truetype/NanumMyeongjo.ttf. On la renomme myeongjo et on applique tout ce qui vient d’être dit. 2. lyx . tex, puis latex, puis xdvi. Cela génère les 600dpi et cela s’affiche. okular génère les 1200dpi.

6.14.11 Bilan 1. Hypothèses. La fonte s’appelle (ou a été renommée) xxx.ttf, où xxx est un nom simple, sur le modèle [a-z][0-9a-z]*). Le répertoire où elle est placée s’appelle xxx et ce répertoire est quelque part dans la zone des fichiers de l’utilisateur. Tout ce qui est à faire sera exécuté depuis ce répertoire. 2. Hypothèses (suite). L’arborescence tex est saine et fonctionnelle. Le package latex/cjk est installé (à part les fontes pour utf8). Les utilitaires ttf2tfm et ttf2pk sont installés (ils font partie du package truetype-utils). Les howto supposent le plus souvent que ttf2tfm -w fonctionne. Nous avons ajouté le batch mk-enc pour ne pas dépendre de cette option. 3. Premier Cas. Le répertoire xxx contient déjà tout ce qu’il faut, et l’on veut seulement recopier tout cela aux bons endroits. Il suffit d’exécuter (root) le batch mk-install-font. Cela correspond typiquement à cloner sur un ordinateur peu rapide ce qui a déjà été calculé sur un autre ordinateur équipé de la même distribution. 4. Deuxième Cas. On part de rien, et le répertoire xxx contient uniquement la fonte, les deux batchs et le fichier Unicode.std (fourni avec cjk, le localiser par kpsewhich). (a) L’utilisateur exécute mk-install-font. En principe, cela calcule tous les fichiers indispensables. Si l’utilisateur ré-exécute le batch, plus aucun calcul n’a lieu et l’on voit s’afficher un message avec le nombre de sous-fontes engendrées. Cette phase est une phase de pur calcul et ne recopie rien nulle part. Si cela échoue, le barnum tex n’a pas été modifié (primum non nocere). (b) Quant les calculs ont réussi, vérifier que les lignes 2, 61 et 62 du batch pointent au bon endroit. TEXMF (ligne 2) désigne la racine du barnum tex. diretk (ligne 62) désigne le répertoire contenant le fichier ttfonts.map (une possibilité est /usr/share/texmf/ttf2pk/). Ce fichier est le plus souvent vide dans une installation originelle. Enfin dirttf (ligne 62) désigne le répertoire indiqué par grep TTFONTS $(kpsewhich texmf.cnf) Si cette ligne est vide (commented out), modifier le fichier de configuration en choisissant un répertoire raisonnable. (c) Alors root exécute mk-install-font. Les calculs ne sont pas refaits, mais les fichiers sont copiés à la bonne place. A la fin, le batch vérifie que les fichiers indispensables sont effectivement accessibles. Si cela échoue, il faut trouver quelles sont les destinations adaptées à l’arborescence tex concernée. (d) Une fois les fichiers mis en place, on teste la configuration, par exemple sur http://www. math.nus.edu.sg/aslaksen/cs/sample-utf8.tex : latex doit compiler les *.dvi et les viewers doivent se lancer dans les calculs de fontes (et afficher). Il est intéressant de lancer cela dans une console, pour voir passer les messages.

37 6.15 Clavier 6 LYX

(e) Quand tout fonctionne, l’utilisateur exécute à nouveau mk-install-font. Cela calcule toutes les sous-fontes (dans xxx), en résolution 1200 dpi et en 720 dpi. On se trouve alors dans le "Premier Cas" et root exécute à nouveau mk-install-font pour mettre les sous-fontes en place. 5. Lorsqu’un calcul de fonte d’affichage se passe mal, il faut supprimer les fontes correspondantes dans le répertoire /var/cache/texmf/fonts/pk/modeless/... pour permettre un nouveau cal- cul.

6.15 Clavier

6.15.1 Généralités (tout sauf LYX) Sous LYX, la configuration des raccourcis-clavier s’effectue à l’aide des fichiers *.bind. On a le choix entre partir d’une version Emacs, ou d’une version cua, c’est à dire Window$. Nous partons de cua. Le problème consiste à gérer les éventuels conflits entre les diverses sortes de raccourcis-clavier utilisés par kde et par LYX. On distingue : globals Ce sont les raccourcis permettant le dialogue avec le système, ou en tout cas le gestionnaire de fenêtres. Dans KdE_1, ils se positionnent à l’aide de kcmkeys, et sont stockés dans ~/.kderc. Dans KdE_2/KdE_3, on peut en obtenir une copie de sauvegarde, qui arrive dans ~/.kde2/share/apps/kcmkeys/global. standard Ce sont les raccourcis "standard", destinés à implémenter un look uniforme entre les diverses applications. ruses Il s’agit des fameuses "ruses de clavier" qui permettent à toutes ces peuplades étranges de dessiner les c-cédille-circonflexes qui les distinguent de leurs ennemis. menu Ce sont les raccourcis du menu à la Windows de l’application en cours. bind Les raccourcis programmables de LYX (enfin). Voici la liste des raccourcis utilisés : 1. globals : [Super_L] = pop-up menu, [Super_R] = windows list, [C − F 4] = close (à la Win-xx), [C − S − F x] = change de bureau, [A − F 6] = maximize vertical, [A − F 7] maximize horizontal. 2. standard : avec SuSE − 7.2, context-menu est déjà positionné et on laisse le reste.

6.15.2 Déterminer ce qui est spécifique à LYX On veut lister toutes les actions clavier réalisables depuis LYX. 1. Avec SuSE − 11.4, les actions [C − S − x] avec "x" non déclaré conduisent à des caractères décoratifs. ainsi a(/), t(astro), y(venus), u(backempty), etc. 2. Avec SuSE − 10.2, les raccourcis-systèmes sont dans ~/.kde/share/config/kdeglobals. Pour certaines versions antérieures, il était nécessaire d’enregistrer les raccourcis KdE_2/KdE_3 (kdecontrol . look_and_feel/keys) sous les noms respectifs de keys_glob et keys_apps. 3. Créer un fichier aaa-lyx.bind pour marquer les combinaisons [M−?] utilisées par les menus de LYX. Cela est langage dépendant... d’où l’intérêt de rester en globish. 4. Puis créer le fichier all_binds.binds, à l’aide du batch qyk_docs_keys (Alg. 13). 5. Le résultat donne, trié alphabétiquement, toutes les combinaisons clavier utilisées à un titre ou un autre... et donc celles qui restent disponibles.

6.15.3 Langage de programmation

1. Les commandes LYX changent tout le temps (à chaque livraison, il y a de nouvelles surprises). (a) Modifications SuSE − 42.1 (ou avant). Néanmoins utilisées dans aqua.bind C-j "dialog-show aboutlyx" instead of "help-aboutlyx" C-j "help-open LATEXConfig" instead of "help-Texinfo" C-j "specialchar-insert menu-separator" instead of "menu-separator-insert" C-r "dialog-show findreplace" & "dialog-show findreplaceadv" instead of "find-replace" C-j "dialog-show prefs" instead of "dialog-preferences" C-j "dialog-show latexlog" instead of "latex-view-log"

38 6 LYX 6.15 Clavier

Incl. 13 qyk_docs_keys kksrc=~/.kde/share/config/kdeglobals ; bi=~/.lyx/bind/ ; cd $bi glob=aaa-kde.bind ; menu=aaa-lyx.bind cat << EOF > .tmp_sect 1,/\\[Global Shortcuts\\]/ d ; /Defaults timestamp/ d ; /^\\[/,$ d EOF cat << EOF > .tmp_joli s¶=(¶=¶ ; s¶=default(¶=¶ ; s¶)$¶¶ s¶\\(.*\\)=\\(.*\\)¶\\\\bind "\\2" "global: \\1"¶ s/Shift+/S-/ ; s/Ctrl+/C-/ ; s/Alt+/M-/ ; s/"S-C-/"C-S-/ s/C-A"/C-a"/ ; ... etc EOF sed -f .tmp_sect $kksrc | grep -v "=none" | sed -f .tmp_joli | sort > $glob cat << EOF > .tmp_sed /^$/ d ; /^#/ d ; /^\\\\bind_file/ d EOF cat *.bind | sed -f .tmp_sed | sort > all_binds.binds

M-i u "flex-insert url" et non plus "url-insert" M-i i b "dialog-show-new-inset bibtex" et non plus "bibtex-insert" M-i e m "dialog-show-new-inset external" et on plus "external-insert" M-p c "dialog-show character" et non plus "layout-character" M-p f "dialog-show document" et non plus "layout-document" M-p k "dialog-show paragraph" et non plus "layout-paragraph" M-r r "dialog-show-new-inset ref" et non plus "reference-insert" (b) Modifications SuSE − 11.4 (entre autres). C-r "newline-insert newline" et non plus "break-line" M-r "break-paragraph inverse" et non plus "break-paragraph-keep-layout" M-b z "buffer-view pdf" # ’z’ for pdf : haha ! M-b M-z "buffer-update pdf" M-b S-z "buffer-export pdf2" # le 2 pour utiliser pdflatex (cf configure, converter) (c) Modifications SuSE − 11.3 (entre autres). M-c c "font-typewriter" et non plus "font-code" S-r "char-right-select" et non plus "forward-select" S-l "char-left-select" et non plus "backward-select" (d) Depuis SuSE − 8.1, les "maths-insert" sont suivis de la commande latex complète (avec le \). (e) Avec SuSE − 10.2 (LYX 1.4.2), les sous-menus passent par "dialog-show" (ainsi findreplace et spellchecker) (f) Print : "buffer-print" ne donne plus rien. Le remplacer par "dialog-show print".

 D’ailleurs, les LYXeurs n’arrivent pas à se suivre eux-mêmes : "protected-space-insert" a disparu de LYX 1.4.2, mais le fichier aqua.bind correspondant s’en sert encore.  Plus beau encore: les LYXeurs ont perdu la guerre des quotes (cf 20.11). Les différents binds, y compris cua.bind, ne savent plus produire une quote "qui quote", et non pas \begin_inset Quotes elm \end_inset En effet, la commande "self-insert \"" (valable pour SuSE − 9.3) se contente d’insérer la touche clavier... tandis que "command-sequence self-insert \"\"; char-backward ;" fait ce qu’il faut

39 6.16 Tables 6 LYX

2. On peut rester compatible en laissant coexister différentes commandes pour un même raccourci à condition qu’une seule soit valide pour chaque version de LYX. Une ligne non reconnue donne alors un message d’erreur quand on lance LYX dans un terminal. 3. Pour disposer d’une liste des commandes possibles pour une livraison donnée, le plus simple est d’archiver les provided.bind de chaque livraison. Puis de les compiler trier avec Alg. 14.

Incl. 14 tell_commands.bat #! /bin/bash cat < .tmp_sed s¶^[^"]*¶¶ ; s¶"[^"]*"¶¶ ; s¶^[ \t]*¶¶ EOF grep bind ./provided_binds-1.4.2/* | sed -f .tmp_sed | sort -u > .commands

4. Et alors un diff entre les commandes possibles et les commandes implémentées... 5. Depuis "un certain temps" (avant SuSE − 8.1), toute frappe clavier est une commande, qui doit être interprétée. Être attentif au fait que les codes-clavier utilisés dans les fichiers *.bind ne sont pas les "scan-codes" sortis directement du clavier, mais quelque chose qui ressemble à deux octets, l’un pour coder l’état des modificateurs (shift, control, meta...), et l’autre pour coder le caractère plus ou moins brut. Ainsi doit-on écrire M-m M-S-greater. L’indifférence aux majuscules se code ~S-x.  Par conséquent, ce codage dépend de la langue utilisée pour décoder le clavier. Ainsi, 3 n’existe qu’au clavier us. Au clavier fr, il n’existe que quotedbl, S-3 et KP_3, et il faut réécrire les *.bind en conséquence, car les franchouilleurs du LYX-team ne semblent pas s’être rendu compte de la chose. 6. M-x (c’est à dire command-execute) envoie sur la ligne de commande (vide) et alors [tab] fait défiler les commandes à partir du texte en cours.

 Comment avoir le choix du nom d’exportation (par exemple en latex) ?

6.16 Tables

1. Changer le format d’une table : copier le texte (on récupère des lignes séparées par des retours spéciaux), puis le coller dans la nouvelle structure (ajouter ou supprimer les retours nécessaires).

 Écrire une macro sed pour préparer la récupération d’un tableau ascii, avec tabulations, dans une table lyx ...  Table chap 17of Glossary.

6.17 ni LYX, ni TEX, mais le pilote (SuSE − 8.1)  Guerre des recto-verso sous SuSE −8.1. Quand on passe un texte LYX . ps, on obtient un fichier qui, en recto-verso, s’imprime avec une page blanche initiale. La numérotation s’en retrouve décalée. Plus précisément, on obtient les fichiers : # lyx 2 Ko fichier d’origine ps 32 Ko ok sous Winxx, merde sous unix pdf 46 Ko ok ps 234 Ko fabriqué par acrobat Contournement : insérer une page vide, avec recodage du numéro de page. Encore plus stupide : le présent document s’imprime avec trois pages blanches... (une feuille et un décalage). Cela semble dû à une mauvaise écriture du pilote d’imprimante.

6.18 LYX sous Window$ Not yet written

40 8 ALGORITHMIC 6.19 A propos de KLYX

6.19 A propos de KLYX 1.KL YX présentait (à l’époque de SuSE − 6.2) un certain nombre d’avantages par rapport à LYX, en particulier le multi-fenêtrage. Nous l’avions adopté pour cette raison. 2. Le copier/coller de l’extérieur vers KLYX semblait un peu plus efficace que vers LYX (il n’est toujours pas efficace). 3. Cela dit, la dernière version de KLYX est KLYX 0.10.0 (1997-1999), basée sur LYX-0.10-0.12. Cette version n’a pas évolué depuis, et il semble que le projet n’est plus poursuivi. D’où un retour au programme original... même si celui-ci semble plus difficile à configurer. Remarques sur KLYX 0.12.0 :  Les règles de non-indent en début de section ont été bricolées. Avec "langage=american", on a non-indent. Avec "langage=french", on a indent. Mais quand on repasse à "langage=american", on est toujours en indent.  les boulettes changent de forme entre american et french  Le paquetage algorithmic ne fonctionne pas correctement ("no counter chapter" en langage=ame- rican). De toutes façons, nous l’avons réécrit.

7 WP

installé (SuSE − 42.1) librevenge-devel librevenge-generators-0_0-0 librevenge-stream-0_0-0 libwpd-devel libwpd-devel-doc libwpd-tools libwpg-devel libwpg-devel-doc libwpg-tools

8 Algorithmic 8.1 Hal strikes again

 Lorsque l’on veut référencer avec hyperref des encadrés de type algorithm, on tombe sur l’erreur undefined control sequence, qui semble viser la commande \prettyref. Et cela même lorsque le package est correctement appelé dans le préambule. En exécutant le fichier sous latex, on voit en fait que prettyref est appelée avec \theHalgorithm comme argument, et c’est cet argument qui n’est pas défini.  Lorsque l’on définit une commande vide, la compilation se passe sans encombre et la référence s’affiche correctement. Par contre, le lien hypertexte ne s’active pas. Pour cela, il faut utiliser \def\theHalgorithm{\thealgorithm} sur le modèle : \newcommand\theHtable {\arabic{table}}  Semble être fixé pour SuSE − 42.1.

8.2 Le package floats 1. Une figure, ce n’est pas un graphique. Une figure, c’est un ensemble d’objets qui se positionne tout d’un bloc (positionne au singulier puisque c’est le bloc qui flotte "tout d’un bloc"). Parmi ces objets, il y a le cadre (tracé ou non), la légende, le contenu et la trace engendrée dans la table des matières.. 2. Dans les temps préhistoriques, il n’existait que des encadrés figure et table, avec des numérota- tions séparées et des Tables séparées. Il s’est greffé là-dessus toute une série de règles éternelles de la typographie éternelle... qui changent avec les revues concernées. Bilan : chaque style contient des mic-macs ahurissants quant à la façon de typographier les encadrés. 3. Le positionnement préférentiel des encadrés est proposé comme htbp (here, top, bottom, page), à la fois en tant qu’option globale que pour chaque encadré, ou bien être spécifié H, i.e. "here, definitely".

41 8.2 Le package floats 8 ALGORITHMIC

4. Les compteurs associés aux encadrés se gèrent comme tout autre compteur. Le nom véritable est c@name. La création par \newcounter{name}, puis \setcounter{name} et enfin, la récupération de la valeur (formatées) par \thename. 5. Au moment d’introduire une nouvelle typologie d’encadrés, le package floats a tenté de faire en sorte que figure, table, algorithm et autres fonctionnent de la même façon. Le package floats définit trois styles d’encadrés, qui sont plain, ruled et boxed et prévoit de définir la typographie d’un encadré par un couple de commandes à la façon de : \floatstyle{ruled} \restylefloat{figure} .... On a donc:

Incl. 15 algo Fig. 6 fig Tab. 3 table

encadrés "ruled" *refs=Alg. 15, Fig. 6, Tab. 3*

6. En mode plain, cela donne:

Incl. 16: algo Fig. 7: fig Tab. 4: table encadrés "plain" *refs=Alg. 16, Fig. 7, Tab. 4*

7. Et en mode boxed, cela donne:

Incl. 17: algo Fig. 8: fig Tab. 5: table encadrés "boxed" *refs=Alg. 17, Fig. 8, Tab. 5* 8. L’inertie, et le fait que seulement trois styles non configurables soient fournis a fait que les "grandes revues" n’ont pas changé leur façon de faire et ne se sont pas décidées à définir figure et table en tant que floats particuliers. Au contraire, les "autres floats" sont le plus souvent ignorés. 9. Nous avons décidé de recoder systématiquement les noms utilisés pour fabriquer les légendes et les références de façon à ce qu’ils se terminent par un caractère significatif.

\def\figurename{{\scshape Fig.}} \def\tablename{{\scshape Tab.}} \def\fname@algorithm{{\scshape Incl.}} 10. Pour la non-langue american, le CaptionSeparator est ":". Celui-ci est codé en dur dans la définition des compteurs plain et boxed. Et les règles éternelles de la typographie éternelle font que le CaptionSeparator des encadrés roulés est... vide (Alg. 15, Fig. 6, Tab. 3). Pour la langue frenchb, la commande \CaptionSeparator est positionnée par babel sur " – " et sert à redéfinir les compteurs figure et table... et aucun autre. 11. Si l’on veut imposer cela malgré des changements de langue, il faut d’une part gérer les passages american . french. On invalide les lignes 581, 582 de /usr/share/texmf/tex/generic/babel/

42 8 ALGORITHMIC 8.3 Tentative de réécriture de floats.sty

Incl. 18 Tirets français et tirets anglais. \@ifundefined{CaptionSeparator} {CaptionSeparator n’est pas défini} {CaptionSeparator est défini et vaut zzz{\CaptionSeparator}zzz } Ensure: CaptionSeparator est defini et vaut zzz – zzz

frenchb.ldf. Puis gérer le passage inverse. Pas encore trouvé. On a donc une routine \babelsucks à appeler en cas de besoin. Passant en "americain", les légendes changent:

Incl. 19: algo Fig. 9: fig Tab. 6: table encadrés "boxed" *refs=Alg. 19, Fig. 9, Tab. 6* 12. Mais ne reviennent pas au retour en langue "français"

Incl. 20: algo Figure 10: fig Table 7: table encadrés "boxed" *refs=Alg. 20, Figure 10, Table 7* 13. En résupmé, on ajoute des babelsucks partout où cela semble utile.

8.3 Tentative de réécriture de floats.sty Cela ne sert à rien, car il faudrait une coopération babel/floats/revues... 1. Gestion des espaces. Il faut un espace insécable entre le nom de l’encadré \figurename (par exemple) et le compteur \thefigure. C’est utile pour une référence en plein texte comme Fi- gure 18. Et il faut un espace entre le compteur et le séparateur. Et pas plus. Mon choix est de faire porter ces espaces insécables par les objets. Il y a donc un ~ au bon endroit. Ne pas confondre les espaces indispensables pour séparer les blocs non initialisés, et un espace "non syntaxique" qui s’imprimera. Donc xxx Alg. 1 – xxx : avec une définition efficace, on met des espaces partout... et cela se démerde. 2. Gestion des fontes. Pour le nom de l’encadré et sa légende, il faut tenir compte des "habitudes de syntaxe". Et donc il faut deux couches d’accolades. rappel des fontes latex : rmfamily, sffamily, ttfamily normalfont (??), bfseries, mdseries : syntaxe { \bfseries } itshape, slshape, scshape, upshape : syntaxe \itshape{ } Le listing pour le cas ruled donne ce qui suit, et les autres se traitent de la même façon. 3. On peut alors utiliser tout cela dans la définition d’un encadré flottant :

8.4 L’environnement algorithm 1. Le package latex "algorithm" est prévu pour encapsuler un texte "algorithmic" dans un environ- nement flottant. LYX permet (maintenant) une utilisation automatique de ce package. 2. Documentation : consulter les fichiers

43 8.5 Environnement algorithmic 8 ALGORITHMIC

Incl. 21 floatc@ruled et fs@ruled \newcommand\floatc@ruled[2]{ {\@fs@cfont \scshape{#1}} #2\par } ????

\newcommand\fs@ruled{ \def\@fs@cfont{\scshape} \let\@fs@capt\floatc@ruled \def\@fs@pre{\hrule height.8pt depth0pt \kern2pt} \def\@fs@post{\kern2pt\hrule\relax} \def\@fs@mid{\kern2pt\hrule\kern2pt} \let\@fs@iftopcapt\iftrue }

Incl. 22 newfloat \newcommand\newfloat[3]{ \@namedef{ext@#1}{#3} \floatplacement{#1}{#2} \@ifundefined{fname@#1}{\floatname{#1}{#1}} {} \expandafter\edef\csname ftype@#1\endcsname{\value{float@type}} \addtocounter{float@type}{\value{float@type}} \restylefloat{#1} \expandafter\edef\csname fnum@#1\endcsname { \expandafter\noexpand\csname fname@#1\endcsname{} \expandafter\noexpand\csname the#1\endcsname \captionseparator } \@ifnextchar[{\@xnewfloat{#1}} {\@ifundefined{c@#1} {\newcounter{#1}\@namedef{the#1} {\arabic{#1}} }{} } }

/usr/share/texmf/tex/latex/algorith/algorithm.sty /usr/share/texmf/tex/latex/algorith/algorithmic.sty /usr/share/texmf/doc/latex/styles/algorithms.dvi 3. Pour utiliser ces packages, placer une invocation dans le préambule Latex. Il faut aussi définir le nom des algorithmes... si l’on ne veut pas voir Algorithm. On a donc :

\usepackage{algorithm} \floatname{algorithm}{Alg.} \usepackage{algorithmic}

 comment avoir une gestion des marges non stupide (= pas de décroché pour les paragraphes ?). Demi-solution : paragraphes standard (et non pas code) et alors caractère typewriter (cf Alg. 23).

Incl. 23 Un exemple d’encadré "algorithme". 01 = Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. 02 = Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. Paragraphe ordinaire, fonte Times. 03 = Paragraphe ordinaire, fonte typewriter. Paragraphe ordinaire, fonte typewriter. Paragraphe ordinaire, fonte typewriter. Paragraphe ordinaire, fonte typewriter.

04 = Paragraphe LYX-Code 01. Paragraphe code. Paragraphe code. Paragraphe code. Pa 05 = Paragraphe LYX-Code 02. Paragraphe code. Paragraphe code. Paragraphe code.

8.5 Environnement algorithmic 1. On reprend le tout à l’aide d’un batch cd /usr/share/texmf/tex/latex/algorithm

44 9 SLIDES

sed -f sed_algo algorithmic.suse.sty > algorithmic.sty kwrite algorithmic.sty 2. L’objectif est d’utiliser des noms raisonnables, d’ajouter quelques commentaires, et surtout d’ajou- ter de nouvelles commandes. (a) Commandes "courtes", c’est à dire tenant sur une seule ligne. Ainsi \IFS { cond }{ action } \ENDIFS (b) Commandes de service : \DEF{ procedure } \LOCAL { variables locales }

Incl. 24 Version active. essai_toto := proc (a, b) 1: local pil, a, b, r, q, u, v, w Require: la présence du paquetage stack , chargé de gérer la pile 2: a := α ; b := β ; pil := new_stack () 3: while b =6 0 do 4: q := iquo(a, b) ; r := a − q ∗ b ; a := b ; b := a ; push(q, pil) 5: end while 6: if not_empty (pil) then action1 7: else return α 8: end if 9: q := pop (pil) ; w := u − q ∗ v ; u := v ; v := w 10: return u, v Ensure: the returned u, v are the Bezout’s coefficients for α, β

Incl. 25 Les sources du précédent. \begin{algorithmic}[1] \DEF{ essai_toto } {\mu, b, p } ; \LOCAL{ pil, a, b, r, q, u, v, w } \REQUIRE{ la présence du paquetage stack, chargé de gérer la pile } \STATE a := α ; b := β ; pil := new_stack () \WHILE{ b =6 0 } \STATE q := iquo(a, b) ; r := a − q ∗ b ; a := b ; b := a ; push(q, pil) \ENDWHILE \IFS{ not_empty (pil) }{ action1 } \ELSES{ \RETURN α} \ENDIFS \STATE q := pop (pil) ; w := u − q ∗ v ; u := v ; v := w \STATE \RETURN u, v \ENSURE{ the returned u, v are the Bezout’s coefficients for α, β } \end{algorithmic}

9 Slides 9.1 Provided by EA Gonzalez-Solares 1. Selon http://astronomy.sussex.ac.uk/~eddie/soft/tutorial.html, les prérequis sont :

LATEX (of course) seminar make sure you have the latest version and all the three "bugs corrections" semi- nar.bug, seminar.bg2 and seminar.bg3. thumbpdf will be used to generate thumbnails which will show in the initial window in Acrobat. PSTricks will be used to draw postscript in the document. Very useful to make cool backgrounds in the slides. hyperref will allow us to include in the document links to external documents, to web pages, or to other pages in the same document.

2. Le package seminar.bg3 n’est pas installé d’origine. On le trouve à http://homepage.mac.com/ farwer/iblog/latex/C569992058/E1780862256/Media/seminar.bg3

45 9.2 Provided with Lyx : seminar.layout 9 SLIDES

3. Le texte indiqué ne se compile pas. En effet, il faut demander l’option \usepackage[usenames]{pstcol} pour que le package graphics/color.sty reçoive l’option usenames qui permet d’utiliser des couleurs nommées comme commandes postscript. Si l’on veut charger color directement, il y a un conflit d’options. On peut visualiser le processus en ajoutant le code ci-dessous dans le fichier color.sty. \typeout{color:} \@ifundefined{\string\color@Apricot} {\typeout{not defined: Apricot}} {\typeout{defined: Apricot}} \typeout{color:} 4. Redéfinir quelques tailles (circa ligne 60) \setlength{\slidewidth}{240mm} \setlength{\slideheight}{173mm} 5. Le formatage doit faire partie des commandes. Exemple : c’est la définition de la commande \BigTitle qui contient le descripteur \LARGE et pas l’appel à cette commande. 6. Toute une série de commandes ne sont pas définies. Why ?

9.2 Provided with Lyx : seminar.layout to be rewritten

9.3 Seminar revisited (SuSE − 42.1) 1. Manque de docs depuis le passé. On constate que ~/docs/Cherche/Simulations/yanb/sa_submitted_mesm/slides/slides10.ps s’affiche en noir et blanc, deux slides par page. Tandis que ~/docs/Cherche/Simulations/yanb/sa_submitted_mesm/slides/slides10.pdf s’affiche en couleur (un slide par page) dans ocular... mais manque certaines lettres dans evince. On essaie de recompiler. 2. On constate que les couleurs posent problème. En dvi: carrés gris. En pdf: error. 3. La commande grep definecolor $(kpsewhich svgcolor.sty) | sed -e "s/}{.*//; s/.*{//" | tr "\n" " " donne des noms de couleur sans majuscules. On ajoute \usepackage{svgcolor} et on change les noms des couleurs (et Abricot . bisque) 4. On corrige les noms des images (ce n’était pas des noms relatifs). Les images n’ont plus leurs tailles (les reprendre dans le fichier *.lyx précédent). Alors le *.dvi compile, les slides ont la bonne taille, les couleurs écrasent titres et sous-titres, les images (eps) sont désastreuses, mais les bounding-boxes sont correctes (les faire apparaître dans xdvi-viewer)... et la boundingbox globale (*.dvi) reste en mode Portrait. Déclarer option a4 (toute autre description du papier est laissée par défaut). 5. Protéger listofslides par \ifarticle \cleardoublepage ... \fi. Rappel: "article" est une option globale, permettant d’imprimer les slides deux par page (en vertical), et en noir et blanc. 6. Problème pour la page de titre (les éléments d’un slide doivent être indentés). Contournement: \pagestyle{empty} \begin{slide} .... \end{slide} \pagestyle{fancy}

46 10 GESTION DES FICHIERS PDF 9.4 FAQs

7. Il faut charger le package ps-tools (cf /home/distrib), car il est requis par dvips et n’est plus là par défaut (SuSE − 42.1). 8. Finalement, dvips -t landscape $qui.dvi ; ps2pdf $qui.ps donne le fichier voulu.

9.3.1 A recaser 1. Utiliser epstopdf pour donner toto.eps . toto-eps-converted-to.pdf (verbatim) lors d’une inclusion *.tex contenant des images eps.

9.4 FAQs 1. Une faq: https://tug.org/applications/Seminar/Seminar-FAQ.html.

10 Gestion des fichiers pdf

Problème de base : les logiciels Adobe ne sont pas Open Source. Pire encore, ils sont plus ou moins prévus pour servir d’appui à des politiques de contrôle de contenu (et pourquoi pas, de pay per view).

10.1 La commande de base: pdfjam 1. Permet d’extraire des pages (pour tesseract, par exemple) 2. Permet d’assembler des pages depuis plusieurs fichiers (cf thèse). 3. Exemple 2 pages par face

pdfjam fichier.pdf 47-68 -o franc.pdf --twoside --a4paper --landscape --nup 2x1 imprimer depuis evince!\!! avec landscape, short_edge 4. uuuu

10.2 Impression booklet Pour une brochure pdf de 30 pages: 1. pdfbook –short-edge le_fichier.pdf –signature 32 2. acrobat, imprimer recto-verso, short-edge

10.3 gs Le programme réputé permettre d’agir sur les fichiers ps et pdf est gs. La commande gs -h renvoie un tas de choses, et à la fin, elle donne l’adresse du fichier d’aide /usr/share/ghostscript/8.62/doc/Use.htm. Dans ce fichier on trouve un tas de choses, qui donnent envie d’utiliser les commandes : gs -dFirstPage=2 -dLastPage=6 -o tutu.pdf -sDevice=pdfwrite toto.pdf gs -dFirstPage=2 -dLastPage=6 -sOutputFile=tutu.pdf -sDevice=pdfwrite -c quit -f toto.pdf On voit des images, mais rien ne s’écrit.

10.4 pdftk Syntaxe étonnante, mais le fichier man donne beaucoup d’exemples. 1. La commande pdftk toto.pdf cat 2-6 output tutu.pdf permet effectivement de sélectionner des pages 2. La commande pdftk toto.pdf burst output page_%03d.pdf permet de découper un pdf en ses pages constituantes... et après on doit se fatiguer un peu plus pour convertir en ps...

47 10.5 psnup 10 GESTION DES FICHIERS PDF

for ((i=10;i<100;i++)); do pdftops page_0$i.pdf ; done 3. La commande pdftk page_00[13456789].pdf output pages_001_009.pdf permet de réassembler tout cela (après modifications...)

10.5 psnup En combinant, pdftk input.pdf cat 2-139 output boute.pdf pdftops boute.pdf boute.ps psnup -b-3.6cm -nup 2 boute.ps output.ps

10.6 Un exemple 1. Lister les pages contenant une image pdfimages -list file.pdf | sed -e "s/^[ ]*//; s/ .*//" | tr "\n" " " > numpages.txt 2. Couper un fichier en pages individuelles (792x612) pdftk file.pdf burst output page_%03d.pdf 3. Action nulle sur chaque page (standardisation) pdfjam page_$num.pdf -o q$num.pdf –trim ’0cm 0cm 0cm 0cm’ –clip 4. Action sur les pages contenant une image pdfjam page_$num.pdf -o q$num.pdf –offset ’0cm -1.5cm’ –trim ’0cm 0cm 0cm 4cm’ –clip

5. Et puis booklet pdfjam q* -o all.pdf pdfbook –short-edge all.pdf –signature 32

10.7 scribus 1. Problèmes variés lorsque l’on travaille sur des pages multiples. Surtout quand on cherche ce qu’il faut faire... 2. Déclarer le répertoire de travail dans les préférences (général) 3. Raccourcis à déclarer : [F 9] sauvegarder pdf ; [Crtl − 2] zoom à 200% ; [Ctrl − 3] propriétés de page. 4. Placer des filets. On peut ensuite les déplacer à la souris ou bien avec les flèches (mouvement moyennement rapide), ou [Shift − arrow] (mouvement lent) ou [Ctrl − arrow] (mouvement ra- pide). 5. La méthode la plus ergonomique trouvée est un batch for i in 2 7 9 ; do scribus page${i}.ps ; done il suffit alors d’esquiver les sauvegardes en "fichier natif" pour sauvegarder en mode pdf.  La taille du texte dans la page A4 est légèrement modifiée au fur et à mesure que l’on passe d’une page à l’autre dans un document multipage.

10.8 tesseract 1. Le package tesseract-2.04-1.1 (x86_64) se charge à partir de Main Repository (Contrib). Charger aussi les packages des langues. 2. Les descriptions sont obs://build..org/openSUSE:11.3 http://code.google.com/p/tesseract-ocr/ Ray Smith 3. Le package tiff est nécessaire pour fabriquer les sources  Les commandes changent tout le temps. Actuellement (SuSE − 11.3), ppm2tiff.

48 11 POSTSCRIPT

11 PostScript 11.1 Images encapsulées 1. La gestion des images encapsulées (fichiers *.eps) est la suivante : la visionneuse lyx, ainsi que ghostscript appelé sur l’image coupent l’image selon la bounding box. Tandis que le résultat (en dvi ou en ps) est obtenu en plaçant la bounding box dans le cadre prévu, tout en laissant le reste de l’image déborder 2. Modification assistée par ordinateur de la "bounding box" par essais et erreurs (visionneuse = gv). Le principe en est donné dans le Alg. 26.

Incl. 26 bin/qbb_bounding_box #! /bin/bash qui=$1 ; if ! test -f $qui ; then qui=$1.eps ; fi ; shift echo " proceeding" $qui zozo=‘grep Bounding $qui | tail -n 1 | tr -d \\\r ‘ zozu=‘echo $zozo‘ z1=‘echo "$zozo " | sed -e ’s/\ .*//’‘ zozo=‘echo "$zozo" | sed -e ’s/[^\ ]*\ //’‘ zg=‘echo "$zozo" | sed -e ’s/\ .*//’‘ zozo=‘echo "$zozo" | sed -e ’s/[^\ ]*\ //’‘ zb=‘echo "$zozo" | sed -e ’s/\ .*//’‘ zozo=‘echo "$zozo" | sed -e ’s/[^\ ]*\ //’‘ zd=‘echo "$zozo" | sed -e ’s/\ .*//’‘ zozo=‘echo "$zozo" | sed -e ’s/[^\ ]*\ //’‘ zt=‘echo "$zozo" | sed -e ’s/\ .*//’‘ while test -n "$1" ; do case $1 in -y) zg=$2 ; zt=$3 ; zd=$4 ; zb=$5 ; shift ; shift ; shift ;; +g) zg=‘echo $((zg-$2))‘ ;; -g) zg=‘echo $((zg+$2))‘ ;; +b) zb=‘echo $((zb-$2))‘ ;; -b) zb=‘echo $((zb+$2))‘ ;; +d) zd=‘echo $((zd+$2))‘ ;; -d) zd=‘echo $((zd-$2))‘ ;; +t) zt=‘echo $((zt+$2))‘ ;; -t) zt=‘echo $((zt-$2))‘ ;; -x) xxx=commit ;; *) echo erreur ;; esac shift ; shift done zozo=‘echo "%%BoundingBox:" $zg $zb $zd $zt‘ echo was$zozu\xx ; echo now xx$zozo\xx sed -e "‘echo s/$zozu/$zozo/ ‘; //d " $qui > tmp.eps if test -n "$xxx" ; then cp tmp.eps $qui ; else gv tmp.eps ;fi

 comment obtenir le calcul automatique de la bounding box (comme cela se fait sous winxx) ?  comment intégrer les manipulations postscript dans la visionneuse postscript ?

11.2 Visualiser 1. Les fichiers écrits en *.ps sont des programmes. Ils ne sont pas destinés à être lus par des êtres humains. Mais parfois, il est utile de comprendre et de trouver la modification qui va bien. 2. Un fichier écrit à travers dvips contient

(a) des fichiers ProcSet *.pro, constituant le dictionnaire TEXDict /usr/share/texmf/dvips. (b) des fichiers Font ...

49 11.3 Pages man 11 POSTSCRIPT

(c) et enfin quelques lignes spécifiques au fichier source

3. Pour y comprendre quelque chose, il faut commencer par tout recouper à une ligne par instruction, c’est à dire insérer un saut de ligne après chaque def ainsi qu’à chaque N\ ou B\ (qui sont des alias pour def). Le batch mk_joli_eps fait cela.

11.3 Pages man

1. Il est toujours utile d’obtenir une version imprimée maniable des pages man. Pour nous, cela veut dire impression recto-verso, deux pages par face, retournement italien (fonte 7). 2. En fait, les anciennes pages man étaient stockées sous forme d’un texte déjà mis en page (à la façon des rfc). Dans ce cas, il est raisonnable d’adapter la mise en impression pour retrouver la mise en page prévue (fonte 8). 3. La syntaxe utilisée est celle de la commande man, soit : man 5 toto pour obtenir la page man de toto(5). La plupart du temps, le numéro est inutile. Le choix entre fonte 7 et fonte 8 se fait par le nom sous lequel le batch est appelé (27).

Incl. 27 Le script pman dir=/home/douillet/docs/man/ ; mkdir -p $dir ; cd $dir vers=man_$1$2.ps ; man $1 $2 > .tmp_man test ‘basename $0‘ == pman7 && spec=7 || spec=8 enscript -M A4 -2rB -i8 -l -fCourier@$spec/7 -o $vers .tmp_man rm .tmp* ; chmod a+w $vers ; gv -landscape $vers

4. En cas de ratage à l’impression, on peut repartir du fichier ~/docs/man/man_xxx.ps. Ce fichier PostScript doit être visualisé en "landscape", et imprimé tête à gauche. Prendre garde au fait que les pages man changent de façon peu prévisible (nouveaux packages ?) : il convient donc de faire les reprises rapidement. 5. En pratique, il faut tenir compte d’un comportement variable des divers ordinateurs. Sur certains il faut –rotate-even-pages et sur d’autres non. De même (pour la seule SuSE − 8.1), il faut remplacer "Orientation: Landscape" par "Portrait" dans le fichier *.ps. Avec les mises à jour par copie mutuelle, il faut utiliser $HOSTNAME pour faire les choix.

11.4 Mise en page compacte de fichiers texte

1. Dans le même genre d’idées, il est utile d’avoir une impression compacte des fichiers de com- mande... en deux colonnes la plupart du temps, et en une seule colonne lorsque les lignes sont vraiment trop longues. 2. Le batch rv_edit automatise cela en stockant le résultat au lieu de l’envoyer directement à l’imprimante. Selon l’existence ou non d’un message d’erreur, il y a impression ou remise en page puis impression (28).

Incl. 28 Le script rv_edit mkdir -p ~/tmp ; cd ~/tmp enscript -M A4 -2rG $1 -o tmp.ps 2> error if test "‘grep wrapped error‘" ; then enscript -M A4 -rG --margins=20:20:20:20 -fCourier@8/8 $1 else lpr tmp.ps fi

50 11 POSTSCRIPT 11.5 enscript

11.5 enscript

1. Le programme enscript permet la réalisation d’un fichier postscript exprimant la mise en page d’un fichier texte seul (*.txt). La version fournie avec SuSE − 10.2 est la 1.6.4. 2. Avec (spécifiquement) la SuSE − 8.1, divers problèmes sont apparus. Ces problèmes étaient en fait dus au pilote d’imprimante fourni avec la distribution (mauvaise gestion de "Orientation: Landscape" et visualisation dans gv). 3. Pour une imprimante avec recto-verso décrit comme "bords longs" sur l’imprimante et décrite comme recto seul sur l’ordinateur, il faut utiliser –rotate-even-pages. Pour une imprimante recto- verso décrite comme recto-verso, cela n’est pas utile.

11.6 Recto-verso sur imprimante recto 11.6.1 Principe de la manoeuvre

1. L’impression en recto-verso sur une imprimante recto seul est en principe très simple : on imprime d’abord les pages paires puis on retourne et on imprime les pages impaires. En réalité, cela plante très souvent. 2. Le premier problème est celui du papier. Une impression laser se fait par calandrage et donc la main du papier change après la première impression. Quand on utilise une imprimante recto- verso, le papier n’a pas trop le temps d’évoluer, et de plus il reste plus ou moins margé. Lors d’une impression en deux fois, le papier a le temps d’évoluer. 3. Pour cette raison, il faut donc utiliser le bac de réserve comme source de papier lors du premier passage et le passage direct ("manual feeder") lors du deuxième passage. La manoeuvre consistant à replacer le papier dans le bac échoue presque toujours. D’une part les feuilles collent vers la fin. D’autre part le bon placement du papier dépend de l’imprimante ; ici : imprimé dessus, avant vers l’opérateur. 4. Les scripts ci-dessous ont été écrits pour la SuSE − 7.0 et l’imprimante PostScript recto HP5M. Ils n’ont pas été utilisés depuis. 5. Ces scripts supposent que le texte à imprimer est en postscript paginé. Pour un fichier texte, utiliser l’option "printspec" dans kedit, qui commence par envoyer le document sur "enscript". 6. Deux méthodes d’appel : soit en ouvrant un terminal dans le répertoire du fichier, soit en utilisant les deux boutons d’appels placés sur la barre des tâches. Dans le premier cas, le fichier est désigné par son nom, dans le second, il s’agit du fichier *.ps le plus récent parmi les fichiers de certains répertoires temporaires. Dans les deux cas, ce fichier subit les actions suivantes :

(a) Éventuelle réécriture (fixps) vers ~/docs/ps/tout.ps, puis découpe (pstops) en ~/docs/ps/even.ps et ~/docs/ps/odds.ps. (b) Envoi à l’imprimante des pages verso (en ordre inverse), le papier venant du bac de réserve. (c) rv2 : Envoi à l’imprimante des pages recto (en ordre direct), le papier venant du feuille à feuille. Ne pas mettre trop de feuilles à la fois. Si l’on charge en plusieurs fois, il faut entrouvrir le bac direct pour que l’impression s’arrête là au lieu de se poursuivre sur les feuilles blanches. (d) rv3 : Reprise sur erreur de la phase 1 (sans tout recalculer).

7. La commande fixps lance une réécriture du fichier. Cette phase est cruciale, car tout repose sur la fiabilité des commandes de pagination. Certaines fois cette réécriture est nocive : faire des essais ! 8. La commande pstops permet de réorganiser les pages d’un document postscript paginé : permet une impression "deux pages en une", y compris en divisant en deux lots pour faire du recto-verso. On peut aussi imprimer des cahiers. 9. Au passage, configurer Netscape (netscape nous broute) pour la vision directe des *.ps et *.ps.gz. Manoeuvre ahurissante : à la rubrique préférences . navigateur . applications . postscript, placer l’incantation

kghostview %u -caption "%c" %i %m

La décompression est alors le fait du viewer.

51 12 KSEG

11.6.2 Détails des scripts On aboutit à Alg. 29, qui conduit à des résultats différents selon le nom de l’appel : 0 provoque une division du fichier post-script en deux passages, puis imprime directement les pages paires (qui sortiront à partir de la fin). 1 commence par une réécriture complète du fichier, avant division 9 provoque la division, sans réécriture, ni envoi à l’imprimante 2 envoie les pages impaires (les placer dans le bac feuille à feuille). Un bouton sur la barre des tâches évite d’ouvrir une fenêtre de commande. 3 en cas de ratage de l’impression paire, on peut ré-envoyer les pages correspondantes. -# option valable pour 0, 1, 9 : détermine le nombre de copies (ce nombre est décrit dans le fichier .ps : il n’y a donc qu’un seul envoi vers l’imprimante) Diverses manoeuvres sont entreprises. 1. La reconnaissance automatique du "plus récent" met en concurrence kghostview et klyx. Il faut donc qu’il existe au moins un répertoire klyx, même si une purge de ces répertoires vient d’avoir lieu (ou s’ils n’ont jamais existé...) : créer un fichier /tmp/lyxqq/lyxqq/lyx.ps_pastouche 2. En cas de besoin, le fichier tout.ps est décompressé. 3. Si la taille du fichier ne nécessite qu’une seule page (cas fréquent avec des fichiers issus de kedit/enscript), ce fait est détecté et le recto est directement envoyé à l’impression. 4. Les fichiers temporaires utilisés par ce batch doivent être surchargeables par tout le monde : leur donner cet attribut (ou bien les détruire à la volée).

12 kseg 12.1 Installation kseg http://www.mit.edu/~ibaran/kseg.html is a Free (GPL) interactive geometry pro- gram for exploring Euclidean geometry. It runs on Unix-based platforms (according to users, it also compiles and runs on Mac OS X and should run on anything that Qt sup- ports). By popular demand, despite my dislike for microsoft, I’ve ported KSEG to windows using the old Qt noncommercial version 2.3 (I hope I’m not violating anything). The source is uglier and there are some bugs not in the Linux version. Download the whole thing at http://www.mit.edu/~ibaran/kseg-0.401.zip (it should run out of the box). 1. Start by downloading all the following stuff : (a) The window$ stuff, at /opt/kseg. (b) The Linux sources, at /home/distrib/extra/kseg-0-403 from http://www.mit.edu/~ibaran/kseg-0.403.tar.gz. (c) All the *.rpm you can find (from SuSE − 10.3, SuSE − 11.3, SuSE − 11.1). They have to be in different directories in order to be seen in YaST2. 2. v0.403 create /usr/share/kseg and use it to store locale and pics. Create it if it don’t exists. Copy the examples from /usr/share/doc/packages/kseg/. 3. Icon is /usr/share/pixmaps/kseg.xpm 4. Create the pif files 5. You can draw, save and reopen. An user preference file is created at ~/.kseg. 6. The About message for 0.403.206 is v0.403 1999-2006 and ls is 1028416, the About message for the SuSE − 10.3 is v0.4 1999-203 and ls is 969032.  Used with SuSE−11.3 on a x86_64 computer, all three rpm (and also the i586 one) are producing the same bug. Copy a construction (e.g. circumcircle) from /usr/share/doc/packages/kseg/ examples to your private space. This construction requires three inputs and remains grayed in the play list until the required parameter are selected. Then open circumcircle.sec, and save it with another name (say toto.sec). Then file toto.sec is buggy. You can play toto as required as long as it remains in memory. If you close it, the file becomes the eventual source and is now greyed when 3 points are provided. But this macro is active with no parameters... and clashes everything. Trying to reopen toto.sec from the disk crashes either.

52 12 KSEG 12.1 Installation

Incl. 29 Impression recto-verso ici=/home/douillet/docs/ps case $1 in -"#") num=$2; shift; shift ;; *) esac if test $1 ; then qui=‘echo $1‘ ; else cd /tmp qui1=‘ls lyx*/lyx*/*.ps* -lart|sed -n -f /home/douillet/bin/sed_lyx_ps ‘ qui2=‘ls kghost* -lart|sed -n -f /home/douillet/bin/sed_lyx_ps ‘ if test $qui1 -ot $qui2 ; then qui=$qui2 ; else qui=$qui1 ; fi fi echo "*** "$qui" *** num= "$num ; cp $qui $ici/tout.ps ident=‘head -c 10 $ici/tout.ps‘ if test $ident != "%!PS-Adobe" ; then echo "bad ident - try to unzip " ; mv $ici/tout.ps $ici/tout.ps.gz gunzip -c $ici/tout.ps.gz > $ici/tout.ps fi if test $0 = "/home/douillet/bin/rv1_phase1" ; then mv $ici/tout.ps $ici/tout0.ps ; fixps -f -o $ici/tout.ps $ici/tout0.ps fi pstops 2:-1 $ici/tout.ps $ici/even.ps 2> $ici/toto pstops 2:0 $ici/tout.ps $ici/odds.ps if test $num ; then cat << EOF > /tmp/tmpadd

/#copies $num def

EOF cat << EOF > /tmp/tmpsed

/\%\%EndProlog/ r /tmp/tmpadd /\%\%EndProcSet/ r /tmp/tmpadd

EOF mv $ici/even.ps $ici/toto4.ps ; sed -f /tmp/tmpsed $ici/toto4.ps > $ici/even.ps mv $ici/odds.ps $ici/toto4.ps ; sed -f /tmp/tmpsed $ici/toto4.ps > $ici/odds.ps chmod a+w /tmp/tmpadd ; chmod a+w /tmp/tmpsed fi if ! test $0 = "/home/douillet/bin/rv9_copy" ; then cat $ici/toto ; grep "\[2\]" $ici/toto > $ici/toto2 if test ! -s $ici/toto2 ; then # pas de page 4 pstops 1:0 $ici/tout.ps $ici/qqtmp.ps 2> $ici/toto echo "****--" ‘cat $ici/toto‘ grep "\[2\]" $ici/toto > $ici/toto3 if test ! -s $ici/toto3 then lpr -P$PRINTER $ici/odds.ps ; else lpr -P$PRINTER $ici/even.ps fi else lpr -P$PRINTER $ici/even.ps # page 4 presente fi fi

53 12.2 wine-kseg 13 PHORUM

Incl. 30 kseg : intégration dans kde : mimetype, applnk. [Desktop Entry] [Desktop Entry] Categories=Math Encoding=UTF-8 Encoding=UTF-8 Type=MimeType Exec=kseg MimeType=application/kseg Icon=kseg Patterns=*.seg MimeType=application/kseg Comment=.seg Name=KSeg Icon=kseg Terminal=false Type=Application mimetype applnk

 When loading the frenchouilling-file, one gets the message : "Vous devez red♣arrer KSEG afin que le changement de langue face effet". In fact, ♣ is the black-diamond with question mark, showing some encoding problem. On the other hand, face is farce : if you are that sure that everything should be franchouilled, do it the right way... or better keep sleeping.  When trying to compile from sources, /usr/lib/qt3/bin/qmake works OK, but make results in an ugly list of errors (=aka resigns).

12.2 wine-kseg

1. Create, somewhere in the path an executable file kseg-win (e.g. /usr/bin/kseg-win), containing wine /opt/kseg/KSEG.exe $* 2. The About message is v0.401 1999-2004. 3. You can open and save constructions without trouble. 4. The idea of using kseg that way comes from http://archive.ncsa.uiuc.edu/Classes/MATH198/ whubbard/303/project2/KSEG_handout.html

13 Phorum

13.1 Description sources $ipse/Dwnload/Maths/=Phorum sous répertoires 1-I (de 1 à 18) cibles $ipse/docs/Forums/Phorum sous-répertoires : noms de fantaisie. Quelques regroupements thématiques, avec un underscore. mkf-il.sh (dans le path). Charge les fichiers depuis le site web. Arguments:

create cnum= arg2 . S’il y a une virgule, ce qui est après (endnum) sert à indiquer un autre forum (=xx) et viendra à la fin, et on coupe s’il n’y a que des chiffres on interprète les deux premiers par une lettre indic=coller les arguments 3...*, en remplaçant les espaces par des underscores puis creer le répertoire sources/L/Lxxxxx-name force à exécuter dans le répertoire à renouveller (crée $indic) indic utilisé pour chercher un fichier $indic* ou bien un fichier *$indic puis poser un tag pour forcer la date ensuite traite les répertoires récents. cut-pho.sh (dans le path). Traite les fichiers. Arguments:

readxx.html le fichier à traiter -f forcer ce qui est coupé

54 15 SCILAB

14 Geogebra

14.1 Install from tar.bz2 (SuSE − 42.1) 1. Charger GeoGebra-Linux-Portable-5-0-309-0.tar.bz2 from https://www.geogebra.org/download. 2. Décompacter cette archive /opt/geogebra 3. Lier /opt/geogebra/geogebra-portable to /usr/bin/geogebra-launch 4. Copier les fichiers d’intégration depuis la version précédente filepif geogebra.desktop icon geogebra (24x24: used in apps) mime application/vnd.geogebra.file 5. Et les fichiers *.ggb sont reconnus comme archives...

14.2 Install from rpm (SuSE − 13.1) Version 5-0-24, geogebra 5.0.24.0-3D, Java: 1.7.0_45, Codebase: /usr/share/geogebra/geogebra.jar 1. Un fichier de configuration est /etc/geogebra/geogebra.conf 2. Un fichier de lancement est /usr/bin/geogebra 3. Sont fournis : filepif (=geogebra.desktop), icon (=geogebra), mime (=application/vnd.geogebra.file). 4. Mais seul suroot voit le mime-type...

14.3 Install from sources SuSE − 11.4, Version 4-4-23 1. Download the *.tar file from http://www.geogebra.org/cms/en/installers. Expand it where you want to install it, here /opt/geogebra. 2. Rewrite the *.sh file by adding $1 at the end of line : jre/bin/java -jar geogebra.jar $1 3. Create an executable batch, somewhere in the path, named geogebra, containing /opt/geogebra/jre/bin/java -jar /opt/geogebra/geogebra.jar $1 4. At this step, you should be able to open a *.ggb file from the prompt of a console. This *must* work before trying an integration into kde. 5. Find an icon, somewhere in the jar files. Its name is geogebra32.gif. Convert it into *.png. Put that icon in /usr/share/pixmaps/. 6. Create the pif files (cf the kseg ones) use %U to transmit the file’s name. 7. Clic. At least once, this worked. 8. Export files into *.pdf then use pdfcrop, to cut to the bounding box.

15 Scilab

15.1 Installation 5.5.2 (SuSE − 42.1) On installe à partir du *.rpm fourni.

15.2 Installation 5.5.1 (SuSE − 13.1) 1. Pas de rpm dans OpenSuse. 2. On essaie de compiler depuis les sources. Nécessite hdf5, un jdk (javadevkit): on installe les sources et le devel, ant (faut-il antir-ant ?), et cela plante (pas le bon java) On décompacte les prérequis, et on recommence. Il faut ncurses dev library (or termcap library): libyui-ncurses-devel, fftw, blas, lapack, umfpack, libsuitesparse,... et cela plante, il manque encore on ne sait quoi. 3. On utilise le binary fourni en http://www.scilab.org/download/5.5.1. On linke dans /usr/bin et on crée un filepif (icône choqok).

55 15.3 Installation 5.3.1-13.1 (SuSE − 11.4) 15 SCILAB

15.3 Installation 5.3.1-13.1 (SuSE − 11.4) 1. Avec SuSE − 11.4, un package d’installation est prévu scilab-5.3.1-13.1 ; architecture x86_64 ; build Sun Apr 3 02:21:39 2011 ; Package Group: Pro- ductivity/Scientific/Math. 2. On constate que tout un tas d’autres packages viennent s’installer. Ainsi : Installed Size = 235.4 MiB ; Download Size = 57.2 MiB. 3. Groupe de packages : openSUSE-Education. 4. L’éditeur embarqué s’appelle par la commande editor. Son nom de fantaisie est SciNotes. 5. L’icône de l’éditeur est "cachée". Supprimer la ligne "NoDisplay=true".

15.4 Installations précédentes

1. Nous choisissons d’installer scilab en SCI=/opt/scilab, de sorte que le batch de lancement soit /opt/scilab/bin/scilab. 2. La version contemporaine de SuSE − 11.3 est 5.0.3. La version contemporaine de SuSE − 10.2 était 4.1.1.

 Dans les deux cas, il n’existe pas de *.rpm ou autre mécanisme pour créer des liens vers les exécutables, ou les filepifs gérant les fichiers *.sci et *.sce.

15.4.1 Configuration

1. Créer, dans /usr/bin, un lien scilab vers SCI/bin/scilab. 2. Créer un batch scipad dans le répertoire /usr/bin

scilab -e "scipad(\"$1\")"

D’origine, scipad est une commande scilab, pas un programme indépendant. 3. Créer un mimetype scilab dans /opt/kde3/share/mimelnk/text

Comment=.sci ## Encoding=UTF-8 Icon=kttsd MimeType=text/x-scilab Patterns=*.sci;

4. Créer un mimetype scipad dans /opt/kde3/share/mimelnk/text

Comment=.sce Icon=kttsd MimeType=text/x-scipad Patterns=*.sce;

5. Créer un filepif scilab dans /usr/share/applications/kde

Categories=Math Exec=scilab -f %u Icon=kttsd MimeType=text/x-scilab

6. Créer un filepif scipad dans /usr/share/applications/kde

Categories=Math Exec=scipad %u Icon=kttsd MimeType=application/x-scipad

7. Si on lance scilab depuis [F 2], le répertoire par défaut est $HOME. Si on lance scilab depuis un terminal, le répertoire par défaut est le répertoire du terminal.

56 15 SCILAB 15.5 Tentative de compilation 5.03 sur 10.2

15.4.2 Spécialement 5.0.3

1. Le fichier scilab-5.0.3.bin.linux-i686.tar.gz fait 110 Mo. Le barnum décompressé fait 325 Mo, en 17500 fichiers. Contient entre autres le java qui va. 2. Scilab casse souvent. Le mécanisme imposant de lancer par [Ctr − S][Ctr − L] est tout à fait utile. Pour quelques exemples, consulter la Subsection 15.8 : CAVAPA

15.4.3 Spécialement 5.0

 Se traîne lamentablement. Oublier

15.4.4 Spécialement 4.1.1

1. Téléchargement depuis http://www.scilab.org/. On obtient un *.tar.gz de 16 Mo. Le décom- presser. On obtient un barnum de 110 Mo. 2. Certaines bibliothèques semblent préférer que SCIDIR=/usr/local/lib/scilab (fait, sans trop de tests). 3. La version winx fait la même taille. Le fenêtrage semble mieux réalisé. On constate que les fichiers ad hoc ont reçu le typage et les liens d’exécution désirables (-O, -P, -X pour open, print, execute).  En sortie de scilab, le getline du terminal se comporte bizarrement. En particulier, il faut utiliser [C − h] pour réaliser [BackDel].

15.5 Tentative de compilation 5.03 sur 10.2 1. On télécharge scilab-5.0.3-src et prerequirements-scilab-5.0.3-src. Bien entendu, ces gens-là ne savent pas ce qu’est un torrent... et cela se traîne. 2. SuSE − 10.2. Décompactage des sources en /home/distrib/extra/scilab/scilab-5.0.3-src 3. configure --prefix /opt/scilab répond : "64 bits support needs a fortran 90 compiler (try –with-gfortran)" 4. configure --prefix /opt/scilab --with-gfortran répond des salades sur jdk (java development kit). –with-jdk=... ne suffit pas 5. --without-javasci --without-gui demande libpcre3 & libpcre3-dev libmatio & libmatio-devel puis cela va au bout. 6. On linke le répertoire /home/distrib/extra/scilab/prerequirements-scilab-5.0.3-src/java/jdk sur /usr/lib64/jvm/jdk et on positionne $JAVA_HOME sur /usr/lib64/jvm/jdk. Bilan : checking JAVA_HOME variable... JAVA_HOME variable found, use it as JVM root directory checking for zip or jar files to include on CLASSPATH... checking to see if the java compiler works... yes Java found in /usr/lib64/jvm/jdk checking type of jvm... jdk checking java API version... 1.5 Using the following JNI include flags -I/usr/lib64/jvm/jdk/include -I/usr/lib64/jvm/jdk/include/linux checking if jni.h can be included... yes Using the following JNI library flags -L/usr/lib64/jvm/jdk/jre/lib/i386/client -ljvm -L/usr/lib64/jvm/jdk/jre/lib/i386/server -ljvm Using the following runtime library path /usr/lib64/jvm/jdk/jre/lib/i386/client:/usr/lib64/jvm/jdk/jre/lib/i386/server checking to see if we can link a JNI application... no configure: error: could not link file that includes jni.h Either the configure script does not know how to deal with this JVM configuration or the JVM install is broken or corrupted. 7. On télécharge jdk-6u11-linux-x64-rpm.bin depuis sun. (Ici non plus, pas de torrent, et rien ne va)

57 15.6 Tentative de compilation 4.1 sur 10.2 15 SCILAB

15.6 Tentative de compilation 4.1 sur 10.2

Le fichier source utilisé est scilab-4.1.1-src.tar.gz. Bien entendu, rien ne va. 1. Un compilateur fortran est demandé. Avec SuSE − 10.2, seul g77 est fourni. Cela ne suffit pas. Tentative d’installer gcc41-fortran-4.1.2_20061115-5.x86_64.rpm et libgfortran41-4.1. 2_20061115-5.x86_64.rpm. La bibliothèque s’installe, mais pas le compilateur (réclame mpfr). 2. L’application mpfr est demandée. Tentative d’installation de depuis les sources gmp-4.2.2 http: //gmplib.org/ et mpfr-2.3.0 http://www.mpfr.org/mpfr-current/. Les commandes configure ; make ; make check ; make install se passent bien. Mais mpfr n’est pas détecté à la compilation de gfortran. 3. Finalement, http://rpm.pbone.net/index.php3 suggère d’aller en ftp://ftp.uni-bayreuth. de/pub/linux/opensuse/distribution/10.2/repo/oss/suse/x86_64/ et alors, on télécharge et on installe les fichiers du Alg. 31.

Incl. 31 Scilab : applications requises avant compilation tous sont *.x86_64.rpm gcc41-fortran-4.1.2_20061115-5 (& -32bit) libgfortran41-4.1.2_20061115-5 (& -32bit) mpfr-2.2.0-25 (& -32bit) mpfr-devel-2.2.0-25 (& -32bit) -8.4.14-11 (& -32bit) tcl-devel-8.4.14-11 tclplug-3.0.2-34 (& -32bit) tcludp-1.0.7-34 tclx-8.4-363 tk-8.4.14-11 (& -32bit) tk-devel-8.4.14-11 tkdesk-2.0-41 tkimg-1.3-67 tkrat-2.1.5-40 tktable-2.9-36 tkxcd-1.1.0-824

4. Alors la commande scilab/configure --with-gtk2 --with-gfortran s’exécute jusqu’au bout sans message d’erreur.

WARNING: javac not found: I will not build the java interface WARNING: PVM unable to find architecture: I will not use PVM WARNING: ocamlc not found: I will not build Modelica compiler

Remarque : scilab/configure --with-gtk aboutit à un rejet de gtk (gnome-config not found) 5. On peut alors lancer make, avec enregistrement des messages. La commande

make all 2> make-scilab.err 1> make-scilab.log

se déroule jusqu’au bout. Le fichier *.log indique des compilations en C et d’autres en fortran.

gcc -O2 -DNDEBUG -Dlinux -DNARROWPROTO -march=athlon64 -mfpmath=sse -msse2 -m3dnow -m64 -fPIC ‘pkg-config gtk+-2.0 --cflags‘ -c -o CloneObjects.o CloneObjects.c gfortran -O -ff2c -march=athlon64 -mfpmath=sse -msse2 -m3dnow -m64 -fPIC -c -o drref.o drref.f gfortran -ff2c -march=athlon64 -mfpmath=sse -msse2 -m3dnow -m64 -fPIC -c dsvdc.f -o dsvdc.o.

58 15 SCILAB 15.7 Prise en main

15.7 Prise en main 1. La commande scilab lance une fenêtre scilex, qui est la fenêtre interactive. Une commande aaa bbb est interprétée comme aaa("bbb"). 2. Parmi les commandes utiles, on dispose de : scipad lance l’éditeur de texte help accès aux fichiers d’aide. 3. Diviser l’éditeur en deux : Menu . Windows . Split_side_by_side. La deuxième partie peut être utilisée pour charger divers fichiers source (utilisables comme exemples) 4. Le site web de Scilab contient une page de ressources documentaires http://www.scilab.org/ fr/support/documentation. Ne résistons pas à en citer un extrait : Scilab is widely used in high schools all over the world, in China, India or Japan for example. Scilab can be used as a tool for teaching and learning mathematics. Students can work independently and responsibly while learning mathematical concepts. Freely available at school or at home, the use of Scilab by students and teachers is favored. Resources for teachers are only available in French, switch language to display them. No comment. 5. Il fut un temps, la page http://www.scilab.org/publications/index_publications.php? page=freebooks conduisait sur des polycopiés. Le polycopié Ycart(2001) y a été référencé un moment. Cette page a disparu. Une autre référence utile est : Sallet(2005). 6. SuSE − 11.3 : améliorations scipad : (a) indentation automatique après for, if, etc. (b) dés-indentation après end (c) lorsque l’on sort de find par [Esc], la commande reste accessible pour les fois suivantes (comportement "évident", mais nouveau) (d) possibilité de récupérer un morceau de texte dans scilab (clic-gauche) et de le coller par la souris (clic-central). Le texte sélectionné n’est pas "rendu visible" dans scilab, mais cela fonctionne. 7. SuSE − 11.3 changement scilab (a) ls ne prend plus les options unix. Utiliser sort(ls( permet d’avoir le même résultat sous unix et sous Win$ (différences de classement) (b) linpro ne va plus (externalisé)  disparition (dans scilab) des caractères composés avec [Alt − Gr]. Dans scipad, cela continue de fonctionner. Cela en cause sur les listes de diffusion d’erreurs. Il y est dit que cela fonctionne pour root et pas pour les autres. En fait (essayé une fois) cela fonctionne pour root, puis cela fonctionne pour tout le monde.

15.8 CAVAPA (5.0.3)

 Truc insupportable (toutes les versions) : dans le langage de programmation, toutes les struc- tures se terminent par end. Commenter systématiquement la structure qui se termine : end//for, end//if, etc.  Existe-t-il une version 64 bits ?  http://bugzilla.scilab.org/show_bug.cgi?id=2789. The debugger is broken in the trunk (let the world know). Traduction babelfish : le programme de mise au point est cassé dans le tronc (laissez le monde savent). Traduction pld : ils ne s’aiment pas entre eux et ne se causent pas.  quand scilab tourne, scipad est gelé ; dans le même temps, difficulté à fermer une fenêtre konqueror (not responding).  la tentative de deff("toto(a)", [ ]) conduit à !--error 55 Wrong type for argument 2: String expected. at line 2 of exec file called by : scilab.start,-1);;scipad("Untitled3.sce"); line 99 of function called by : et il est planté (scipad ne répond plus). Semble être stack overflow.

59 17 SAGE

16 Mathematica

.#!/bin/bash # This script fix the error - Warning: Actions not found: delete-next-character # when using mathematica in SuSE 9.0 and up creatXresource() { /usr/bin/touch ~/.Xresources /bin/cat > ~/.Xresources <‌< EOF *secondaryModifierMask: Mod3Mask EOF } if ! [ -e ~/.Xresources ] ; then creatXresource fi xrdb -load ~/.Xresources /opt/mathematica/Executables/Mathematica

17 Sage

17.1 Compilation

1. Les versions successives sont stockées en http://www.sagemath.org/src-old/. Ne pas croire que cela s’améliore d’une version à l’autre. 2. Anonymiser la compilation (utilisateur builder), utiliser un PATH réduit (système uniquement, pas de games, ni de builder/bin. Dans /opt/sage-xx.xx/, extraire l’archive *.tar. 3. La compilation nécessite tar, make, perl, ar (binutils), m4 (gnu m4), dpkg et patch, gcc-c++ et gcc-fortran (versions 4.8). Le README parle de ranlib (on installe gccranlib). Nécessite aussi libatlas (la compilation le crée si nécessaire). 4. Le barnum engendré est de taille énorme. Il faut absolument compiler tout cela à la place défini- tive. Et utiliser une console plutôt que konqueror pour changer les fichiers de propriétaire. 5. Taper export MAKE="make -j4" pour utiliser toute la puissance disponible, avant de lancer make.

17.1.1 Exemples de compilation

1. Echecs sur madiran (SuSE − 13.1):

(a) 5.3 . Error installing package singular-3-1-3-3.p6 :: real 41m39.657s (b) 5.13 . Error installing package atlas-3.10.1.p7 :: real 12m55.698s (c) 6-1.1 . Error installing package atlas-3.10.1.p7 ::

2. sage 6-3 (madiran, SuSE − 13.1) BUILDSTART=00:07, start.log=02:06; real 119m25.678s. La compilation génère 76024 fichiers, 1146 liens et 9445 répertoires, soit 86615 items. 3. sage-7-5-1 (madiran, SuSE − 42.1)

(a) install=dpkg, dpkg-devel, m4, patch, perl-File-FcntlLock. On avait déjà tar, make, perl, ar (binutils), dpkg et patch, gcc-c++ et gcc-fortran (versions 4.8). (b) Dans les versions précédentes: "Le README parle de ranlib (on installe gccranlib)". Pas trouvé, pas de problème apparent. clock 62:37 real 58:11 (c) On lance la compil. user 196:08 sys 6:28 (d) Il en résulte 118.289 items, 7.816.497.714 (7 Go).

60 17 SAGE 17.2 Mise en place

17.2 Mise en place

1. Après quoi, root crée le répertoire /opt/sage-6.3/owner et l’attribue à $ipse, ainsi que le script /opt/sage-6.3/sage. 2. A la première exécution demande le password de l’administrateur 3. launch sage as root, and execute install_scripts(’/usr/local/bin’) this will create scripts like gap gp hg ipython maxima mwrank R singular. Such xxx script contains contains :

#!/bin/sh exec sage --xxx "$@".

in order to launch the corresponding program as a part of Sage. On the other hand, script sqlite3 is not created (installed outside of Sage), while M2 and kash are not created either (not available as a part of Sage). 4. Add a link towards the script SAGE_ROOT/sage in /usr/local/bin. 5. Copy SAGE_ROOT/local/share/texmf/tex/generic/sagetex into /usr/share/texmf/tex/latex/ _modified, run texhash and check using kpsewhich sagetex.sty. 6. Create a file SAGE_ROT/notebook.sage that contains the command notebook() —and nothing else. 7. Create a filepif that contains

[Desktop Entry] Categories=Math; Comment= Encoding=UTF-8 Exec=/opt/sage-7-5-1/sage /opt/sage-7-5-1/notebook.sage GenericName= Icon=f-spot Name=Sage StartupNotify=false Terminal=false Type=Application

8. sage -optional donne la liste suivante : 4ti2-1.6.2 ...... database_pari-20130516 ...... normaliz-2.8.p0 ...... PyQt_x11-4.9.1.p0 ...... database_stein_watkins_mini.p0. nose-1.1.2 ...... TOPCOM-0.17.4 ...... database_symbolic_data-20070206 nzmath-1.1.0 ...... autotools-20121217 ...... dot2tex-2.8.7.p2 ...... openmpi-1.4.3 ...... beautifulsoup-3.2.1 ...... extra_docs-20070208 ...... openssl-1.0.1c.p0 ...... benzene-20130630 ...... gap_packages-4.6.4.p1 ...... ore_algebra-0.1 ...... biopython-1.61 ...... gcc-4.6.4 ...... p_group_cohomology-2.1.4.p1 ... brian-1.4.1.p0 ...... gdbm-1.8.3 ...... patchbot-2.2 ...... buckygen-1.0.p1 ...... ginv-1.9-20080723 ...... phc-2.3.65.p0 ...... cbc-2.8.1.p0 ...... git-1.7.12.2.p0 ...... pybtex-20120618 ...... ccache-3.1.9 ...... gnuplotpy-1.8 ...... pycryptoplus-20100809-git ..... chomp-20130518.p1 ...... guppy-0.1.8 ...... pyopenssl-0.13.p0 ...... cluster_seed-1.0 ...... java3d-20070901 ...... pyx-0.10 ...... coxeter3-1.1 ...... kash3-2008-07-31.p0 ...... pyzmq-2.1.11.p1 ...... cryptominisat-2.9.6 ...... knoboo-20080411 ...... qhull-2010.1 ...... cunningham_tables-1.0 ...... libogg-1.1.4 ...... sage_mode-0.10 ...... d..._cremona_ellcurve-20121022. libtheora-1.1.1 ...... sip-4.13.2.p0 ...... database_gap-4.6.4 ...... lie-2.2.2.p5 ...... trac-0.11.5.p0 ...... database_jones_numfield-v4 .... lrs-4.2b.p1 ...... valgrind-3.8.1.p0 ...... database_kohel-20060803 ...... mpi4py-1.2.2 ...... zeromq-3.2.0.p0 ...... database_odlyzko_zeta ...... nauty-25 ......

61 17.3 Interface avec Maple 17 SAGE

17.3 Interface avec Maple 17.3.1 Sage 6.3 (sur madiran 1) Les fichiers appelés Maple sont : ./local/share/sage/ext/maple 4096 (dir, void) ./local/include/lrcalc/maple.h 104 ./local/include/linbox/util/formats/maple.h 11495 ./src/build/lib.linux-x86_64-2.7/sage/interfaces/maple.py 37423 ./src/sage/interfaces/maple.py 37423 ./local/lib/python2.7/site-packages/sage/interfaces/maple.py 37423 ./local/lib/python2.7/site-packages/sage/interfaces/maple.pyc 39937

17.3.2 Sage 5.3 (sur mirabel) Les fichiers appelés maple sont : ./data/extcode/.hg/data/maple 4096 (dir, void) ./data/extcode/maple 4096 (dir, void) ./local/include/lrcalc/maple.h 104 ./local/include/linbox/util/formats/maple.h 10114 ./spkg/bin/maple 36 ./spkg/bin/maple.old 38 ./spkg/bin/maples 40 ./spkg/bin/maple~ 40 ./devel/sage-main/.hg/store/data/sage/interfaces/maple.py.i 25986 ./devel/sage-main/build/lib.linux-x86_64-2.7/sage/interfaces/maple.py 38539 ./devel/sage-main/build/sage/interfaces/maple.py 38539 ./devel/sage-main/sage/interfaces/maple.py 38539 ./devel/sage-main/build/sage/interfaces/maple.pyc 41915

17.3.3 Essais

1. Une commande comme maple(’1+1’) se termine par une erreur dans toutes les versions de Sage (5.3, 5.13, 6.1, 6.3). 2. Une commande comme maple.eval(’factor(x^2-1)’) se termine par une erreur dans toutes les versions, sauf Sage 5.3 sur mirabel (SuSE − 11.4, installée depuis le rpm de OpenSuse). Cela retourne alors la chaîne de caractères attendus. 3. /opt/sage-6.3/local/lib/python2.7/site-packages/sage/interfaces/all.py contient une liste de tous les interfaces existants. Pour ce qui est de maple, il faut obtenir from maple import maple, maple_console, Maple depuis ../interfaces/maple.pyc ou depuis ../interfaces/maple.py. 4. Depuis une console sage, la commande maple_console() est fonctionnelle: elle donne une console maple. Cela ne fonctionne pas en mode notebook (mais cela est bien normal).

17.4 Create a maplechild On utilise la méthode décrite dans : http://stackoverflow.com/questions/2053231/grabbing-the-output-of-maple-via-python 1. Lancement. On crée un maplechild (Alg. 32) par la commande restartmaple() :

2. Un tel objet est de type ’instance’. Ses attributs sont donnés Alg. 33.

3. Il ne reste plus qu’à envoyer des commandes et lire le résultat (c’est à dire lire le buffer jusqu’au nouveau prompt ’#–>’). 4. La réponse à la commande

62 17 SAGE 17.4 Create a maplechild

Incl. 32 Restarting Maple from Sage import pexpect MWcommand = "/usr/bin/maple -t" def restartmaple(): maplechild = pexpect.spawn(MWcommand) global maplechild maplechild.timeout=10 try: maplechild.close() maplechild.expect(’#-->’); except: 1 return "Maple has been restarted"

Incl. 33 child’s commands STDERR_FILENO delaybeforesend getwinsize pid setwinsize STDIN_FILENO delimiter interact read signalstatus STDOUT_FILENO encoding isalive read_nonblocking softspace after env isatty readline status args eof kill readlines stderr before exitstatus logfile searchwindowsize stdin buffer expect match send stdout child_fd expect_exact match_index sendeof terminate close expect_list maxread sendline terminated closed fileno name setecho timeout command flag_eof next setlog write - flush patterns setmaxread writelines compile_pattern_list

factor(x^2-1); est : #factor(x^2-1); (x-1)*(x+1) #--> L’apparition du prompt ’#–>’ marque la fin du message et sert donc de délimiteur. Problème et contournement  Comme rien n’est simple, la réponse de maple -t à la commande : (proc(U) matrix(3,3,U); det(%); end)([m11, m12, m13, m12, m22, m23, m13, m23, m33]);3141592+1; est :

(proc(U) matrix(3,3,U); det(%); end)([m11, m12, m13, m12, m22, m23, m13, m\r #-->(proc(U) matrix(3,3,U); det(%); end)(\\<-- 37 spaces -->\r\n\r #-->[m11, m12, m13, m12, m22, m23, m13, m23,m33]);3141592+1;\r\n m11*m22*m33-m11*m23^2-m12^2*m33+2*m12*m13*m23-m13^2*m22\r\n 3141593\r\n\r #--> Sur un écran, cela produit exactement ce qu’il faut: le prompt est déjà affiché. Puis on a le début de la commande. Puis un retour chariot. On réécrit le prompt et une partie de la commande, puis un blanc protégé de la bonne longueur, puis on réécrit le prompt et la fin de la commande tombe en bonne place (et cela donne l’illusion d’une ligne écrite en un seul passage). Puis viennent les deux lignes de résultats et le prompt final.  Vus d’un pipeline et non d’un écran, les messages de ce genre génèrent donc trois prompts, empoisonnant les échanges ultérieurs.  Quelques bricolages comme maple -t -u ou maple -t -d raw ne donnent rien. Un essai à tra- vers un batch qui positionnerait TERM=raw ne donne rien (Sage ne le compile pas). 1. On est donc amené à ajouter systématiquement le texte xxx+1; à la suite du texte de la commande maple désirée (où xxx désigne un entier choisi comme clef d’identification). On utilise alors la valeur de xxx + 1 comme "expected string" pour récupérer la réponse attendue. Puis on purge le buffer jusqu’au prompt ’#–>’ final.

63 18 MAPLE

2. En cas de timeout, on relance Maple et l’on en reste là. Si l’on veut qu’une bibliothèque soit chargée systématiquement, il faut la placer dans restartmaple. 3. Une fois obtenue la réponse désirée, il reste à supprimer tout ce qui se trouve avant un ";" (ma- noeuvre à faire répétitivement). Évidemment, cela tuerait un message dont la réponse contiendrait le caractère ";". Il reste à transformer la chaîne de caractères obtenue en un objet Sage. On utilise l’heuristique suivant: si la commande ne contient pas d’arguments, on ne fait rien. Sinon, on uti- lise sage_eval (et surtout pas eval, qui enchevêtre tout à la sauce Python). Nouvel heuristique: on sait que toutes les variables figurant dans les arguments sont connues de Sage, et on fait le pari qu’il n’y en a point d’autres.  Pour des réponses vraiment longues, cela plante (cause inconnue). Un exemple de longueur 80.000, pas d’autres causes apparentes.

18 Maple

1. Plan d’installation : MapleXX s’installe en /opt/mapleXX. Les batchs de lancement sont en /opt/mapleXX/bin. Placer un lien vers /opt/mapleXX/bin/maple et /opt/mapleXX/bin/xmaple dans un répertoire du PATH par défaut. Si l’on prévoit de faire coexister plusieurs versions, utiliser des liens numérotés. Par exemple : ln -s /opt/mapleXX/bin/xmaple xmapleXX. Suivi de : ln -s mapleXX maple pour privilégier la version XX (indispensable pour que sage tombe sur la bonne commande maple). 2. Répertoire de base. Si l’on déplace l’arborescence Maple, il faut modifier les fichiers /opt/mapleXX/ bin/xmaple et maple pour qu’ils reflètent le changement (ligne 19): MAPLE="/other_path/mapleXX" Il faudra sans doute modifier aussi les filepifs : seul root peut mettre à jour les liens dans /usr/bin, et donc le reste du monde utilise des liens complets. 3. Licences. Les licences attribuées dépendent du hostid de l’ordinateur. Attention, ce n’est pas le résultat de la commande éponyme sous Linux, mais du résultat de : /opt/mapleXX/bin.X86_XX_LINUX/lmutilv95 hostid. . Pour l’instant, cette quantité est égale à la Hwaddr de la carte réseau eth0 (12 caractères, les colons sont omis). 4. Configuration globale: Tools . Options . general : désactiver updates, maplecloud ; autosave=3 mn ; display : input=maple notations ; pas de labels pour les équations.

18.1 Maple 18 (SuSE − 42.1) 1. madiran2. Il suffit de copier /kroot/opt/maple18 vers /opt/maple18, puis d’exécuter /home/distrib/Maplesoft_Maple_18.0_Linux.x64/mkpif.sh 2. Remarque: update-mime-database /usr/share/mime est long à exécuter. Attendre patiem- ment. 3. maverick2. On copie madiran2 (par le réseau), puis on modifie le fichier licence. mahjong2.

18.2 Maple 18 (SuSE − 13.1) On constate une création de mime-types et de filepifs en divers endroits selon la personne qui installe. 1. On s’en inspire pour créer ses propres types et icônes. Placer les originaux de tout cela dans /home/distrib/mapleXX en respectant l’arborescence (prévoir les installations/désinstallations futures). On remarquera l’usage d’un suffixe "r", aka root, pour garder trace de qui doit être conservé. 2. Mime-types: x-maple-s pour les fichiers *.mws (prétendus "classic"), x-maple-w pour les fichiers *.mw (prétendus "worksheet"). On écrit un descripteur , puis on exécute update-mime-database /usr/share/mime pour que les mimelinks se mettent en place.

64 18 MAPLE 18.2 Maple 18 (SuSE − 13.1)

Incl. 34 Maple18 : intégration dans kde4 : mimetype, applnk. mimetype /usr/share/mime/packages/maple-r .mws .mw applnk /usr/share/applications/maple18r [Desktop Entry] Categories=Education;Math; Encoding=UTF-8 Exec=/opt/maple18/bin/xmaple %f GenericName=Maple 18 Icon=/opt/maple18/bin/Maple18.png MimeType=application/x-maple-w; Name=Maple 18r Type=Application

65 18.3 Maple 14 (SuSE − 11.3) 18 MAPLE

3. Qu’est-ce que *.mwz (worksheet aussi) ? Qu’est-ce que *.mla (maple library archive) ? 4. Filepifs mapleXXr: cf. Alg. 34. 5. Incantation pour magic, visant \n :

18.3 Maple 14 (SuSE − 11.3) 1. Comme de juste, les fichiers de configuration changent tout le temps. Pour maple14 et SuSE − 11.4, utiliser les fichiers du Alg. 35.

Incl. 35 Maple14 : intégration dans kde4 : mimetype+magic, applnk. mimetype /usr/share/mime/packages .mws .mw ... ... /> applnk /usr/share/applications [Desktop Entry] Categories=Education;Math; Encoding=UTF-8 Exec=/opt/maple14/bin/xmaple %f GenericName=Maple 14 Icon=/opt/maple14/bin/Maple14.png MimeType=application/x-maple-s; \ application/x-maple-w; Name=Maple 14 Type=Application

2. Puis il faut fournir les pictogrammes dans les différentes tailles et les intégrer dans hicolor.

18.4 Installations plus anciennes 1. Intégration dans kde : ajouter les filepifs décrites Alg. 36 aux adresses /opt/kde3/share/mimelnk/text/x-maple.desktop, /usr/share/applications/x-maple.desktop. Bien entendu, il faut dupliquer cela pour s’il y a plusieurs versions.

66 18 MAPLE 18.4 Installations plus anciennes

Incl. 36 Maple : intégration dans kde : magic, mimetype, applnk. # Magic data for KMimeMagic (originally for file(1) command) 0 string {VERSION\ 4\ 0\ "IBM\ INTEL} application/x-maple6 0 string \0x0aapplication/x-maple9 magic-maple

[Desktop Entry] Categories=Qt;KDE;TextEditor; [Desktop Entry] Exec=/opt/maple6/bin/xmaplez %U Comment=.mws Icon=licq ## Encoding=UTF-8 MimeType=application/x-maple6 MimeType=text/x-maple Name=Maple Icon=licq Terminal=false Patterns=*.mws; Type=Application [Desktop Entry] [Desktop Entry] Comment=.mw Categories=Math ## Encoding=UTF-8 Exec=/opt/maple12/bin/xmaple %f MimeType=text/x-mapleq Icon=licq Icon=licqq MimeType=text/x-maple,text/x-mapleq Patterns=*.mw Name=Maple12 mimetype Type=Application applnk

2. Prévoir le mécanisme update (utilitaires pldx etc.) : il faut un répertoire /opt/mapleXX/update, lisible par tous et inscriptible par l’utilisateur chargé de la maintenance (éviter root). 3. Comme pour tout autre logiciel "propriétaire", Maple est prévu pour ne pas fonctionner tant que les mécanismes prévus n’autorisent pas. Et comme de juste, la première prévision est mieux soignée que la deuxième. Par exemple http://www.maplesoft.com/support/faqs/Maple8/Installation/12.aspx : Question : When I try starting Maple on my Red Hat 9.0 machine, I get the following errors: /usr/local/maple8/bin.IBM_INTEL_LINUX/mserver: relocation error: /usr/local/maple8/bin.IBM_INTEL_LINUX/libmaple.so: symbol errno, version GLIBC_2.0 not defined What can I do? Answer : Please note that since Red Hat 9.0 was released after Maple 7 and 8, it is not an officially tested and supported platform. However, we do have some Red Hat 9.0 users who have reported...

18.4.1 maple 6

1. Bricolage des bibliothèques. L’installation par défaut de maple6.1 ne fonctionne plus sous SuSE− 9.3 (et une machine 32 bits). Il faut indiquer la bonne version du noyau (Alg. 37). Et recopier la "bonne version" de la bibliothèque ld-linux.so.2 dans le répertoire /opt/mapleXX/bin.IBM_INTEL_LINUX22/.

Incl. 37 Maple : lanceurs en mode texte et mode graphique PATH=$PATH:/opt/maple6/bin PATH=$PATH:/opt/maple6/bin export PATH export PATH export LD_ASSUME_KERNEL=2.4.1 export LD_ASSUME_KERNEL=2.4.1 maple $* xmaple $* maplez6 xmaplez6

 SuSE − 9.3 (32_bits) : suite à manoeuvre inconnue, le pavé numérique ne fonctionne plus (en numlock). Une réinstallation depuis les sources maple61 n’aboutit pas.  Comment utiliser maple61 (32 bits) sur une machine SuSE − 10.2, 64 bits ?

67 18.5 Récupération de résultats Maple vers LYX 18 MAPLE

18.4.2 maple 9.5

1. Maple9.5 : installer deux filepifs, l’une pour cw (classical worksheet), l’autre pour le nouveau style. 2. Nécessite les corrections suivantes pour SuSE − 9.3 et SuSE − 10.2:

(a) Changer la ligne #! /bin/sh en #! /bin/bash dans installMapleLinuxSU. Sinon le batch plante immédiatement. (b) Supprimer les lignes LD_ASSUME_KERNEL dans Linux/Disk1/InstData/VM/LinuxInstaller.bin. Nécessaire pour que l’installation ait lieu. Sinon, grep échoue. (c) Pour la SuSE − 10.2 : il faut installer les "deprecated libs". Sinon l’installation échoue (ne trouve pas certaines librairies). N’était pas utile pour SuSE − 9.3. (d) Il faut modifier /etc/hosts pour que 127.0.0.1 soit la seule référence à localhost (commenting out the ipV6 line). Sinon : "connection to kernel lost" lors de l’exécution. (e) Installer les *.desktop dans /opt/kde3/share/applications/kde et les pictogrammes licq.png et licq9.png dans /opt/kde3/share/icons/crystalsvg.

18.4.3 maple 12

1. Ne pas utiliser l’aide en mode graphique : cela plante tout.

18.5 Récupération de résultats Maple vers LYX 1. Méthode générale : la commande Maple : latex fournit la traduction en Maple-latex d’un objet Maple. On peut rediriger cela vers un fichier 2. En fait, il est intéressant de disposer des commandes latexx, latexy, latexz qui –respective- ment– écrivent la première ligne du fichier, ajoute une ligne au fichier, ajoute la dernière ligne et recompile vers un autre fichier *.tex. 3. Encore mieux : une commande latexq agissant sur une séquence et appliquant les trois com- mandes précédents, dans le bon ordre. 4. Une recompilation est nécessaire pour se débarrasser des accolades superflues (qui apparaissent en mode ERT), mais aussi pour retranscrire des quantités qu’il est préférable de programmer sans indice, comme ra, s1, et que l’on veut néanmoins afficher comme ra, s1 etc. 5. Il est en outre utile d’organiser les "futurs changement de notations" en utilisant des macros pour coder l’affichage des variables : ainsi utiliser \mpsi pour coder une variable qui s’écrit aujourd’hui ψ permettra d’en renommer toutes les occurrences par la modification d’une seule ligne. 6. Pour finir, on importe le fichier *.tex ainsi compilé dans une nouvelle feuille LYX par buffer-import latex /full-path/azor.tex.  Comment faire pour obtenir directement la bonne langue pour le fichier équations, et ne pas avoir à utiliser F11 à chaque fois ???

18.6 Récupération d’une procédure Maple vers LYX 18.6.1 Principe

Maple peut exporter les fichiers *.mws en fichiers *.tex. Évidemment, il s’agit de maple_tex c’est à dire d’un truc hybride et verrouillé, et le problème consiste à en faire du LYX utilisable. Avant toute autre chose, il faut régler au maximum (24 pouces) la largeur de page de la sortie latex de Maple. Sans quoi, un grand nombre d’équations sortent en "multiline" et les ennuis ne sont pas loin. Pour gérer les empilements d’accolades (etc.) il faudrait une analyse syntaxique. Or écrire un tel analyseur reviendrait à réécrire TEX. La gestion périlleuse des accolades sera donc réalisée par LYX lui-même, car un prétraitement du texte est entrepris au chargement. Il reste à le préparer, par exemple en utilisant le fait que l’encapsulation \mathnormal{..} est supprimée lors de ce prétraitement. 1. Ancienne version. Le traitement de texte était sur une machine (KLYX), et Maple sur une autre machine (winxx). Il y avait "beaucoup" de petits fichiers Maple, que l’on dirigeait vers autant de sous-répertoires différents.

68 18 MAPLE 18.6 Récupération d’une procédure Maple vers LYX

smbmount //work98/hasard $ipse/w98 -N mkdir $ipse/docs/simul_book/$1 cp $ipse/w98/$1/* $ipse/docs/simul_book/$1 smbumount $ipse/w98 cd $ipse/docs/simul_book ; mk_part5 $1

2. Nouvelle version. Le contexte est celui d’un "gros" fichier Maple, dont on récupère divers mor- ceaux à divers moments (dans un seul et même répertoire temporaire). Dans les deux cas, il est indispensable de faire compiler le fichier *.lyx résultant par un nouveau processus LYX... car il arrive que le transcodage se passe mal, et plante le LYX en cours.

Incl. 38 Lancement simplifié (écriture d’un article). ouca=/home/douillet/docs/Cherche/orthopoly ; cd $ouca ; mk_part6 atrick lyx $ouca/atrick/atrick.lyx

18.6.2 Le batch principal

Le traitement (Alg. 39) se déroule en quatre passages.

Incl. 39 Le batch principal. sed_rep=/home/douillet/bin/maple6 cat $1/$1.tex | tr \\f\\r\\n ¶¶¶ | sed --file $sed_rep/sed_coupe > $1/$1"2".tex sed --file $sed_rep/sed_multiline $1/$1"2".tex > $1/$1"3".tex sed -e s/partpartpart/$1/ $sed_rep/sed_tex6 > $sed_rep/sed_tex66 sed -f $sed_rep/sed_tex66 $1/$1"3".tex > $1/$1"1".lyx cat $sed_rep/aaa_deb.lyx $1/$1"1".lyx $sed_rep/aaa_fin.lyx > $1/$1.lyx for j in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 do if test -f $1/$1$j.eps ; then echo $1$j ; sed -f $sed_rep/sed_eps6 $1/$1$j.eps > $1/$1_$j.eps ; rm $1/$1$j.eps fi done

1. Traitement des fin de lignes (différentes selon la machine sur laquelle tourne Maple), puis redé- coupage pour faciliter le traitement principal. 2. Un traitement spécial des "multiline". 3. Le traitement principal, avec une modification préalable du filtre sed (gestion des noms des graphiques). 4. Le traitement des images *.eps. On constate qu’elles ne sont pas codées de la même manière sous u*ix et sous winxx.

18.6.3 Traitement des fins de ligne, et redécoupage

Le but du batch sed_coupe Alg. 40 est de découper le fichier en "lignes logiques", et en particulier d’être certain que les deux accolades d’un même couple soient bien sur la même ligne, pouvant ainsi être traitées par reconnaissance de motifs (sed est un filtre portant sur des lignes). Pour améliorer la lisibilité, les "retours à la ligne" faisant partie d’un motif de substitution sont décrits par \£ dans les encadrés de ce document.

18.6.4 Le cas spécial des multiline

S’il reste encore des "multiline" malgré le réglage de la largeur de page en exportation, le filtre Alg. 41 les recode en une matrice. Et on laisse une trace (multiline) de la chose dans le fichier final. Ne pas confondre les divers "à la ligne", en particulier \newline qui est une commande LYX et \£ qui est un retour chariot.

69 19 GEOMETRY

Incl. 40 Le filtre sed_coupe. s/¶/ /g s/^.*begin{document}// ; s/\\end{document}.*$// s/\\begin{mapleinput}/\£\\begin{mapleinput}/g s/\\begin{flushleft}/\£\\begin{flushleft}/g s/\\begin{maplegroup}/\£\\begin{maplegroup}/g s/\\begin{maplelatex}/\£\\begin{maplelatex}/g s/\\begin{maplettyout}/\£\\begin{maplettyout}/g s/\\begin{Title}/\£\\begin{Title}/ s/\\section/\£\\section/g s/\\subsection/\£\\subsection/g s/\\begin{center}\\mapleplot/\£\\begin{center}\\mapleplot/g

Incl. 41 Le filtre sed_multiline. /multiline/ { s/^.*{%\ \\maplemultiline{/\£\£\\newline \£\\newline \£MULTILINE \ \£\£\\begin{maplelatex}{ % \\[ {\\begin{array}{ll}/ s/}\ %\ \}.*$/\\end{array}} \\] % }\\end{maplelatex}/ }

18.6.5 Le filtre principal

Le filtre principal peut alors être lancé. La première partie du filtre (Alg. 42) transcode les environ- nements correspondant à des commentaires. Le titre, les sections et sous sections, les zones mapleinert sont décrits en autant de paragraphes LYX. La deuxième partie du filtre (Alg. 43) transcode les parties actives du code Maple. L’objectif est évidemment d’automatiser le plus grand nombre possible de manoeuvres et la limitation est la difficulté de trouver la bonne description de ces manoeuvres par des motifs regex. Être très attentif à la bonne synchronisation des ouvreurs et des fermeurs, ainsi que celle des accolades.

19 Geometry

19.1 Configurer Maple

1. On suppose Maple installé en /opt/maplenn où nn est le numéro de version. 2. L’ancien noyau "pldx" a été installé en /opt/maplenn/update/pldx et /opt/maplenn/update/simul selon une technique ancienne. 3. Les nouvelles commandes "geometrie" ont été installées en $ipse/docs/Cherche/Geometry/maple selon une technique "nouvelle". 4. En principe, il n’y a pas à se préoccuper des répertoires dès que la commande générale de lancement de Maple figure dans le path et que le fichier /opt/maplenn/lib/init contient les commandes nécessaires à la gestion des deux extensions.

unprotect(trace): trace:=’trace’: unprotect(norm) : norm:=’norm’: with(plots, display):

if libname[1] <> "/opt/maple18/update" then if searchtext("update", libname[1]) <> 0 then libname:= "/opt/maple18/update", libname[2..-1] else libname:= "/opt/maple18/update", libname: fi: fi: encyfile:="$ipse/docs/Cherche/Geometry/maple/ency48.m":.

70 20 HTML : LATEX2HTML

Incl. 42 Le filtre principal (début). s/\\begin{maplegroup}//g ; s/\\mapleresult//g s/\\begin{maplelatex}/\£\\layout Standard\£\£\\begin{maplelatex}/ s/\\pagestyle{empty}// /\\section/ { s/\\section{/\£\£\\layout Section\£\£/ s/\}/\£\£\\layout Standard\£\£/ } /\\subsection/ { s/\\subsection{/\£\£\\layout Subsection\£\£/ s/\}/\£\£\\layout Standard\£\£/ } /\\begin{Title}/ { s/\\begin{Title\}{\\large/\£\£\\layout Title\£\£/ s/\}\\end{Title\}\\end{maplegroup\}/\£\£\\layout Standard\£\£/ } /flushleft/ { s/\\begin{flushleft}/\£\\layout Standard\£\£/ s/\\end{flushleft}//g } /\\begin{maplettyout}/{ s/\\begin{maplettyout}/\£\\newline \£/ s/\\end{maplettyout}// }

20 Html : latex2html

Vu l’incapacité du monde latex à fournir un plugin permettant de visualiser les équations dans les navigateurs web, un certain nombre de contournements se sont mis en place. Le fait qu’il y en ait plusieurs prouve que ces contournements ne fonctionnent pas si bien que cela.

20.1 pdf, url et hyperref 1. Au fil des versions, la commande latex pointe vers l’exécutable :

SuSE − 8.1 /usr/share/texmf/teTEX/bin/i386-linux-libc6/tex SuSE − 9.3 /usr/share/texmf/teTEX/bin/i586-linux/pdfetex SuSE − 11.3 /usr/lib/texmf/bin/x86_64-linux/latex SuSE − 42.1 /usr/bin/pdflatex. L’objectif est d’obtenir au choix un *.dvi avec des liens html ou bien un *.pdf avec des liens html. 2. Avec la version SuSE − 9.3, on constate un changement de comportement de la commande \url, qui ne se comporte plus "verbatim". Un caractère [ \ ] apparaissant dans le champ "adresse" est considéré comme introduisant une commande et, en plus, les "url" débordent bêtement de la page. 3. Le package url a été modifié, et ne transcrit plus verbatim. Au contraire, les paramètres sont recodés "à la manière d’une équation". Et donc, par défaut, les espaces sont supprimés.  Pour que cela ne se produise plus, il faudrait déclarer usepackage[obeyspaces]{url}... mais cela n’est pas possible car LYX lance son propre usepackage{url}, sans options, préalable- ment au préambule utilisateur. Finalement, on modifie le package url lui-même (ligne 215: \ifx\relax\relax ). Grâce à quoi, hwinfo–pci est sans espace, hwinfo –pci est avec un espace, et aussi ftp://[email protected]:21/pub/linux/suse/i386/9.3/suse/noarch xx, http://[email protected]:21/pub/linux/suse/i386/9.3/suse/noarch xx (juste à la fin, avant le xx). 4. Lorsque le package url est seul actif, les urls sont transcrites par des équations, police "code", avec une gestion bien faite des coupures.

71 20.1 pdf, url et hyperref 20 HTML : LATEX2HTML

Incl. 43 Le filtre principal (fin). /mapleinput/ { #------maple input s/\\begin{mapleinput}/\£\\layout Standard\£\£/ s/\\end{mapleinput}// ; s/\\end{maplegroup}// s/\\mapleinline{active}{1d}{// s/}{%}// ; s/}{%\ }// s/ *; */ ; /g ; s/ *: */ : /g s/ : =/:=/g ; s/ : : /::/g s/\\%/%/g ; s/\\{/{/g ; s/\\}/}/g } /mapleplot/{ #------maple plot s/\.eps}\\end{center}\\end{maplegroup}// s/\\begin{center}\\mapleplot{atrick../\£\£\\layout Standard\ \£\\begin_float fig \£\\layout Standard\£\\align center \ \£\\begin_inset Figure size 223 168\£file atrick_&.eps \ height 3 20\£flags 14\£\£\\end_inset \£\ \£\\layout Caption\£\£la_legende_de_la_figure_&\£\\end_float \ \£\\layout Standard\£\£&/ s/\\begin{center}\\mapleplot{atrick//g } /maplelatex/{ #------maple latex s/\\mathrm{Heaviside}(x)/\\hea{x}/g # et quelques autres s/(/\\left(/g ; s/\\left\\left/\\left/g s/)/\\right)/g ; s/\\right\\right/\\right/g s/{%\ \\\[/{%\\[/ ; s/{\ %\ \\\[/{%\\[/ s/^.*{%\\\[/\£\£\\newline \£\\begin_inset Formula \\(\£/ s/\\]\ %\ \}.*$/\\)\£\\end_inset \£/

s/\\mathit/\\mathnormal/g s/{\\displaystyle \\frac/\\mathnormal{ \\frac /g s/{\\begin{array}/\\mathnormal{\\begin{array}/g s/\\mbox/\\mathnormal/g ; s/\\hbox{::}/\\, :: \\,/g s/e\^/\\exp \\mathnormal/g

s/{\\frac {\\partial }{\\partial t}}/ \\dn{}{t}/g s/{\\frac {\\partial ^{2}}{\\partial t^{2}}}/ \\dn{2}{t}/g s/\\\\< &/\\\\ \\, <\\, \&/g ; s/\\\\> &/\\\\ \\, >\\, \&/g s/& < &/\& \\, <\\, \&/g ; s/& > &/\& \\, >\\, \&/g s/\\char//g }

72 20 HTML : LATEX2HTML 20.2 La concurrence : tth

5. Lorsque le package hyperref s’en mêle, les urls sont transcrites par des liens actifs dans les fichiers *.dvi ou *.pdf. Ce package est appelé automatiquement par le package html (et donc la- tex2html est lui aussi concerné). Pour que les liens actifs soient sécables, il faut spécifier a4paper, breaklinks, hypertex comme options du package (les placer dans les options de document- class). 6. Si l’on utilise le driver standard (dvips) au lieu du driver hypertex, breakurls ne fonctionne réellement qu’avec une sortie directe en *.pdf (option pdflatex). Avec une sortie en *.dvi, les urls ne sont coupées qu’aux espaces et aux soulignés. 7. Mise à jour depuis ctan : ftp://cam.ctan.org/tex-archive/macros/latex/contrib/hyperref.zip. Décompresser, donne un répertoire hyperref. Exécuter latex hyperref.ins, qui engendre tout ce qu’il faut (docstrip). Recopier tout cela dans un répertoire accessible par latex. On remarquera que les tests sont exécutés en *.pdf et que les urls sont juste assez petites pour ne pas avoir besoin d’être coupées.  Nécessite kvoptions et un refcount actualisé. 8. Dans le présent document, nous utilisions : \let\weburl\url \DeclareUrlCommand\url{\urlstyle{sf}} \DeclareUrlCommand\code{\urlstyle{tt}} 9. Mais rien n’est jamais vraiment simple. Se reporter au §§8 de latex2html. Cet ensemble de modifications fonctionne très bien, ce pourquoi de nombreux auteurs préfèrent désor- mais se limiter à publier des fichiers *.pdf. Tant pis pour l’encombrement du web et le manque de confort des lecteurs, qui doivent charger un fichier complet avant d’en examiner l’intérêt.

20.2 La concurrence : tth 1. Configurer Netscape (netscape nous broute). (a) Batch à télécharger http://hutchinson.belmont.ma.us/tth/Xfonts.html (b) Il faut "use document-specified fonts".  Comment régler la taille de la police symbol (lorsque l’on change la police proportionnelle) ?  Comment changer la police proportionnelle en corps 16 ? 2. Principe de base : tth n’utilise pas tex. Donc rien ne fonctionne en dehors de ce qui est strictement prévu. 3. On peut prévoir des macros à double détente, les commentaires %%tth: étant pris en compte par tth. 4. Gros avantage : la vitesse et la taille. En échange, on perd beaucoup sur les maths inline. Par exemple, ni vecteurs ni matrices. C’est un compromis.  Problèmes pour les algorithmes. Comment capturer les paramètres optionnels, par exemple \begin{algorithmic}[1], ou bien les commentaires \IF[comment]{condition} ?  Comment indenter en cascade (on dispose de compteurs, mais pas de boucles) ?

20.3 Présentation de latex2html L’idée générale est d’écrire les choses simples en html ordinaire et "les choses trop compliquées" en images. 1. La version 1.70 (2002-2-1) est livrée avec SuSE − 9.3. Les adresses sont /usr/bin/latex2html pour l’exécutable, /usr/share/latex2html pour l’arborescence des fichiers (sauf la config), /usr/lib/latex2html/l2hconf.pm pour la configuration générale et /usr/share/doc/packages/latex2html/ pour la documentation. 2. La version 1.43 (1999-2-8) était livrée avec SuSE−8.1. La documentation se trouvait en /usr/share/doc/packages/l2h/ et arborescence + configuration en /usr/share/latex2html. 3. La page d’accueil http://www.latex2html.org/ date de 2001, mais contient un lien vers http:// saftsack.fs.uni-bayreuth.de/~latex2ht/current/ qui contient la version 2002-11-29 (dans des répertoires datés 2004-10-25. Seul fichier semblant avoir été changé :

73 20.4 Le gang compu$erve 20 HTML : LATEX2HTML

latex2html.pin,v 1.71 2004/01/06 23:49:54 RRM. La maintenance semble avoir été arrêtée. 4. La doc existe sous deux versions : *.html et *.ps. Lorsqu’un serveur web existe sur une machine, il est bien que http://localhost/doc contienne un pointeur vers cette arborescence d’aide.  Pour ce qui est de la documentation imprimable, il faut pouvoir la lire (SuSE − 8.1). Elle se trouve en /usr/share/doc/packages/l2h/manual.ps.gz. Décompresser avec karchiveur. La liste des fichiers reste vide, mais l’extraction se fait quand même. Le nom à fournir est un nom de répertoire, le terminer par une barre. Ce document postscript est mal paginé : il comporte 3 zones numérotées différemment (titre, intro, corps du texte), qu’il est impossible de séparer avec pstops ou avec kghostview pour une impression recto-verso (sur une imprimante mono-face). Contournement : le transférer sous winxx, et l’imprimer avec ghostview (pair/impair).

20.4 Le gang compu$erve Par suite des ahurissantes prétentions du gang compu$erve sur les images *.gif, les images ont par la suite été codées en *.png. Plus de détails à ce sujet http://lpf.ai.mit.edu/Patents/Gif/Gif.html et sur http://dogma.net/DataCompression/GIF.shtml (no more active as of 2016).

20.5 Configuration 1. A peu près tout le barnum doit être modifié peu ou prou, et l’endroit pertinent pour les modi- fications n’apparaît pas souvent du premier coup. Par conséquent, commencer par déplacer les scripts (exécutables perl) latex2html et pstoimg vers /usr/lib/latex2html (et placer un lien dans /usr/bin). Donner les droits d’écriture (garder une copie read only). 2. Documenter les changements, avec des dates et des "# #¶¶¶ ...". Les deux # sont indispensables (le premier for the line to be commented out, le second pour que cette ligne soit conservée lors d’un strip du fichier et le "¶¶¶" sert à retrouver tout cela par un grep ou par le traitement de texte. 3. Il y a quatre niveaux de configuration possible :

config1 Configuration pour le site entier par le fichier l2hconf.pm. Son adresse complète est inscrite dans le script lors de l’installation. Chargé comme module perl (étant dans le chemin). Peut être remplacé par un autre fichier, en donnant son chemin complet dans la variable d’environnement L2HCONFIG. config2 Configuration pour un utilisateur donné par le fichier ~/.latex2html-init (s’il existe). Un exemple est donné Alg. 44. config3 Configuration pour une exécution donnée par le fichier ./.latex2html-init (autrement dit dans le répertoire en cours). config4 Dernier niveau : ce qui est passé en argument dans la ligne de commande. 4. Comme d’habitude : éviter de placer les modifications durables dans le fichier de configuration générale, cela se perd dans les changements de version.

20.6 Réutilisation des images 1. Dans une même page web, il est utile de coder par la même image tous les morceaux identiques. 2. Lors d’une recompilation d’une page, il est plus rapide de ne recalculer que les images ayant changé. 3. Mais les tables ne se codent plus correctement : convertir en images 4. Mais les listings n’ont plus le bon numéro, car ce qui est codé dans l’image est le numéro lors de l’exécution différentielle.

20.7 Les barres noires En résumé, le patch final et définitif, obtenu après divers succès partiels, consiste à remplacer /usr/share/texmf/dvips/misc/alt-rule.pro par un fichier vide. En détail :

74 20 HTML : LATEX2HTML 20.7 Les barres noires

Incl. 44 User-level configuration file $NO_SUBDIR = 0; # (=default) Create a sub-dir to contain all theses pretty files $REUSE = 2; # (=default) reuse all picts : better kill everything if l2h goes wrong $IMAGE_TYPE = "png"; # compuserve sucks

$EXTERNAL_UP_LINK = ’../index.html’; $EXTERNAL_UP_TITLE = ’Return to previous menu’; $INDEX_IN_NAVIGATION = 1; # self-descriptive $AUTO_NAVIGATION = 1; # nav-links at the top of each page. $WORDS_IN_PAGE = 200; # nav-links at bottom too if page exceeds this number of words

$ADDRESS = "\n

douillet\@ensait.fr \n
$address_data[1]
"; $INFO=0 ;

$MAX_SPLIT_DEPTH = 4; # (=default) Stop making separate files at this depth $MAX_LINK_DEPTH = 2; # default=4 Stop showing child nodes at this depth $SHOW_SECTION_NUMBERS = 1;

$ANTI_ALIAS_TEXT=1; # algo $ANTI_ALIAS=0; # figures $FIGURE_SCALE_FACTOR=1.4; # algo # $LATEX_COLOR = "\\pagecolor[gray]{.9}";

1. L’idée générale avons nous dit est d’écrire les choses simples en html ordinaire et "les choses trop compliquées" en images. Le problème se pose alors de l’alignement de ces images par rapport au texte. Il y a donc "ce qui ne passe pas dessous" et qui est aligné "bottom", tandis que "ce qui passe dessous" est aligné "center" et doit donc avoir une taille précise. 2. Entre autres choses, latex2html crée un fichier images.tex qui est compilé en un fichier images.dvi. Chaque image se voit dotée (par images.tex) de deux barres noires, une à gauche et une en bas. Cette adjonction permet de définir la bonne bounding box pour l’image (Alg. 45).

Incl. 45 Création de l’image et de ses barres noires ### from images.tex {\newpage\clearpage % contents=$Norm\left(110,\,14\right)$ \lthtmlinlinemathA{tex2html_wrap_inline81}% $Norm\left(110,\,14\right)$% \lthtmlinlinemathZ Norm (110, 14) \lthtmlcheckvsize\clearpage}

### from the debug file l2hSize :tex2html_wrap_inline81:8.0pt::8.0pt::68.59714pt. [7]

3. Le fichier est alors transmis à dvips par la commande /usr/bin/dvips -S1 -i -Ppdf -E -o/tmp/l2h12445/image ./images.dvi le résultat étant du postscript (-Ppdf) avec une nouvelle page par section (-i), pas plus d’une page par section (-S1), le tout allant dans le répertoire indiqué par -o. On obtient l’image donnée à droite du Alg. 45. 4. Les messages de dvips étant, à notre goût, mal mis en page, nous modifions (line 3909) le script latex2html pour que la commande soit filtrée par : ... 2>&1 | tr -d ’\\n\\r’ | \\ sed -e ’s¶^¶\\n¶ ; s¶\$¶\\n\\n¶ ; s¶(->¶\\n(->¶; s¶(->¶\\n(->¶g’ On obtient alors exactement un message d’une ligne par image. Ce qui s’affiche est la liste des modules utilisés /usr/share/texmf/dvips.

75 20.7 Les barres noires 20 HTML : LATEX2HTML

5. Puis le script pstoimg est appelé sur chaque image. Pour l’image 007, cela donne : /usr/bin/perl /usr/bin/pstoimg -type png -debug -tmp /tmp/l2h12445 -discard -interlace -antialias -depth 1 -scale 1.637 -geometry 68x16 -margins 134,125 -crop abls -transparent -out img7.png /tmp/l2h12445/image007.ps 6. On constate que :

(a) Les valeurs de height, depth, width étant données par le fichier *.log (du TEX spécial lancé par L2H), la relation :

geometry = round(width) × round (height + depth)

(b) La largeur de la boundingbox est exactement 7 points de plus que celle de geometry. Pour ce qui est de la hauteur, l’écart est 4, 5 ou 6 points. (c) margins vaut toujours la même chose, et la bounding box est toujours 133 xxx xxx 668. 7. La première action est la mise au format de l’image *.eps en utilisant gs. L’image fait (geometry) 68x16 et sa bounding box fait 73x23. Multiplié par l’échelle et arrondi à l’entier voisin, cela donne 120x38. 8. Puis l’image est rognée en utilisant pnmcrop, en plusieurs passages. Le principe est que : (a) pnmcrop -sides : rogne le bord blanc sur les quatre côtés (et donc venant en butée sur les barres noires) : top=1, bot=2, left=1, right=2 (b) pnmcrop -bot -sides : enlève la barre noire du bas (il n’y a plus de pixels blancs à cette hauteur-là à cause du rognage précédent) : bot=2 (c) pnmcrop -left -sides : enlève la barre noire de gauche (même remarque) : left=2 (d) Puis on teste s’il reste un tout petit peu de blanc en bas (cas des équations alignées above ???), au quel cas on enlève. (e) En tout, il a été enlevé top=1, bot=4, left=3, right=2 9. Enfin l’image est mise au format *.png en utilisant ppmquant pour mettre l’image au format *.png (avec création d’un fond transparent). 10. En fait (SuSE−10.2) la barre noire de gauche déborde légèrement vers le bas. Le premier rognage rate la deuxième ligne du bas car elle contient un pixel noir, les autres étant blancs. Le deuxième rognage ne fait rien. Le troisième enlève la barre de gauche. Le rognage "shave" enlève la ligne blanche du bas. Et il reste la barre noire du bas, juste au bord. Il faudrait un deuxième rognage "shave"...

Fig. 11 – Avatars et barres noires

11. On voit donc que quatre programmes doivent coopérer : dvips, latex2html, pstoimg et pnmcrop. Lorsque cette coopération est rompue, les barres noires apparaissent. (a) Le diagnostic habituellement porté sur les listes de diffusion est une désynchronisation dans les versions des deux programmes du package. Cette hypothèse repose entre autres sur le fait que les commandes latex2html -v et pstoimg -v donnent des numéros de version... qui n’ont rien à voir entre eux (à part une commune date de release). Hors propos. (b) Pour de vieilles versions, il fallait améliorer la coopération entre pstoimg et pnmcrop en ajoutant quelques "black" en trois bons endroits du script pstoimg.

76 20 HTML : LATEX2HTML 20.8 pictogrammes de navigation

$croparg = ’-bot -black’ ; $croparg = "-$edge -black" ; if(&do_cmd_norename("$PNMCROP -bot -black < $in",$tmp)) 12. Pour la version actuelle, le problème vient de dvips, dont les calculs sont désormais conduits en virgule flottante. Comme la barre de gauche est tracée de haut en bas, une erreur d’arrondi fait que cette barre dépasse au-delà de la barre noire du bas. Il faut donc modifier le fichier /usr/share/texmf/dvips/misc/alt-rule.pro. (a) TVZ affirme qu’il vaut mieux tracer les traits avec stroke plutôt qu’avec fill. Mais il en oublie d’arrondir à l’entier le plus proche. Une modif est donc d’insérer : gsave newpath transform round exch round exch itransform /ruleY X /ruleX X (b) En fait alt-rule.pro est un vieux truc, datant de 1999, qui s’appliquait à dvips_5.85. Comme maintenant (SuSE − 10.2) on en est à dvips_5.95 datant de 2005, le meilleur patch est de remplacer le fichier alt-rule.pro par un fichier vide.

20.8 pictogrammes de navigation Reconfigurer les procédures définissant les barres de navigation dans l’un des fichiers de configuration. Le Alg. 46 donne un exemple de reconfiguration des barres hautes et basses.

Incl. 46 Reconfigurer la barre de navigation ## $ICONSERVER = ’/~douillet/gifs’; %icons = ( ’next_visible_mark’ ,"arrow_right.gif", ’next_inactive_visible_mark’ ,"next_group_m_gr.gif" ); %iconsizes = ( ’up’ ,’WIDTH="40" HEIGHT="40"’, ’next’,’WIDTH="40" HEIGHT="40"’ ); sub bot_navigation_panel { "


\n" . "" . "$CUSTOM_BUTTONS_LEFT $PREVIOUS $UP $NEXT $CONTENTS $INDEX $CUSTOM_BUTTONS_RIGHT" . "\n
" # Line break . ($PREVIOUS_TITLE ? "\n $prev_name: $PREVIOUS_TITLE" : undef) . ($UP_TITLE ? "\n $up_name: $UP_TITLE" : undef) . ($NEXT_TITLE ? "\n $next_name: $NEXT_TITLE" : undef) . ($CONTENTS_LINK ? "\n   $CONTENTS_LINK " : undef) . ($INDEX_LINK ? "\n   $INDEX_LINK " : undef) } sub top_navigation_panel { "" . "$CUSTOM_BUTTONS_LEFT $PREVIOUS $UP $NEXT $CONTENTS $INDEX $CUSTOM_BUTTONS_RIGHT" . "\n
" # Line break . ($PREVIOUS_TITLE ? "\n $prev_name: $PREVIOUS_TITLE" : undef) . ($UP_TITLE ? "\n $up_name: $UP_TITLE" : undef) . ($NEXT_TITLE ? "\n $next_name: $NEXT_TITLE" : undef) . ($CONTENTS_LINK ? "\n   $CONTENTS_LINK " : undef) . ($INDEX_LINK ? "\n   $INDEX_LINK " : undef) . "\n

" }

20.9 Marche à suivre 1. L’objectif est de disposer d’un fichier unique, lisible par les deux interpréteurs latex et la- tex2html. En principe, tout se passe tout seul. Et quand bien même quelque chose irait mal, les commandes \latexonly et \htmlonly permettent de s’adresser à l’un ou l’autre des deux interpréteurs.

77 20.10 Difficultés 20 HTML : LATEX2HTML

2. Mais, dans la pratique, il faut forcer la main dans de nombreuses situations. Ne rien faire à la main. Il faut tout encapsuler dans des fichiers de commande. En particulier, les détails de configuration se règlent par un fichier .latex2html-init placé dans le répertoire courant. Commander tout cela depuis le répertoire fantôme placé dans ~/qublic_bin/azor pour commander les fichiers placés en ~/public_html/azor (éviter les exécutables dans l’arborescence html) 3. Exporter le fichier $nom$version.lyx sous forme de fichier *.tex. Avec KLYX, il y avait le choix du nom de destination et [space][return] permettait de valider un nom par défaut. Avec LYX, ce choix a disparu et la commande [M − B l] fournit $nom$version.lyx. Lorsqu’il y a des fichiers LYX inclus, ils se trouvent exportés aussi (dans leurs répertoires respectifs). Dans ce cas, il est utile de numéroter les copies, plutôt que les originaux. 4. Se placer dans le répertoire destination, et y recopier les fichiers utiles : $nom.tex et ./figures/*.eps. Il convient de raboter le numéro de version, car le nom des sous-répertoires dépend (par défaut) du nom du fichier principal. A la fin du processus, tout renvoyer dans le répertoire $nom attribué au document, de façon à laisser propre le répertoire principal. 5. Quand quelque chose se passe mal, commencer par détruire le répertoire $nom, qui contient les anciennes images (à cause de $REUSE=2) et les fichiers de configuration latex. 6. Rien ne va entre prettyref (Subsection 5.8) et latex2html : recoder toutes les références lors de la recopie des fichiers *.tex. 7. Exécuter (si besoin) BibTEX après un premier passage de LATEX. Pour cela, le batch de commande consulte le fichier $nom.aux. 8. Nous aurions besoin d’une double définition des url, soit :

\def\myurl#1{\latex{\url{#1}}\html{\htmladdnormallink{#1}{#1}}}

Mais alors, sous LYX, les url apparaîtraient sous forme d’un ERT "LyxCode" et non sous la forme efficace d’un encadré spécialisé. Par conséquent, nous utilisons url dans LYX, et nous re-codons les \url{http: en \myurl{http:... et nous introduisons la bonne définition lors de la recopie des fichiers *.tex. Faire la même chose aux fichiers générés par NatBiB. 9. Prévoir deux passages de LATEX (en tout, ou bien après l’exécution de BibTEX) pour générer les tables des matières et les index. Avec les versions récentes de LYX, l’indexation se fait spontané- ment.

20.10 Difficultés

 Situation à étudier : sous konqueror, on a l’impression visuelle du manque d’un espace après les équations. 1. Taille des pages.

$PAPERSIZE=’a4’ {$width = 595 -144; $length= 842-288 } pt $PAPERSIZE=’plouf’ "$_ unknown, using LATEX’s size" 2. Sainte Ursule a décidé que la taille des pages A4 serait 15.92 cm × 19.54 cm. Par conséquent, l’utilisation d’encadrés de taille supérieure engendre un "encadré vide correspondant à un saut de page". Bilan, toutes les images sont décalées d’un cran. Contournement : s¶length= 842¶length= 1191¶ qui modifie la description de la page A4 pour lui donner la hauteur d’une page A3 (en fait 42 cm ÷ 2.54 (in/cm) × 72 (pt/in) donne 1190, mais on veut pouvoir faire de la transcription inverse). 3. Le chat est coupé en morceaux.

Ligne 920 : print "Running $cmd > $out\n" ;

permet de voir la commande qui est en cours. Il y a un crop qui ne se fait pas bien. Et ???

 La présence d’un $ dans un encadré gris "url" plante la traduction.  les paragraphes LyxCode (indentés ou non) sont imprimés en double interligne. Pour supprimer ce double interligne, on peut les séparer par des retours requis. Mais cela n’a pas d’effet dans la visionneuse dvi... On constate que le paragraphe LyxCode engendre des tags

dont un avec un espace requis (anormal), tandis que le line_break engendre un tag
unique (normal).

78 21 ARCHIVAGE 20.11 Guerre des quotes

20.11 Guerre des quotes Description de la fameuse guerre des quotes (SuSE − 6.1). Sainte Ursule, qui prie pour nous, n’aime pas les quotes mixtes: il ne peut y avoir que des citations ouvrantes et des citations fermantes (et des tailleurs pour hommes ou bien pour femmes). Donc toute "double quote" est LYX-reconvertie en "ouvrez-les quotes" (c’est à dire "grave-grave") ou "fermez-les-quotes" (c’est à dire "zaigu-zaigu"). Tant pis pour les infidèles qui prétendent utiliser des "quotequotes" dans un programme informatique. D’ailleurs le clavier permet tout juste d’introduire le caractère maudit (ctrl-"). La compilation usuelle lyx-tex-dvi-ps se passe sans incidents (majeurs), mais la compilation lyx-tex- html laisse des scories désagréables. On a en effet les transcriptions suivantes :

quoi caractère code lyx recode tex recode html quote a gauche ‘ ‘ ‘ ‘ quote à droite ’ ’ ’ ’ citation "(open) \begin_inset Quotes eld " " \end_inset citation "(close) \begin_inset Quotes erd " " \end_inset citation " " \char‘\"{} &#;‘[ulm] anti-slash \ \backslash \char‘\\{} &#;‘[nl]

Il est donc nécessaire de réécrire les "quotquotes" par une commande sed portant sur le fichier *.tex. Pendant qu’on y est, on recode les backslash en un diacritique inutilisé (Aacute) pour qu’ils passent au travers (le codage par $\backslash$ produit un bitmap et pas un \...). Il faut évidemment modifier latex2html en conséquence. Voici donc script pour contourner tout cela : # script sed_html (before an html compil) s/\\char‘\\"{}/"/g s/\\char‘\\\\{}/\\’A/g

Ces embrouilles semblent avoir été réglées avec la livraison suivante SuSE − 6.2.

21 Archivage 21.1 Méthode 21.2 Fichiers à sauvegarder

 /etc/printcap  /etc/XF86Config  /root et en particulier z root/bin, /root/doc, /root/.kde

21.3 Questions quant à la sauvegarde

 comment avoir la liste des paquetages installés

21.4 Batch : mk_arc (principe)

ARC=arc04 mount /zip 2>null cd / echo "------archivage des fichiers ------"$ARC mkdir /zip/$ARC cp -frP /etc/fstab /zip/$ARC 2>null cp -frP /etc/printcap /zip/$ARC 2>null cp -frP /etc/XF86Config /zip/$ARC 2>null cp -frP /var/X11R6/sax/config/MonitorData /zip/$ARC 2>null cp -frP /opt/kde/share/mimelnk /zip/$ARC 2>null cp -frP /opt/kde/share/applnk /zip/$ARC 2>null cp -frP /opt/kde/share/doc/HTML/en/kmuser/ /zip/$ARC 2>null

79 22 TABLETTE

cp -frP /root/bin /zip/$ARC 2>null cp -frP /root/docs /zip/$ARC 2>null cp -frP /root/\.kde /zip/$ARC 2>null cp -frP $ipse/.kde /zip/$ARC 2>null cp -frP $ipse/docs /zip/$ARC 2>null cp -frP $ipse/public_html /zip/$ARC 2>null ls /zip/$ARC/* echo "------"

22 Tablette 22.1 Mise à jour paramètres . general . à propos: accepter mise à jour auto il y a lors un truc à accepter téléchargement mise à jour logicielle

80 RÉFÉRENCES RÉFÉRENCES

Références

Apache. Apache mpm common directives. In Apache HTTP Server Version 2.2 Documentation (The Apache Software Fundation) (2007). URL http://httpd.apache.org/docs/2.2/mod/mpm_common. html. Atkinson, Kevin. Aspell’s future (2011). URL http://lists.gnu.org/archive/html/aspell-devel/ 2011-09/msg00000.html. Corker R., Holly S. and Ellis R. Uncertainty and forecast precision. Int. J. of Forecasting, vol. 2, no. 1, 51–69 (1986). Douillet P. and Rabenasolo B. How robust is a newsboy model ? In Proceedings of IMACS05, the 17th IMACS World Congress Scientific Computation, Applied Mathematics and Simulation, pp. T1–I–45– 0168 (IMACS, July 11-15 2005, Paris (France)) (2005). Microsoft. Key benefits of the i/o apic. In Windows Hardware Developer Central, p. 4p. (Microsoft Corporation) (2001). URL http://www.microsoft.com/whdc/system/sysperf/IO-APIC.mspx. Sallet G. Initiation Scilab (Université de Metz) (2005), 139p pp. URL http://www.math.univ-metz. fr/~sallet/Scilab_intro_book.pdf. SDB. No hard disks detected on the promise controller. In Support Data Base (Open Suse) (2006). URL http://en.opensuse.org/SDB:No_Hard_Disks_Detected_on_the_Promise_Controller. Wiki Contributors. Serial ata (2010). URL http://en.wikipedia.org/wiki/Serial_ATA. Xu X. and Hopp W. Dynamic pricing and inventory control: The value of demand lear- ning (2004). URL http://users.iems.nwu.edu/~hopp/working papers/Dynamic_Pricing_and_ Inventory_Control.pdf. Ycart B. Démarrer en Scilab (IMAG, Informatique et Mathématiques Appliquées, Grenoble) (2001), 55p. pp. URL http://ljk.imag.fr/membres/Bernard.Ycart/polys/demarre_scilab/demarre_ scilab.ps.

81