<?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="http://geekographie.maieul.net/spip.php?id_rubrique=27&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>XeLaTeX et Latexmk</title>
		<link>http://geekographie.maieul.net/206</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/206</guid>
		<dc:date>2017-01-19T20:53:03Z</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 version 4.52 de Latexmk vient de sortir. Elle int&#232;gre directement le support de XeLaTeX. Ceci ne facilite pas que la cr&#233;ation d'un fichier de configuration, mais permet de gagner un temps substantiel lors de la compilation. Explications. Rappel&#160;: ce qu'est Latexmk La compilation compl&#232;te d'un document LaTeX suit en g&#233;n&#233;ral les &#233;tapes suivantes&#160;: compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX compilation Biber compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX encore une compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX pour s'assurer que tous les liens soient&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="http://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;La version 4.52 de &lt;code&gt;Latexmk&lt;/code&gt; vient de sortir. Elle int&#232;gre directement le support de XeLaTeX. Ceci ne facilite pas que la cr&#233;ation d'un fichier de configuration, mais permet de gagner un temps substantiel lors de la compilation. Explications.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Rappel&#160;: ce qu'est &lt;code&gt;Latexmk&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;La compilation compl&#232;te d'un document LaTeX suit en g&#233;n&#233;ral les &#233;tapes suivantes&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX&lt;/li&gt;&lt;li&gt; compilation Biber&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;Ou BibTeX si vous &#234;tes de l'ancienne &#233;cole&#8230; mais dans ce cas vous ne lisez (&#8230;)&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&lt;/li&gt;&lt;li&gt; compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX&lt;/li&gt;&lt;li&gt; encore une compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX pour s'assurer que tous les liens soient corrects et que la table des mati&#232;res soit bien positionn&#233;e.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cependant, il faut parfois plus de compilation, parfois moins, parfois il faut compiler deux fois avec Biber&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;Si vous utilisez mon package pour g&#233;rer les manuscrits avec BibLaTeX&#034; id=&#034;nh2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.
Or, il est difficile de d&#233;terminer &#224; l'avance le nombre de compilations &#224; ex&#233;cuter.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Latexmk&lt;/code&gt; est un logiciel qui permet d'automatiser le processus sans se soucier du nombre de compilations. Pour se faire, &lt;code&gt;Latexmk&lt;/code&gt; lance d'abord une compilation (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, puis regarde les fichiers interm&#233;diaires produits (&lt;code&gt;.aux&lt;/code&gt;, &lt;code&gt;.bcf&lt;/code&gt; etc) et lance alors les scripts tels que Biber, puis &#224; nouveau (X&lt;sup class=&#034;typo_exposants&#034;&gt;e&lt;/sup&gt;)LaTeX, jusqu'&#224; ce que le contenu des fichiers interm&#233;diaires soit stabilis&#233;. On est ainsi assur&#233; d'ex&#233;cuter exactement toutes les compilations n&#233;cessaires, mais pas une de plus.&lt;/p&gt;
&lt;p&gt;En outre, &lt;code&gt;Latexmk&lt;/code&gt; indique en fin de compilation les clefs bibliographiques ind&#233;finies et les labels probl&#233;matiques.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Compatibilit&#233; avec XeLaTeX&lt;/h2&gt;
&lt;p&gt;Les anciennes versions de &lt;code&gt;latexmk&lt;/code&gt; ne prenaient pas directement XeLaTeX en charge, et &lt;a href='http://geekographie.maieul.net/79' class=&#034;spip_in&#034;&gt;il fallait ajouter des lignes dans le fichier de configuration &lt;code&gt;latexmkr&lt;/code&gt; les lignes suivantes&lt;/a&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;$pdflatex = &#034;xelatex %&#034;; $pdf_mode = &#034;1&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La nouvelle version de &lt;code&gt;latexmk&lt;/code&gt; prend directement en charge XeLaTeX. Pour ce faire, il suffit&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit de lancer &lt;code&gt;latexmk&lt;/code&gt; avec l'option &lt;code&gt;-xelatex&lt;/code&gt;&#160;: &lt;code&gt;latexmk -xelatex fichier.tex&lt;/code&gt;&lt;/li&gt;&lt;li&gt; soit de mettre dans son fichier de configuration &lt;code&gt;latexmkrc&lt;/code&gt; (&#224; c&#244;t&#233; des sources &#224; compiler) ou &lt;code&gt;.latexmkrc&lt;/code&gt; (dans son r&#233;pertoire utilisateur&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;Ou ailleurs sur l'ordinateur pour partage entre plusieurs utilisateurs, voir (&#8230;)&#034; id=&#034;nh3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;) la ligne suivant&#160;:
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;$pdf_mode = 5;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Avantage de la compatibilit&#233; directe avec &lt;code&gt;XeLaTeX&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#192; quoi bon &#233;crire un article juste pour expliquer une petite modification de configuration&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; me diriez-vous. En r&#233;alit&#233;, le fait que &lt;code&gt;latexmk&lt;/code&gt; g&#232;re directement XeLaTeX permet d'acc&#233;l&#233;rer la compilation.&lt;/p&gt;
&lt;p&gt;En effet, lorsque vous compilez avec XeLaTeX, celui-ci ne produit pas directement un fichier &lt;code&gt;.pdf&lt;/code&gt;, mais passe par un fichier &lt;code&gt;.xdy&lt;/code&gt; interm&#233;diaire, qu'il transforme ensuite en fichier &lt;code&gt;.pdf&lt;/code&gt;.
Le processus est transparent pour l'utilisateur, si bien que vous ne voyez pas ce fichier interm&#233;diaire.
Mais si vous consultez le fichier de log de XeLaTeX, vous devrez trouver la ligne suivante&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;File: l3xdvidpfmx.def 2016/08/18 v6679 L3 Experimental driver: xdvipdfmx&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cette ligne indique que le programme &lt;code&gt;xdvipdfmx&lt;/code&gt; est appel&#233; pour convertir les &lt;code&gt;.xdy&lt;/code&gt; en &lt;code&gt;.pdf&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Cette transformation est toutefois chronophage. C'est pourquoi, lorsque &lt;code&gt;Latexmk&lt;/code&gt; est configur&#233; pour utiliser &lt;code&gt;XeLaTeX&lt;/code&gt;, il appelle ce dernier de sorte &#224; ne produire que le fichier &lt;code&gt;.xdy&lt;/code&gt;. Puis, lorsque les fichiers interm&#233;diaires sont stabilis&#233;s, &lt;code&gt;latexmk&lt;/code&gt; appelle &lt;code&gt;xdvipdfmx&lt;/code&gt; pour produire le &lt;code&gt;.pdf&lt;/code&gt; final &#224; partir du &lt;code&gt;.xdy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ainsi, si vous avez trois compilations XeLaTeX, &lt;code&gt;xdvipdfmx&lt;/code&gt; n'est appel&#233; qu'une fois, et non trois fois. Autant de temps et d'&#233;nergie gagn&#233;s.&lt;/p&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;Ou BibTeX si vous &#234;tes de l'ancienne &#233;cole&#8230; mais dans ce cas vous ne lisez pas mon blog&#8230;&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;Si vous utilisez &lt;a href='http://geekographie.maieul.net/134' class=&#034;spip_in&#034;&gt;mon package pour g&#233;rer les manuscrits avec BibLaTeX&lt;/a&gt;&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;Ou ailleurs sur l'ordinateur pour partage entre plusieurs utilisateurs, voir la documentation de &lt;code&gt;latexmk&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Premier pas avec xindy</title>
		<link>http://geekographie.maieul.net/170</link>
		<guid isPermaLink="true">http://geekographie.maieul.net/170</guid>
		<dc:date>2015-04-14T06:30:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Apr&#232;s avoir pr&#233;sent&#233; rapidement ce qu'&#233;tait xindy et pourquoi je recommande son utilisation, faisons les premiers pas avec xindy. Pour le moment nous nous contenterons d'index un un document en fran&#231;ais, avec deux index. Pr&#233;r&#233;quis Je suppose que vous utilisez XeLaTeX et non pas LaTeX ou pdfLaTeX. Je suppose &#233;galement que xindy est install&#233; sur votre ordinateur&#160;: Si vous utilisez TeXLive2014 ou MacTeX 2014, c'est d&#233;j&#224; le cas. Si vous utilisez MikTeX, il existe un tutoriel pour&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Apr&#232;s avoir &lt;a href='http://geekographie.maieul.net/169' class=&#034;spip_in&#034;&gt;pr&#233;sent&#233; rapidement ce qu'&#233;tait &lt;code&gt;xindy&lt;/code&gt;&lt;/a&gt; et pourquoi je recommande son utilisation, faisons les premiers pas avec &lt;code&gt;xindy&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pour le moment nous nous contenterons d'index un un document en fran&#231;ais, avec deux index.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Pr&#233;r&#233;quis&lt;/h2&gt;
&lt;p&gt;Je suppose que vous utilisez XeLaTeX et non pas LaTeX ou pdfLaTeX&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;Pour ceux qui ne savent pas pourquoi je conseille XeLaTeX, lisez (&#8230;)&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Je suppose &#233;galement que xindy est install&#233; sur votre ordinateur&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Si vous utilisez TeXLive2014 ou MacTeX 2014, c'est d&#233;j&#224; le cas.&lt;/li&gt;&lt;li&gt; Si vous utilisez MikTeX, il existe &lt;a href=&#034;http://tex.stackexchange.com/a/71168/7712&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;un tutoriel pour l'installation&lt;/a&gt;. Je n'ai pas encore test&#233;, donc tout retour est le bienvenu.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Enfin, je suppose que vous savez comment ex&#233;cuter LaTeX et ses auxiliaires en lignes de commandes. Si vous ne savez pas&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; lisez l'annexe de mon livre (obligatoire pour les gens sous windows)&lt;/li&gt;&lt;li&gt; ou bien lisez l'article &lt;a href='http://geekographie.maieul.net/50' class=&#034;spip_in&#034;&gt;LaTeX en ligne de commande&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Fichier d'exemple minimal&lt;/h2&gt;
&lt;p&gt;Nous prendrons le fichier suivant&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;Je suppose que vous avez la police Linux Libertine install&#233; sur votre (&#8230;)&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;latex&#034;&gt;&lt;code&gt;% &#192; compiler avec XeLaTeX \documentclass{article} \usepackage{fontspec} \setmainfont{Linux Libertine O} \usepackage{setspace} \onehalfspacing \usepackage[xindy]{indextools}%On pr&#233;cise qu'on veut utiliser xindy \makeindex[name=animal,title=Animaux] \makeindex[name=plante,title=Plantes] \begin{document} On va parler de chats\index[animal]{chat}, de tortues\index[animal]{tortue}, d'&#233;l&#232;phant\index[animal]{&#233;l&#232;phant}, et soyons fou, d'&#233;lans\index[animal]{&#233;lan}. \newpage Ces animaux aiment bien les carottes\index[plante]{carotte}, les an&#233;mones\index[plante]{an&#233;mone}, les anth&#233;mis\index[plante]{anth&#233;mis}, et les courgette\index[plante]{courgettes}. \newpage \printindex[animal] \printindex[plante] \end{document}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Premi&#232;re compilation XeLaTeX&lt;/h2&gt;
&lt;p&gt;Compilez le document avec XeLaTeX. Vous obtenez deux&#160;pages, mais pas d'index.
En revanche, vous obtenez le message suivant dans les messages de compilation&lt;/p&gt;
&lt;p&gt;&lt;quotation&gt;
Package indextools Warning&#160;: Remember to run xelatex again after calling
(indextools) &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;texindy animal.idx'. Package indextools Warning: Remember to run xelatex again after calling (indextools)&lt;/code&gt;texindy plante.idx'.
&lt;/quotation&gt;&lt;/p&gt;
&lt;p&gt;Tout est dit&#160;: alors que indextools peut ex&#233;cuter &lt;code&gt;makeindex&lt;/code&gt; automatiquement, ce n'est pas le cas pour &lt;code&gt;xindy&lt;/code&gt;&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;En fait c'est possible mais en appelant XeLaTeX avec certains options (&#8230;)&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Qu'importe, nous allons le faire maintenant.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Deux ex&#233;cutions de &lt;code&gt;texindy&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;On constate que deux fichiers &lt;code&gt;.idx&lt;/code&gt; ont &#233;t&#233; produits&#160;: &lt;code&gt;animal.idx&lt;/code&gt; et &lt;code&gt;plante.idx&lt;/code&gt;. Nous allons donc les transformer en appelant &lt;code&gt;texindy&lt;/code&gt;, le &lt;code&gt;xindy&lt;/code&gt; pr&#233;configur&#233; pour LaTeX.&lt;/p&gt;
&lt;p&gt;En ligne de commande donc, frapper (le &lt;code&gt;$&lt;/code&gt; repr&#233;sente l'invite de commande)&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;$ texindy -L french -I xelatex animal.idx $ texindy -L french -I xelatex plante.idx&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Explication de code&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;texindy&lt;/code&gt; le programme que l'on appelle.&lt;/li&gt;&lt;li&gt; &lt;code&gt;-L french&lt;/code&gt; utilisez les r&#232;gles de classement alphab&#233;tique du fran&#231;ais. Chaque langue &#224; ses propres r&#232;gles de classement&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;Par exemple&#160;: en fran&#231;ais on classe d'abord sans tenir compte des accents, (&#8230;)&#034; id=&#034;nh2-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;, c'est pourquoi il est n&#233;cessaire de pr&#233;ciser la langue. Et si vous utilisez plusieurs langues dans votre index&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;? On y viendra plus tard.&lt;/li&gt;&lt;li&gt; &lt;code&gt;-I xelatex&lt;/code&gt; indique que nous chargeons les r&#232;gles propres &#224; &lt;code&gt;xelatex&lt;/code&gt;, autrement dit que nos fichiers &lt;code&gt;.idx&lt;/code&gt; sont encod&#233;s en &lt;span class=&#034;caps&#034;&gt;UTF8&lt;/span&gt;.
Apr&#232;s chaque retour chariot, vous obtiendrez normalement des messages de compilation &lt;code&gt;xindy&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Vous devriez d&#233;sormais avoir deux fichiers&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;; &lt;code&gt;animal.ind&lt;/code&gt; et &lt;code&gt;plante.ind&lt;/code&gt;.
Si oui, nous pouvons passer &#224; la deuxi&#232;me compilation XeLaTeX&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Deuxi&#232;me compilation XeLaTeX&lt;/h2&gt;
&lt;p&gt;Maintenant, recompilez votre fichier &lt;code&gt;.tex&lt;/code&gt; avec XeLaTeX.&lt;/p&gt;
&lt;p&gt;Vous devriez obtenir le fichier ci-dessous.&lt;/p&gt;
&lt;div class='spip_document_170 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;27&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='http://geekographie.maieul.net/IMG/pdf/premier-pas-xindy.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 11.6 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='http://geekographie.maieul.net/local/cache-vignettes/L64xH64/pdf-b8aed.svg?1772795065' width='64' height='64' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-170 '&gt;&lt;strong&gt;Premiers index avec xindy
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;On trouve bien les deux index, tri&#233;e selon l'ordre alphab&#233;tique, avec les lettres accentu&#233;es bien plac&#233;es.&lt;/p&gt;
&lt;p&gt;On constate cependant une diff&#233;rence avec une compilation classique avec &lt;code&gt;makeindex&lt;/code&gt;&#160;: les mots sont regroup&#233;s par lettres initiales, avec l'initiale affich&#233;e en d&#233;but de chaque groupe. Nous verrons plus tard comment modifier l'apparence de cette initiale, voire la supprimer, lorsque nous aborderons la personnalisation de l'apparence de l'index.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Automatiser les compilations&#160;: &lt;code&gt;latexmk&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a id=&#034;latexmk&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Par rapport &#224; l'utilisation d'&lt;code&gt;indextools&lt;/code&gt; + &lt;code&gt;imakeidx&lt;/code&gt; nous avons perdu un peu au change&#160;: il faut proc&#233;der &#224; une compilation suppl&#233;mentaire de XeLaTeX, et en plus il faut compiler chaque fichier &lt;code&gt;.idx&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En g&#233;n&#233;rale la deuxi&#232;me, voire la troisi&#232;me, compilation XeLaTeX est n&#233;cessaire, notamment si on a une bibliographie, des renvois internes et une tables des mati&#232;res. Cependant, il serait plus simple d'avoir un outil qui nous fasse toutes ces compilation d'un coup.&lt;/p&gt;
&lt;p&gt;Cet outil, c'est &lt;a href='http://geekographie.maieul.net/79' class=&#034;spip_in&#034;&gt;&lt;code&gt;latexmk&lt;/code&gt;, dont j'ai d&#233;j&#224; parl&#233;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il nous suffit donc de mettre dans le fichier de configuration &lt;code&gt;latexmkrc&lt;/code&gt; ou &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=&#034;bash&#034;&gt;&lt;code&gt;$pdflatex = &#034;xelatex %S&#034;; $pdf_mode = &#034;1&#034;; $makeindex = &#034;texindy -L french -I xelatex %S&#034;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour qu'en ligne de commande un&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;$ latexmk fichier.tex&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;fasse toutes les compilations.&lt;/p&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;Pour ceux qui ne savent pas pourquoi je conseille XeLaTeX, &lt;a href='http://geekographie.maieul.net/95' class=&#034;spip_in&#034;&gt;lisez l'introduction de mon livre&lt;/a&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;Je suppose que vous avez la police Linux Libertine install&#233; sur votre ordinateur. Si ce n'est pas le cas, vous pouvez commenter la ligne correspondante, cela ne change rien au probl&#232;me, c'est juste plus esth&#233;tique.&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;En fait c'est possible mais en appelant XeLaTeX avec certains options sp&#233;cifiques. Peut importe, nous allons apprendre ici &#224; utiliser latexmk pour simplifier.&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;Par exemple&#160;: en fran&#231;ais on classe d'abord sans tenir compte des accents, puis on les int&#232;gre dans un second classement&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;; en espagnol la ligature &#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;ll&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; est class&#233;e comme une lettre &#224; part, entre &#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;l&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; et &#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;m&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;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Introduction &#224; Latexmk pour faciliter les compilations</title>
		<link>http://geekographie.maieul.net/79</link>
		<guid isPermaLink="true">http://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="http://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='http://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;#nb3-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Ce genre de cas est normalement rarissime.&#034; id=&#034;nh3-1&#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;#nb3-2&#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;nh3-2&#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-3&#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-3&#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='http://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;#nb3-4&#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;nh3-4&#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;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;Ce genre de cas est normalement rarissime.&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;&lt;a href='http://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-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;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;nb3-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh3-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 3-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>http://geekographie.maieul.net/58</link>
		<guid isPermaLink="true">http://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="http://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='http://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;#nb4-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;nh4-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;#nb4-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;nh4-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;#nb4-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Pour mieux comprendre, vous pouvez essayer sans le .&#034; id=&#034;nh4-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;#nb4-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;nh4-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;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;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;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;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;nb4-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-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;nb4-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh4-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 4-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>



</channel>

</rss>
