<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Geekographie Ma&#239;eulesque</title>
	<link>https://geekographie.maieul.net/</link>
	<description>Ce site est consacr&#233; &#224; quelques unes des mes geekeries. J'y donne des conseils, des r&#233;flexions, sur les logiciels et les langages que je connais ou que j'apprends.
J'y parle notamment de l'usage de LaTeX en sciences humaines et sociales, en particulier pour la gestion de la bibliographie.
Le contenu peut &#234;tre sous la forme d'articles d&#233;taill&#233;s ou de simples notes.
L'ensemble du contenu est, sauf pr&#233;cision contraire, sous licence Cr&#233;ative Commons Paternit&#233;-Partage des Conditions Initiales &#224; l'identique France.</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://geekographie.maieul.net/spip.php?id_rubrique=25&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Introduction &#224; Latexmk pour faciliter les compilations</title>
		<link>https://geekographie.maieul.net/79</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/79</guid>
		<dc:date>2012-01-13T00:19:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Suites aux remarques sur mon article &#224; propos de make, j'ai me suis pench&#233; sur latexmk. C'est effectivement bien plus simple que makefile, m&#234;me s'il y a encore quelques besoins auxquels je n'arrive pas &#224; r&#233;pondre. Voici un petit tutoriel sur la mani&#232;re de l'utiliser, notamment avec XeLaTeX Principe Quand on compile un document .tex il faut en g&#233;n&#233;ral proc&#233;der &#224; plusieurs compilations&#160;: avec LaTeX, puis avec biber, puis avec makexindex etc. Latexmk permet d'automatiser ces&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Compilation-en-serie" rel="directory"&gt;Compilation en s&#233;rie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Suites &lt;a href='https://geekographie.maieul.net/58#forum123' class=&#034;spip_in&#034;&gt;aux remarques sur mon article &#224; propos de &lt;code&gt;make&lt;/code&gt;&lt;/a&gt;, j'ai me suis pench&#233; sur &lt;code&gt;latexmk&lt;/code&gt;. C'est effectivement bien plus simple que &lt;code&gt;makefile&lt;/code&gt;, m&#234;me s'il y a encore quelques besoins auxquels je n'arrive pas &#224; r&#233;pondre.&lt;/p&gt;
&lt;p&gt;Voici un petit tutoriel sur la mani&#232;re de l'utiliser, notamment avec XeLaTeX&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe&lt;/h2&gt;
&lt;p&gt;Quand on compile un document &lt;code&gt;.tex&lt;/code&gt; il faut en g&#233;n&#233;ral proc&#233;der &#224; plusieurs compilations&#160;: avec &lt;code&gt;LaTeX&lt;/code&gt;, puis avec &lt;code&gt;biber&lt;/code&gt;, puis avec &lt;code&gt;makexindex&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Latexmk&lt;/code&gt; permet d'automatiser ces compilations, en v&#233;rifiant &#224; la suite de chaque compilation qu'elle doit &#234;tre la prochaine compilation, et en regardant les fichiers auxiliaires (&lt;code&gt;.aux&lt;/code&gt;, &lt;code&gt;.bbl&lt;/code&gt; etc) pour voir s'ils changent entre les compilations, et donc s'il est n&#233;cessaire de proc&#233;der &#224; plusieurs compilations.&lt;/p&gt;
&lt;p&gt;Prenons un exemple simple&#160;: un fichier &lt;code&gt;.tex&lt;/code&gt; sans bibliographie et sans index, mais avec un table des mati&#232;res.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;latexmk&lt;/code&gt; va d'abord compiler avec LaTeX. Puis il va voir qu'un fichier &lt;code&gt;.toc&lt;/code&gt; est produit, ainsi qu'un fichier &lt;code&gt;.aux&lt;/code&gt;. Il va alors proc&#233;der &#224; une seconde compilation, et regarder si ces fichiers ont chang&#233;. Si il y a eu un changement, il va proc&#233;der &#224; une troisi&#232;me compilation et v&#233;rifier si ces fichiers ont chang&#233;. etc. Ainsi jusqu'&#224; cinq fois (par d&#233;faut). Si au bout de la cinqui&#232;me s&#233;rie de compilation les fichiers ont encore chang&#233;, il consid&#232;re qu'il est impossible d'avoir des fichiers stables&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Ce genre de cas est normalement rarissime.&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Maintenant imaginons que j'ajoute une bibliographie. &lt;code&gt;Latexmk&lt;/code&gt; va pouvoir analyser &#224; la premi&#232;re compilation LaTeX, en fonction des fichiers produits (le fichier &lt;code&gt;bbl&lt;/code&gt; notamment) qu'il existe une biblio, qui r&#233;clame &lt;code&gt;Biber&lt;/code&gt; (ou &lt;code&gt;bibtex&lt;/code&gt;). Et il va automatiquement compiler avec &lt;code&gt;biber&lt;/code&gt; (ou &lt;code&gt;bibtex&lt;/code&gt; apr&#232;s la premi&#232;re compilation LaTeX, puis il proc&#233;dera &#224; une seconde compilation LaTeX etc.&lt;/p&gt;
&lt;p&gt;Autrement dit, Latxmk est capable de mettre en &#339;uvre les s&#233;ries successives de compilation, et surtout de savoir quand il est n&#233;cessaire de proc&#233;der &#224; une nouvelle compilation.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Mise en &#339;uvre&#160;: 1&lt;sup class=&#034;typo_exposants&#034;&gt;er&lt;/sup&gt; essai&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Latexmk&lt;/code&gt; est install&#233; par d&#233;faut avec les diff&#233;rentes distributions LaTeX. Donc rien &#224; installer.&lt;/p&gt;
&lt;p&gt;Avec son Terminal, se rendre dans le dossier o&#249; se trouvent les fichiers &#224; compiler&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour apprendre &#224; se servir de son Terminal sur Mac&#160;; et pour Windows, pour (&#8230;)&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Puis frapper &lt;code&gt;latexmk nom_du_fichier_a_compiler&lt;/code&gt;. &lt;code&gt;latexmk&lt;/code&gt; se lance et vous indique qu'il tente une premi&#232;re compilation&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Run number 1 of rule 'latex'&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Il nous indique donc qu'il essaie de lancer la r&#232;gle &lt;code&gt;latex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Qu'est-ce qu'une r&#232;gle&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Une r&#232;gle, c'est une suite d'op&#233;ration n&#233;cessaire &#224; la transformation d'un fichier &lt;code&gt;a&lt;/code&gt;, par exemple un fichier &lt;code&gt;.tex&lt;/code&gt; en un fichier &lt;code&gt;b&lt;/code&gt;, par exemple un fichier &lt;code&gt;.pdf&lt;/code&gt;, ou en l'occurrence un fichier &lt;code&gt;.dvi&lt;/code&gt; (&lt;a href=&#034;#dvi&#034; class=&#034;spip_ancre&#034;&gt;Je parles de ce fichier un peu plus bas&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;En l'occurence, la r&#232;gle dit qu'il faut lancer le programme &lt;code&gt;latex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;C'est ce qui se passe. Et l&#224;, patatra si vous utilisez XeLaTeX, avec le package &lt;code&gt;fontspec&lt;/code&gt; vous obtenez un joli message &lt;code&gt; The fontspec package requires either XeTeX or LuaTeX to function.&lt;/code&gt; et la compilation s'arr&#234;te l&#224;.&lt;/p&gt;
&lt;p&gt;Logique&#160;: &lt;code&gt;latexmk&lt;/code&gt; a essay&#233; de compiler avec &lt;code&gt;latex&lt;/code&gt; alors qu'il faudrait compiler &#224; &lt;code&gt;xelatex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il va donc falloir modifier le fonctionnement de &lt;code&gt;latexmk&lt;/code&gt;, gr&#226;ce &#224; un fichier nomm&#233; &lt;code&gt;latexmkrc&lt;/code&gt; &#224; mettre dans le m&#234;me dossier que les sources &#224; compiler&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il est possible de mettre ce fichier ailleurs, pour pouvoir appliquer un (&#8230;)&#034; id=&#034;nh3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Syntaxe de base du fichier &lt;code&gt;latexmkrc&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Un tel fichier se compose d'une s&#233;rie de couple &lt;code&gt;propri&#233;t&#233;&lt;/code&gt; / &lt;code&gt;valeur&lt;/code&gt;. Chaque couple s'&#233;crit une ligne avec la syntaxe suivante&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code class='perl'&gt;$propriet&#233; = &#034;valeur&#034;;&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Premi&#232;re propri&#233;t&#233;&#160;: demander un fichier &lt;code&gt;pdf&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a id=&#034;dvi&#034;&gt;&lt;/a&gt;Il faut savoir qu'historiquement, LaTeX ne produisait pas de fichier &lt;code&gt;.pdf&lt;/code&gt;, mais des fichiers &lt;code&gt;.dvi&lt;/code&gt;. Ce n'est qu'avec le compilateur &lt;code&gt;pdflatex&lt;/code&gt; qu'il a commenc&#233; &#224; produire des fichiers &lt;code&gt;.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La r&#232;gle &lt;code&gt;latex&lt;/code&gt; cherche &#224; produire des &lt;code&gt;.dvi&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Aujourd'hui, le &lt;code&gt;.pdf&lt;/code&gt; est plus pertinent que le &lt;code&gt;.dvi&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nous allons donc mettre dans le fichier &lt;code&gt;latexmkrc&lt;/code&gt; une demande de produire des fichiers &lt;code&gt;.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M&#234;me si vous utilisez XeLaTeX, cette demande est tr&#232;s importante. En effet XeLaTeX ne produit pas des &lt;code&gt;dvi&lt;/code&gt; mais que des &lt;code&gt;pdf&lt;/code&gt;. Or si vous laisser les r&#233;glages par d&#233;faut, &lt;code&gt;latexmk&lt;/code&gt; cherche &#224; produire des &lt;code&gt;dvi&lt;/code&gt; et n'y arrive pas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cette propri&#233;t&#233;, c'est &lt;code&gt;pdf_mode&lt;/code&gt;. Si elle est &#233;gale &#224; &lt;code&gt;1&lt;/code&gt;, alors &lt;code&gt;latexmk&lt;/code&gt; va chercher &#224; g&#233;n&#233;rer un &lt;code&gt;pdf&lt;/code&gt; en utilisant la r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour changer cette propri&#233;t&#233;, nous ajoutons donc &#224; notre fichier &lt;code&gt;latexmkrc&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$pdf_mode = &#034;1&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par ailleurs, par d&#233;faut cette r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt; utilise le script &lt;code&gt;pdflatex&lt;/code&gt; et non pas &lt;code&gt;xelatex&lt;/code&gt;. Nous allons donc modifier cette r&#232;gle, par la propri&#233;t&#233; &lt;code&gt;pdflatex&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Deuxi&#232;me propri&#233;t&#233;&#160;: utiliser XeLaTeX&lt;/h2&gt;
&lt;p&gt;La propri&#233;t&#233; &lt;code&gt;pdflatex&lt;/code&gt; re&#231;oit le nom de la commande &#224; ex&#233;cuter. En l'occurrence, pour nous il s'agit de &lt;code&gt;xelatex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nous &#233;crivons donc dans notre fichier&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;perl&#034;&gt;&lt;code&gt;$pdflatex = &#034;xelatex&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On peut d&#233;sormais lancer &lt;code&gt;latexmk&lt;/code&gt; sans avoir d'erreur de compilation, puisque celui-ci va appeler la commande &lt;code&gt;xelatex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par ailleurs, si une bibliographie est ajout&#233;e, &lt;code&gt;latexmk&lt;/code&gt; va lancer automatiquement &lt;code&gt;biber&lt;/code&gt; ou &lt;code&gt;biblatex&lt;/code&gt;, en choisissant lui-m&#234;me le bon programme.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Troisi&#232;me propri&#233;t&#233;&#160;: la g&#233;n&#233;ration de l'index&lt;/h2&gt;
&lt;p&gt;Lorsque &lt;code&gt;latexmk&lt;/code&gt; d&#233;tecte la cr&#233;ation d'un fichier &lt;code&gt;.idx&lt;/code&gt;, il sait qu'il s'agit d'un fichier d'index &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;brut&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, et qu'il faut le compiler pour obtenir des fichiers &lt;code&gt;format&#233;s&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Par d&#233;faut, il utilise &lt;code&gt;makeindex&lt;/code&gt;. Mais on peut souhaiter utiliser &lt;code&gt;splitindex&lt;/code&gt; lorsqu'on utilise le package &lt;code&gt;splitidx&lt;/code&gt; pour avoir plusieurs index.&lt;/p&gt;
&lt;p&gt;Il faut dire d'utiliser &lt;code&gt;splitindex&lt;/code&gt; modifier la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Nous pouvons donc mettre&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$makeindex = &#034;splitindex&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Seulement cela pose un probl&#232;me.&lt;/p&gt;
&lt;p&gt;En effet, si j'ai un fichier &lt;code&gt;principal.idx&lt;/code&gt;, &lt;code&gt;latexmk&lt;/code&gt; s'attend que la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt; produise un fichier &lt;code&gt;principal.ind&lt;/code&gt;. Or &lt;code&gt;splitindex&lt;/code&gt; produit des fichiers &lt;code&gt;principal-xxx.ind&lt;/code&gt;, mais pas de fichier &lt;code&gt;principal.ind&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;La solution consiste &#224; dire que la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt; ex&#233;cute plusieurs commandes&#160;: &lt;code&gt;makeindex&lt;/code&gt; puis &lt;code&gt;splitindex&lt;/code&gt;. Pour cela, il suffit de s&#233;parer chaque commande par un point virgule. Ce qui donne&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$makeindex = &#034;makeindex;splitindex;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Probl&#232;me&#160;: dans ce cas la commande &lt;code&gt;makeindex&lt;/code&gt; ne vas pas s'ex&#233;cuter sur le bon fichier. Il est donc n&#233;c&#233;ssaire de pr&#233;ciser le fichier sur lequel executer &lt;code&gt;makeindex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour cela, on utilise la notation &lt;code&gt;%S&lt;/code&gt;, qui correspond au fichier source. Par exemple, dans le cas de la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt;, il s'agit du fichier &lt;code&gt;.idx&lt;/code&gt;, mais dans le cas de la r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt; il s'agit du fichier &lt;code&gt;.tex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Donc cela donne&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$makeindex = &#034;makeindex %S;splitindex %S;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Et si j'utilise le script de gestion de l'index des sources primaires&lt;/h2&gt;
&lt;p&gt;&lt;a href='https://geekographie.maieul.net/57' class=&#034;spip_in&#034;&gt;Ce script que j'utilise pour la gestion de l'index des sources primaires&lt;/a&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Et qui vient d'&#234;tre am&#233;lior&#233;.&#034; id=&#034;nh4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt; n&#233;cessite d'&#234;tre appel&#233; &lt;code&gt;avant&lt;/code&gt; &lt;code&gt;splitindex&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Je serais tent&#233; de faire&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$makeindex = &#034;python index.py;makeindex %S;splitindex %S;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Seulement voil&#224;, cela entra&#238;ne &lt;code&gt;latexmk&lt;/code&gt; &#224; tourner en rond. Pourquoi&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Si je ne me trompe la raison est la suivante. Lorsque &lt;code&gt;latexmk&lt;/code&gt; applique une r&#232;gle, il regarde le contenu des fichiers g&#233;n&#233;r&#233;s par cette r&#232;gle &lt;i&gt;avant&lt;/i&gt; qu'elle soit appliqu&#233;e et &lt;code&gt;apr&#232;s&lt;/code&gt; son application. Si ces fichiers ont chang&#233;, il consid&#232;re qu'il faudra r&#233;appliquer la r&#232;gle.&lt;/p&gt;
&lt;p&gt;Donc dans mon cas cela donne (en sautant les r&#232;gles &lt;code&gt;biber&lt;/code&gt;)&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; R&#232;gle &lt;code&gt;pdflatex&lt;/code&gt;, compilation avec &lt;code&gt;xelatex&lt;/code&gt;, cr&#233;ation du fichier &lt;code&gt;.idx&lt;/code&gt;&lt;/li&gt;&lt;li&gt; R&#232;gle &lt;code&gt;makeindex&lt;/code&gt;, modification du fichier &lt;code&gt;.idx&lt;/code&gt;, via mon script python.&lt;/li&gt;&lt;li&gt; R&#232;gle &lt;code&gt;pdflatex&lt;/code&gt; qui modifie &#224; nouveau le fichier &lt;code&gt;.idx&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le fichier &lt;code&gt;.idx&lt;/code&gt; a &#233;t&#233; transform&#233; &#224; l'issue de la deuxi&#232;me application de la r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt;, puisqu'on est pass&#233; d'un fichier qui avait subit le script python &#224; un fichier qui ne l'a pas subit.&lt;/p&gt;
&lt;p&gt;Donc &lt;code&gt;latexmk&lt;/code&gt; se dit qu'il faudra r&#233;appliquer la r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt;, mais aussi la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt;, puisque celle-ci cherche &#224; transformer les fichiers &lt;code&gt;.idx&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et comme la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt; modifie, si j'y int&#232;gre le script python, le fichier &lt;code&gt;.idx&lt;/code&gt;, on tourne en rond.&lt;/p&gt;
&lt;p&gt;La solution est donc de mettre le script python n'ont pas au d&#233;but de la r&#232;gle &lt;code&gt;makeindex&lt;/code&gt; mais &#224; la fin de la r&#232;gle &lt;code&gt;pdflatex&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Donc non pas&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$makeindex = &#034;python index.py;makeindex;splitindex;&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;mais&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$pdflatex = &#034;xelatex %S;python index.py&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;R&#233;capitulatif&lt;/h2&gt;
&lt;p&gt;Au final, mon fichier &lt;code&gt;latexmrc&lt;/code&gt; contient les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='perl'&gt;&lt;code&gt;$pdflatex = &#034;xelatex %S;python index.py&#034;; $pdf_mode = &#034;1&#034;; $makeindex = 'makeindex %S;splitindex %S;';&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Un plus&#160;: les entr&#233;es bibliographiques ind&#233;finies et les r&#233;f&#233;rences introuvables&lt;/h2&gt;
&lt;p&gt;&#192; la fin de l'ex&#233;cution de &lt;code&gt;latexmk&lt;/code&gt;, celui ci nous indique les entr&#233;es bibliographiques absentes de la base de donn&#233;e et les &lt;code&gt;\label&lt;/code&gt; manquants&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;Latexmk: Citation 'ti' on page 1 undefined Latexmk: Reference `ti' on page i undefined&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;En revanche, il ne mentionne pas les &lt;code&gt;\label&lt;/code&gt; en nombre multiples.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;On peut ex&#233;cuter la commande&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;latexmk -c&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;pour nettoyer les fichiers interm&#233;diaires (&lt;code&gt;.aux&lt;/code&gt;, &lt;code&gt;.ind&lt;/code&gt; etc.)&lt;/p&gt;
&lt;p&gt;Malheureusement je n'ai pas encore trouv&#233; comment faire pour que le nettoyage s'applique aussi aux fichiers&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;.1&lt;/code&gt;,&lt;code&gt;.2&lt;/code&gt; du package &lt;code&gt;ledmac&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;.idx&lt;/code&gt; et &lt;code&gt;.ind&lt;/code&gt; produit par &lt;code&gt;splitindex&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Ce genre de cas est normalement rarissime.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;&lt;a href='https://geekographie.maieul.net/50' class=&#034;spip_in&#034;&gt;Pour apprendre &#224; se servir de son Terminal sur Mac&lt;/a&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; &lt;a href=&#034;http://www.journaldunet.com/developpeur/technos-net/tutoriel-pratique/gerer-windows-en-lignes-de-commande.shtml&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;et pour Windows&lt;/a&gt;, pour les Linuxiens, c'est quasiment comme sur Mac.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Il est possible de mettre ce fichier ailleurs, pour pouvoir appliquer un fonctionnement &#224; l'ensemble des fichiers LaTeX que l'on traite. Voir la documentation de &lt;code&gt;latexmk&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4&#034; class=&#034;spip_note&#034; title=&#034;Notes 4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Et qui vient d'&#234;tre am&#233;lior&#233;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Introduction &#224; make avec (Xe)LaTeX</title>
		<link>https://geekographie.maieul.net/58</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/58</guid>
		<dc:date>2011-08-08T13:42:26Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Le programme make est un outil utilis&#233; par les d&#233;veloppeurs. On peut &#233;galement s'en servir lorsqu'on fait du (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, pour automatiser les compilations. En effet, il est assez courant de devoir faire plusieurs compilations successives, avec diff&#233;rents compilateurs ((X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, SplitIndex, Biber etc.). Ces compilations doivent s'effectuer dans un certain ordre, parfois se r&#233;p&#233;ter (par exemple en cas de variation des ruptures de pages, pour avoir une table des mati&#232;res toujours &#224; jour)&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Compilation-en-serie" rel="directory"&gt;Compilation en s&#233;rie&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le programme make est un outil utilis&#233; par les d&#233;veloppeurs. On peut &#233;galement s'en servir lorsqu'on fait du (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, pour automatiser les compilations.&lt;/p&gt;
&lt;p&gt;En effet, il est assez courant de devoir faire plusieurs compilations successives, avec diff&#233;rents compilateurs ((X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, SplitIndex, Biber etc.). Ces compilations doivent s'effectuer dans un certain ordre, parfois se r&#233;p&#233;ter (par exemple en cas de variation des ruptures de pages, pour avoir une table des mati&#232;res toujours &#224; jour) etc.&lt;/p&gt;
&lt;p&gt;Le risque est grand d'en oublier. C'est pourquoi utiliser &lt;code&gt;make&lt;/code&gt; pour automatiser cela est une bonne id&#233;e. Voici un petit tutoriel &#224; ma sauce. Il vient compl&#233;ter &lt;a href=&#034;http://www.unixgarden.com/index.php/bureautique/makefiles-et-latex-moins-de-compilations-c'est-moins-de-complications&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;celui qui m'a appris &#224; me servir de &lt;code&gt;make&lt;/code&gt;&lt;/a&gt; ainsi qu'un &lt;a href=&#034;http://gl.developpez.com/tutoriel/outil/makefile/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;autre plus g&#233;n&#233;raliste&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Que les puristes me pardonnent&#160;: il y a ici quelques approximations, pour les besoins de la cause.&lt;/p&gt;
&lt;p&gt;On consultera d&#233;sormais l'article sur &lt;a href='https://geekographie.maieul.net/79' class=&#034;spip_in&#034;&gt;LaTeXmk&lt;/a&gt;, qui est plus efficace.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Principe&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Make&lt;/code&gt; est un logiciel qui sert &#224; transformer un ou plusieurs fichiers en un fichier final. Pour ce faire, il va se servir d'un fichier &lt;code&gt;makefile&lt;/code&gt; qui indique le fichier final souhait&#233;, les fichiers sources initiaux et l'ensemble des &#233;tapes n&#233;cessaire &#224; la production du fichier final.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Make&lt;/code&gt; est install&#233; par d&#233;faut sur la plupart des distributions Linux. Sur Mac, il faut installer les outils d&#233;vellopeurs. En revanche son installation est complexe sur Windows.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Premier pas&lt;/h2&gt;
&lt;p&gt;Soit le dossier contenant les fichiers&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;principal.tex&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;principal.bib&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Je souhaite obtenir le fichier &lt;code&gt;principal.pdf&lt;/code&gt; en ex&#233;cutant successivement&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;xelatex principal.tex&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;biber principal&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;xelatex principal.tex&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;xelatex principal.tex&lt;/code&gt; pour avoir un sommaire correspondant &#224; la mise en page finale.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Je vais &#233;crire les lignes suivantes dans un fichier &lt;code&gt;makefile&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Attention, il n'y a pas d'extension&#160;!&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;principal.pdf: principal.tex principal.bib xelatex principal.tex biber principal xelatex principal.tex xelatex principal.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La premi&#232;re ligne indique que le fichier &lt;code&gt;principal.pdf&lt;/code&gt; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;d&#233;pend&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; de &lt;code&gt;principal.tex&lt;/code&gt; et de &lt;code&gt;principal.bib&lt;/code&gt;. Les lignes suivantes, qui doivent commencer par des tabulations, indique les commandes &#224; ex&#233;cuter pour produire le fichier. J'ai cr&#233;&#233; ainsi une r&#232;gle de fabrication, nomm&#233;e &lt;code&gt;principal.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Lorsque dans mon terminal je tape (en &#233;tant situ&#233; dans le r&#233;pertoire en question)&#160;: &lt;code&gt;make principal.pdf&lt;/code&gt;, je vois les diff&#233;rentes compilation se succ&#233;der. &#192; la fin je peux ouvrir mon fichier &lt;code&gt;principal.pdf&lt;/code&gt;.
Si je retape &lt;code&gt;make principal.pdf&lt;/code&gt;, j'obtiens&#160;:
&lt;quotation&gt; make&#160;: `principal.pdf' is up to date. &lt;/quotation&gt;&lt;/p&gt;
&lt;p&gt; En effet, makefile voit que les fichiers principal.tex et principal.bib ont &#233;t&#233; modifi&#233;s plus anciennement que le fichier principal.pdf. Il en conclut que le fichier principal.pdf est &#224; jour.&lt;/p&gt;
&lt;p&gt;En revanche, si je m'amuse &#224; modifier l'un de ces fichier, taper &lt;code&gt;make principal.pdf&lt;/code&gt; me recommencerait le processus de compilation.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;G&#233;n&#233;ralisons&lt;/h2&gt;
&lt;p&gt;Supposons qu'&#224; c&#244;t&#233; de mes deux fichiers, j'ai &#233;galement les fichiers &lt;code&gt;annexe.bib&lt;/code&gt; et &lt;code&gt;annexe.tex&lt;/code&gt; et qu'&#224; partir de cela, je souhaite obtenir un fichier &lt;code&gt;annexe.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Je pourrais m'amuser &#224; cr&#233;er une r&#232;gle pour annexe.pdf. Mais je pourrais tr&#232;s bien fabriquer un r&#232;gle g&#233;n&#233;rique pour les fichiers &lt;code&gt;.pdf&lt;/code&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;%.pdf: %.tex %.bib xelatex $*.tex biber $* xelatex $*.tex xelatex $*.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Dans la description de la r&#232;gle, le &lt;code&gt;%.pdf&lt;/code&gt; signifie &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;n'importe quel fichier finissant par &lt;code&gt;.pdf&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Pour la suite &lt;code&gt;%&lt;/code&gt; signifie &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;la partie variante du nom du fichier&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, autrement dit &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;ce qui se trouve avant le &lt;code&gt;.pdf&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Dans le contenu de la r&#232;gle, le &lt;code&gt;$*&lt;/code&gt; signifie &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;la partie variante du nom du fichier de destination&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Autrement dit, j'ai produit ici l'&#233;quivalent de&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;principal.pdf: principal.tex principal.bib xelatex principal.tex biber principal xelatex principal.tex xelatex principal.tex annexe.pdf: annexe.tex annexe.bib xelatex annexe.tex biber annexe xelatex annexe.tex xelatex annexe.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mais cela pourrait s'&#233;tendre &#224; fichier &lt;code&gt;titi.pdf&lt;/code&gt; d&#233;pendant de &lt;code&gt;titi.tex&lt;/code&gt; et &lt;code&gt;titi.bib&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&#201;videmment mes fichiers cibles peuvent aussi d&#233;pendre de fichiers situ&#233;s dans d'autres dossiers. Chez moi, par exemple, ce sont les fichiers situ&#233;s dans les dossiers &lt;code&gt;contenu&lt;/code&gt; et &lt;code&gt;inclure&lt;/code&gt;. On peut indiquer la d&#233;pendance aux dossiers en indiquant la d&#233;pendance aux fichiers qu'ils contiennent.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;%.pdf: %.tex %.bib contenu/*.tex inclure/*.tex xelatex $*.tex biber $* xelatex $*.tex xelatex $*.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Une r&#232;gle par d&#233;faut&lt;/h2&gt;
&lt;p&gt;Pour le moment, je suis oblig&#233;, si je veux produire les fichiers &lt;code&gt;principal.pdf&lt;/code&gt; et &lt;code&gt;annexe.pdf&lt;/code&gt;, de faire successivement &lt;code&gt;make principal.pdf&lt;/code&gt; et &lt;code&gt;make annexe.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On pourrait vouloir produire ces deux fichiers d'un coup. Pour ce faire je vais cr&#233;er une r&#232;gle sp&#233;ciale nomm&#233;e &lt;code&gt;all&lt;/code&gt;, &lt;strong&gt;que je vais placer en tout premier&lt;/strong&gt;. Comme cette r&#232;gle doit produire ces deux fichiers, je vais lui indique qu'elle n&#233;cessite les fichiers &lt;code&gt;principal.pdf&lt;/code&gt; et &lt;code&gt;annexe.pdf&lt;/code&gt;. Le programme &lt;code&gt;make&lt;/code&gt; ira chercher les r&#232;gles correspondante &#224; la production de ces fichiers.&lt;/p&gt;
&lt;p&gt;Ma r&#232;gle s'&#233;crit dont simplement&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;all:principal.pdf annexe.pdf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Seulement voil&#224;&#160;: imaginons que pour une raison quelconque, j'ai un fichier &lt;code&gt;all&lt;/code&gt; dans mon dossier. Dans ce cas &lt;code&gt;make&lt;/code&gt; je risque d'avoir des conflits. Pour &#233;viter cela, je vais indiquer une r&#232;gle sp&#233;ciale&#160;: &lt;code&gt;.PHONY&lt;/code&gt;. Cette r&#232;gle indique simplement que les fichiers dont elle &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;d&#233;pend&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; n'existent pas, mais qu'il s'agit en r&#233;alit&#233; de nom de r&#232;gle.&lt;/p&gt;
&lt;p&gt;J'&#233;cris donc&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;.PHONY:all&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si je tape &lt;code&gt;make all&lt;/code&gt;, le programme va bien me produire mes deux fichiers &lt;code&gt;principal.pdf&lt;/code&gt; et &lt;code&gt;annexe.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si je met cette r&#232;gle en premier, elle sera ex&#233;cut&#233;e si aucune r&#232;gle n'est appel&#233;e, en frappant simplement &lt;code&gt;make&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Nettoyage&lt;/h2&gt;
&lt;p&gt;La compilation produit tout le temps des fichiers annexes. Il peut &#234;tre utile d'avoir une r&#232;gle pour les supprimer automatiquement. La plupart du temps cette r&#232;gle est appel&#233;e &lt;code&gt;clean&lt;/code&gt;. Comme c'est une r&#232;gle sp&#233;ciale, il faut que je l'ajoute &#224; la r&#232;gle &lt;code&gt;.PHONY&lt;/code&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;.PHONY:all clean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voici un exemple de r&#232;gle &lt;code&gt;clean&lt;/code&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;clean: rm -f *.aux *.bcf *.log *.xml *.toc */*.aux *.bbl *.blg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La commande &lt;code&gt;rm&lt;/code&gt; est une commande terminal qui efface les fichiers list&#233;s. L'option &lt;code&gt;-f&lt;/code&gt; permet de ne pas avoir de message d'erreur si on demande l'effacement de fichiers qui n'existent pas. Ici nous demandons l'effacement des fichiers se finissant&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Le caract&#232;re est un joker signifiant &#171;&#160;cha&#238;ne de taille ind&#233;finie contenant (&#8230;)&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt; par &lt;code&gt;.aux&lt;/code&gt;, &lt;code&gt;.bcf&lt;/code&gt;, &lt;code&gt;.log&lt;/code&gt;, &lt;code&gt;.xml&lt;/code&gt;, &lt;code&gt;.toc&lt;/code&gt;, &lt;code&gt;.bbl&lt;/code&gt;, &lt;code&gt;.blg&lt;/code&gt;, ainsi que les fichiers &lt;code&gt;.aux&lt;/code&gt; se situant dans des dossiers.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Affichage de message finaux&lt;/h2&gt;
&lt;p&gt;Reprenons notre r&#232;gle &lt;code&gt;%.tex&lt;/code&gt;. On aimerait avoir un message, &#224; la toute fin des compilations, nous indiquant s'il y a des r&#233;f&#233;rences bibliographiques inconnues.&lt;/p&gt;
&lt;p&gt;Pour ce faire nous allons lire dans le fichier &lt;code&gt;.log&lt;/code&gt; final, pour rechercher les ligne contenant &lt;code&gt;Citation xxx undefined&lt;/code&gt;. Nous allons pour cela utiliser un programme, g&#233;n&#233;ralement livr&#233; en standard sous MacOs X et Linux, appel&#233; &lt;code&gt;grep&lt;/code&gt;. Ce programme permet de rechercher dans des fichiers du texte, en utilisant des outils de joker, qu'on appelle &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;expression r&#233;guli&#232;re&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;Allons y, cela nous donne&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;%.pdf: %.tex %.bib contenu/*.tex inclure/*.tex xelatex $*.tex biber $* xelatex $*.tex xelatex $*.tex @echo &#034;Citations ind&#233;finies:&#034; @grep -i &#034;Citation .* undefined&#034; $*.log || echo &#034;Aucune&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ligne 7, nous affichons, gr&#226;ce &#224; la commande Terminal &lt;code&gt;toto&lt;/code&gt; le message &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Citations ind&#233;finies&#160;:&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Le &lt;code&gt;@&lt;/code&gt; sert &#224; indiquer &#224; &lt;code&gt;make&lt;/code&gt; de ne pas afficher cette ligne&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour mieux comprendre, vous pouvez essayer sans le .&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Ligne 8, nous ex&#233;cutons la commande &lt;code&gt;grep&lt;/code&gt;. L'option &lt;code&gt;-i&lt;/code&gt; permet de ne pas tenir compte de la casse. Nous recherchons dans le fichier &lt;code&gt;.log&lt;/code&gt; tout les lignes contenant &lt;code&gt;Citation &lt;/code&gt; suivi d'une s&#233;rie de n'importe quel caract&#232;re&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Le , voir les tutoriaux sur les expressions r&#233;guli&#232;res.&#034; id=&#034;nh2-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt; suivi de &lt;code&gt;undefined&lt;/code&gt; et nous les affichons. &#192; d&#233;faut, nous affichons &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Aucune&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.&lt;/p&gt;
&lt;p&gt;&#201;videmment on pourrait &#233;tendre cela aux tests des &#233;tiquettes de r&#233;f&#233;rence crois&#233;s&#160;: pour v&#233;rifier par exemple les &#233;tiquettes en double, ou celles inexistantes.&lt;/p&gt;
&lt;p&gt;Cela donnerait&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;%.pdf: %.tex %.bib contenu/*.tex inclure/*.tex xelatex $*.tex biber $* xelatex $*.tex xelatex $*.tex @echo &#034;Citations ind&#233;finies:&#034; @grep -i &#034;Citation .* undefined&#034; $*.log || echo &#034;Aucune&#034; @echo &#034;Erreurs de label&#034; @egrep -i &#034;multiply defined&#034; $*.log || echo &#034;Pas de label multiple&#034; @egrep -i &#034;Reference .* undefined&#034; $*.log || echo &#034;Pas de label ind&#233;fini&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Le fichier &lt;code&gt;makefile&lt;/code&gt; final&lt;/h2&gt;
&lt;p&gt;Au final, tout cela donne&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;.PHONY:all clean all:principal.pdf annexe.pdf clean: rm -f *.aux *.bcf *.log *.xml *.toc */*.aux *.bbl *.blg %.pdf: %.tex %.bib contenu/*.tex inclure/*.tex xelatex $*.tex biber $* xelatex $*.tex xelatex $*.tex @echo &#034;Citations ind&#233;finies:&#034; @grep -i &#034;Citation .* undefined&#034; $*.log || echo &#034;Aucune&#034; @echo &#034;Erreurs de label&#034; @egrep -i &#034;multiply defined&#034; $*.log || echo &#034;Pas de label multiple&#034; @egrep -i &#034;Reference .* undefined&#034; $*.log || echo &#034;Pas de label ind&#233;fini&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb2-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Attention, il n'y a pas d'extension&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Le caract&#232;re &lt;code&gt;*&lt;/code&gt; est un joker signifiant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;cha&#238;ne de taille ind&#233;finie contenant n'importe quel caract&#232;re&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, je renvoi &#224; n'importe quelle introduction au terminal.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Pour mieux comprendre, vous pouvez essayer sans le &lt;code&gt;@&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Le &lt;code&gt;.*&lt;/code&gt;, voir les &lt;a href=&#034;http://lumadis.be/regex/tuto_pcre.php&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;tutoriaux sur les expressions r&#233;guli&#232;res&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>LaTeX en ligne de commande</title>
		<link>https://geekographie.maieul.net/50</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/50</guid>
		<dc:date>2011-05-22T09:54:29Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;La plupart des &#233;diteurs de textes sp&#233;cialis&#233;s en LaTeX proposent un bouton pour mettre en &#339;uvre les principales commandes de compilation&#160;: LaTeX, XeLaTeX, MakeIndex, BibTeX. Toutefois tr&#232;s rapidement il devient n&#233;cessaire de pouvoir faire plus&#160;: par exemple si l'on dispose de plusieurs index, il faut compiler chaque fichier d'indexation. Pour cela la m&#233;thode la plus simple est de passer par la ligne de commande. Cette article explique comment faire, sous Mac, avec le Terminal. Je ne&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Terminal" rel="directory"&gt;Terminal&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;La plupart des &#233;diteurs de textes sp&#233;cialis&#233;s en LaTeX&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Comme par exemple TeXShop ou TeXmaker.&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; proposent un bouton pour mettre en &#339;uvre les principales commandes de compilation&#160;: LaTeX, XeLaTeX, MakeIndex, BibTeX.&lt;/p&gt;
&lt;p&gt;Toutefois tr&#232;s rapidement il devient n&#233;cessaire de pouvoir faire plus&#160;: par exemple si l'on dispose de plusieurs index, il faut compiler chaque fichier d'indexation.&lt;/p&gt;
&lt;p&gt;Pour cela la m&#233;thode la plus simple est de passer par la ligne de commande. Cette article explique comment faire, sous Mac, avec le Terminal. Je ne connais ni Linux ni Windows, donc je ne peux dire&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;M&#234;me si je pourrais chercher.&#034; id=&#034;nh3-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Il ne vise donc pas &#224; pr&#233;senter comment se servir du Terminal, mais &#224; montrer ce qui est n&#233;cessaire pour se servir de LaTeX avec le Terminal.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Qu'est-ce que le Terminal&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;Le Terminal est un logiciel qui permet de taper des commandes&#160;: il s'agit (sommairement) de cha&#238;nes de caract&#232;res qui vont ex&#233;cut&#233; des scripts sur l'ordinateur.&lt;/p&gt;
&lt;p&gt;Dans le terminal on peut donc taper des commandes.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Naviguer dans le Terminal&#160;: la commande &lt;code&gt;cd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;La premi&#232;re chose n&#233;cessaire &#224; l'utilisation de LaTeX avec le Terminal est de se rendre dans le dossier o&#249; se situe le fichier .tex &#224; compiler.&lt;/p&gt;
&lt;p&gt;Pour ce faire il faut utiliser la commande &lt;code&gt;cd&lt;/code&gt;. Elle permet de se d&#233;placer dans l'arborescence des dossiers. La syntaxe est simple &lt;code&gt;cd chemin_du_fichier&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le chemin peut s'exprimer&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; de mani&#232;re absolue en en mettant un &lt;code&gt;/&lt;/code&gt; en d&#233;but&#160;: par exemple&#160;:&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;/Users/maieul/documents&lt;/code&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; de mani&#232;re relative au dossier courant en ne mettant pas de &lt;code&gt;/&lt;/code&gt; au d&#233;but. Par exemple, si je veux me d&#233;placer dans le dossier B du dossier A du dossier courant&#160;:&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;cd A/B&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On peut &#233;galement utiliser le signe &lt;code&gt;~&lt;/code&gt; pour d&#233;signer le dossier de d&#233;part&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb3-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Le dossier avec une maison dans laquelle se trouve vos dossiers Documents etc.&#034; id=&#034;nh3-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;. Deux points de suite signifient que l'on remonte dans l'arborescence&#160;: &lt;code&gt;cd ..&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Toutefois on peut aussi simplement taper &lt;code&gt;cd&lt;/code&gt; puis glisser/d&#233;poser un dossier dans le terminal&#160;: celui-ci &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;frappera&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; automatiquement le chemin.&lt;/p&gt;
&lt;p&gt;Il suffit alors de frapper sur la touche &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;retour&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; pour changer de r&#233;pertoire&#160;:&lt;/p&gt;
&lt;p&gt;Exemple&#160;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;cd ~/Documents/master/memoire&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Les diff&#233;rentes compilations&lt;/h2&gt;
&lt;p&gt;On peut alors lancer les diff&#233;rentes compilations depuis le terminal&#160;:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX du fichier principal&lt;/strong&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;latex fichier.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou bien si on utilise XeLaTeX&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;xelatex fichier.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Compilation de la bibliographie&lt;/strong&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;bibtex fichier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;ou bien si &lt;a href='https://geekographie.maieul.net/spip.php?page=mot&amp;id_mot=31'&gt;on utilise Biber&lt;/a&gt;, ce que je recommande&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;biber fichier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Notez bien l'absence de d'extension&#160;: les commandes &lt;code&gt;bibtex&lt;/code&gt; et &lt;code&gt;biber&lt;/code&gt; vont rep&#233;rer automatiquement les bons fichiers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Compilation de l'index&lt;/strong&gt;&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;makeindex fichier.idx&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avec un fichier de style .ist, on peut donner aussi&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;makeindex -s index.ist fichier.idx&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Avec ceci il est donc possible de compiler plusieurs index&#160;: je renvoie aux documentations des packages &lt;code&gt;index&lt;/code&gt; et &lt;code&gt;multind&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Ceci ne fonctionne que si vous avez install&#233; LaTeX via &lt;a href=&#034;http://www.tug.org/mactex/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;TeXMac&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb3-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Comme par exemple TeXShop ou TeXmaker.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;M&#234;me si je pourrais chercher.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb3-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Le dossier avec une maison dans laquelle se trouve vos dossiers Documents etc.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Trouver les fichiers par d&#233;faut</title>
		<link>https://geekographie.maieul.net/42</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/42</guid>
		<dc:date>2011-03-21T10:05:36Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Il peut &#234;tre utile de trouver les fichiers par d&#233;faut LaTeX charg&#233;s par d&#233;faut lors d'une compilation. Pour quoi faire&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? L'int&#233;r&#234;t de trouver les fichiers par d&#233;faut est relativement &#233;vident&#160;: analyser leur code pour &#233;ventuellement apporter des modifications (par exemple&#160;: le style des bibliographies). Ces modifications peuvent se faire de deux mani&#232;res&#160;: soit en reprenant l'int&#233;gralit&#233; du fichier &#224; c&#244;t&#233; de son fichier ma&#238;tre, et en modifiant la ligne qui nous int&#233;resse. Cela n'est pas&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Bugs-et-debugs" rel="directory"&gt;Bugs et debugs&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Il peut &#234;tre utile de trouver les fichiers par d&#233;faut LaTeX charg&#233;s par d&#233;faut lors d'une compilation.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Pour quoi faire&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;?&lt;/h2&gt;
&lt;p&gt;L'int&#233;r&#234;t de trouver les fichiers par d&#233;faut est relativement &#233;vident&#160;: analyser leur code pour &#233;ventuellement apporter des modifications (par exemple&#160;: le style des bibliographies).&lt;/p&gt;
&lt;p&gt;Ces modifications peuvent se faire de deux mani&#232;res&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit en reprenant l'int&#233;gralit&#233; du fichier &#224; c&#244;t&#233; de son fichier ma&#238;tre, et en modifiant la ligne qui nous int&#233;resse. Cela n'est pas recommand&#233; car on ne profite pas ainsi des mises &#224; jour de l'ensemble du fichier.&lt;/li&gt;&lt;li&gt; soit en reprenant les seules commandes / cha&#238;nes de langues / macros qui nous int&#233;ressent.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Comment faire&lt;/h2&gt;
&lt;p&gt;Lors de la compilation d'un fichier LaTeX, un fichier .log est cr&#233;&#233;. Celui-ci liste l'ensemble des fichiers appel&#233;s. C'est donc ce fichier qu'il faut analyser pour trouver le chemin du fichier par d&#233;faut qui nous int&#233;resse.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Un index des sources primaires (2)</title>
		<link>https://geekographie.maieul.net/21</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/21</guid>
		<dc:date>2011-01-14T11:04:44Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Suite de mon pr&#233;c&#233;dent article sur la mani&#232;re de faire un index des sources primaires en LaTex. J'explique comment se servir du script Python que j'ai d&#233;velopp&#233;. [Mise &#224; jour&#160;: j'ai trouv&#233; une solution bien meilleure. En cons&#233;quent, cette contribution est obsol&#232;te.] Utilisation du script&#160;: installation des paquets Python Il faut avoir Python install&#233; sur son ordinateur. Il est livr&#233; en standard sous MacOs, et je pense dans la plupart des distributions Linux. Pour Windows, c'est&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="https://geekographie.maieul.net/Index" rel="directory"&gt;Index&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Suite de &lt;a href='https://geekographie.maieul.net/21' class=&#034;spip_in&#034;&gt;mon pr&#233;c&#233;dent article&lt;/a&gt; sur la mani&#232;re de faire un index des sources primaires en LaTex.&lt;/p&gt;
&lt;p&gt;J'explique comment se servir du script Python que j'ai d&#233;velopp&#233;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour les Pythoniens, j'esp&#232;re avoir mis assez de commentaires dans le fichier.&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;[Mise &#224; jour&#160;: &lt;a href='https://geekographie.maieul.net/28' class=&#034;spip_in&#034;&gt;j'ai trouv&#233; une solution bien meilleure&lt;/a&gt;. En cons&#233;quent, cette contribution est obsol&#232;te.]&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Utilisation du script&#160;: installation des paquets Python&lt;/h2&gt;
&lt;p&gt;Il faut avoir Python install&#233; sur son ordinateur. Il est livr&#233; en standard sous MacOs, et je pense dans la plupart des distributions Linux.&lt;/p&gt;
&lt;p&gt;Pour Windows, c'est par l&#224;&#160;: &lt;a href=&#034;http://www.python.org/download/windows/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://www.python.org/download/windows/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il faut ensuite installer le paquet &lt;a href=&#034;http://pypi.python.org/pypi/zs.bibtex&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;zbibtex&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour ce faire&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; r&#233;cup&#233;rer le fichier .gz, le d&#233;compresser.&lt;/li&gt;&lt;li&gt; avec la console de commande (le Terminal sous MacOs), se rendre dans le dossier correspondant.&lt;/li&gt;&lt;li&gt; taper &lt;code&gt;python setup.py install&lt;/code&gt;, voire &lt;code&gt;sudo python setup.py install&lt;/code&gt; pour avoir les droits d'administrateur.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Bien&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;!&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Utilisation du script&#160;: organisation du fichier &lt;code&gt;.bib&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Le script indexera avec comme entr&#233;e principale l'auteur, et comme entr&#233;e secondaire le titre.&lt;/p&gt;
&lt;p&gt;Pour l'auteur, il prendra la valeur du champ &lt;code&gt;userb&lt;/code&gt; et, &#224; d&#233;faut, celle du champ &lt;code&gt;author&lt;/code&gt;. Pour le titre, il prend le champ &lt;code&gt;indextitle&lt;/code&gt; et, &#224; d&#233;faut, le champ &lt;code&gt;title&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il faut installer le script &lt;code&gt;.py&lt;/code&gt; &#224; c&#244;t&#233; du fichier LaTex source. Ce script ne fonctionne, &#233;videmment, que si vous avez mis en &#339;uvre la premi&#232;re &#233;tape, l'&#233;tape LaTex, d&#233;crite dans mon &lt;a href='https://geekographie.maieul.net/20' class=&#034;spip_in&#034;&gt;article pr&#233;c&#233;dent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Par ailleurs les clefs de r&#233;f&#233;rence bibliographique ne doivent contenir que des caract&#232;res alphanum&#233;riques&#160;: pas de signe de ponctuation, de tirer ou autre. Sinon cela fait planter le script ...&lt;/p&gt;
&lt;p&gt;Enfin votre fichier doit &#234;tre encod&#233; en unicode, et utilis&#233; les accents unicodes, et non pas les pseudo accents LaTex&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb4-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Dans BibDesk c'est une option &#224; cocher dans les pr&#233;f&#233;rences&#034; id=&#034;nh4-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Utilisation du script&#160;: personnalisation des variables&lt;/h2&gt;
&lt;p&gt;Ouvrez le fichier avec un &#233;diteur de texte. Vous trouverez les lignes suivantes.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='python'&gt;&lt;code&gt;#### definition des constante
modification = [('biblio.bib','principal.sox','principal.sod'),('biblio.bib','principal.sex','principal.sed')]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Chaque s&#233;rie entre parenth&#232;ses correspond &#224; un index diff&#233;rent. La premi&#232;re valeur correspond au fichier &lt;code&gt;.bib&lt;/code&gt;. La seconde au fichier produit par la premi&#232;re compilation de LaTex. La troisi&#232;me &#224; celui utilis&#233; par la seconde compilation, et produit par la compilation avec MakeIndex.&lt;/p&gt;
&lt;p&gt;Ainsi, si votre fichier p&#232;re s'appelle &lt;code&gt;main.tex&lt;/code&gt;, que votre fichier de bibliographie s'appelle &lt;code&gt;bibliographie.bib&lt;/code&gt;, et que pour la d&#233;claration des index vous avez mis dans votre en-t&#234;te latex&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='latex'&gt;&lt;code&gt;\usepackage{index}
\makeindex
\newindex{sources}{pmx}{pmd}{Index des sources}
\newindex{secondaires}{bix}{bid}{Index des &#233;tudes}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il faudra que vous mettiez&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='python'&gt;&lt;code&gt;#### definition des constante
modification = [('bibliographie.bib','main.pmx','main.pmd'),('bibliographie.bib','mainbix','main.bid')]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, avec votre invite de commande, apr&#232;s la premi&#232;re compilation LaTex du fichier principal, faite&#160;:&lt;code&gt;python index.py&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cela va lire les fichiers d'index, les modifier pour ins&#233;rer une indexation correcte, puis les compiler avec MakeIndex. Inutile donc de compiler ensuite avec MakeIndex.&lt;/p&gt;
&lt;p&gt;L'insertion sera de la forme&#160;:
&lt;code&gt;\textsc{Nom}, Pr&#233;noms (particule), suffixe!titre&lt;/code&gt;
&lt;strong&gt;Important&lt;/strong&gt;&#160;: en revanche, il sera n&#233;cessaire de passer par cette &#233;tape apr&#232;s chaque compilation LaTex du fichier principal. En effet, chaque compilation remplace le fichier auxiliaire.&lt;/p&gt;
&lt;p&gt;Il vous reste ensuite &#224; recompiler avec LaTex le fichier principal. Et voil&#224;, vous obtiendrez un index des sources, tri&#233; par auteur puis par titre.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;J'ai longtemps h&#233;sit&#233;&#160;: fallait-il classer dans la rubrique LaTex ou dans la rubrique Python&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? Comme cela concernait un besoin LaTexien, j'ai choisi de mettre cela dans la rubrique LaTex.&lt;/p&gt;
&lt;p&gt;Ce script est soumis &#224; la m&#234;me licence que l'ensemble du site, &#224; savoir &lt;a href=&#034;http://creativecommons.org/licenses/by-nc-sa/2.0/fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Creative Common, pas d'utilisation commerciale, paternit&#233;, partage des conditions initiales &#224; l'identique&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb4-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Pour les Pythoniens, j'esp&#232;re avoir mis assez de commentaires dans le fichier.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb4-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Dans BibDesk c'est une option &#224; cocher dans les pr&#233;f&#233;rences&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		
		<enclosure url="https://geekographie.maieul.net/IMG/py/index.py" length="5467" type="application/x-python" />
		

	</item>



</channel>

</rss>
