<?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=3&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>R&#233;cup&#233;rer les pages d'un livre num&#233;ris&#233; en plusieurs images</title>
		<link>https://geekographie.maieul.net/139</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/139</guid>
		<dc:date>2014-05-09T07:34:05Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Certains sites proposent des versions num&#233;ris&#233;es d'anciens livres. Lorsque ce livre m'est n&#233;cessaire pour mon travail, j'ai pris l'habitude de le r&#233;cup&#233;rer en local, pour en avoir une copie. En effet, on n'est jamais certain de la p&#233;rennit&#233; d'une ressource internet. En outre je peux avoir besoin de revenir sur le livre dans un endroit o&#249; je n'ai qu'un acc&#232;s difficile &#224; internet. Cependant ces sites ne permettent pas toujours de t&#233;l&#233;charger l'ensemble des pages du livre en un fichier, mais&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Certains sites proposent des versions num&#233;ris&#233;es d'anciens livres. Lorsque ce livre m'est n&#233;cessaire pour mon travail, j'ai pris l'habitude de le r&#233;cup&#233;rer en local, pour en avoir une copie. En effet, on n'est jamais certain de la p&#233;rennit&#233; d'une ressource internet. En outre je peux avoir besoin de revenir sur le livre dans un endroit o&#249; je n'ai qu'un acc&#232;s difficile &#224; internet.&lt;/p&gt;
&lt;p&gt;Cependant ces sites ne permettent pas toujours de t&#233;l&#233;charger l'ensemble des pages du livre en un fichier, mais offrent simplement de visualiser chaque page une par une. Ce qui implique donc de les t&#233;l&#233;charger une par une, une op&#233;ration fastidieuse et p&#233;nible. J'ai donc &#233;crit un script permettant d'automatiser la chose.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Pr&#233;-requis&lt;/h2&gt;
&lt;p&gt;Vous devez disposer d'une version de python3 install&#233;e sur votre ordinateur. Certains syst&#232;mes d'exploitation sont livr&#233;s avec, mais la plupart du temps ou Python n'est pas install&#233; par d&#233;faut, ou il est install&#233; dans une version 2.x. Si vous ne savez pas si python&#160;3 est install&#233;, &lt;a href=&#034;https://www.python.org/downloads/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;vous pouvez vous rendre sur la page de documentation de Python&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Trouver le mod&#232;le d'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Imaginons que l'on souhaite r&#233;cup&#233;rer les images des folios 1r &#224; 382v du &lt;a href=&#034;http://www.ceec.uni-koeln.de/ceec-cgi/kleioc/0010/exec/pagesma/%22kn28-0001_001.jpg%22/segment/%22body%22&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;manuscrit latin 1 de la Dombibliothek, &#224; Cologne&lt;/a&gt;. Une fois la premi&#232;re image affich&#233;e dans le navigateur, il faut cliquer droit dessus et choisir &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Copier l'adresse de l'image&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Copier l'Url de l'Image&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; ou une formule similaire (cela d&#233;pend de votre navigateur).&lt;/p&gt;
&lt;div class='spip_document_123 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;29&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L454xH526/copierurl-dff41.png?1760459864' width='454' height='526' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-123 '&gt;&lt;strong&gt;Retrouver l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; d'une image
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Vous venez d'ajouter l'adresse de l'image dans votre presse-papier. Il vous faut d&#233;sormais la coller dans un &#233;diteur de texte.&lt;/p&gt;
&lt;p&gt;Dans le cas pr&#233;sent, l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; est&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28-0001/kn28-0001_001.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Parfois affich&#233;e sous la forme plus obscure&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28%2d0001/kn28%2d0001%5f001%2ejpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On constate que le &lt;code&gt;%2&lt;/code&gt; &#233;quivaut &#224; &lt;code&gt;-&lt;/code&gt; et que &lt;code&gt;%5f&lt;/code&gt; &#233;quivaut &#224; &lt;code&gt;_&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il faut proc&#233;der de la m&#234;me mani&#232;re pour la derni&#232;re image. &lt;a href=&#034;http://www.ceec.uni-koeln.de/ceec-cgi/kleioc/0010/exec/pagesma/%22kn28-0001_764.jpg%22/segment/%22body%22&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Dans le cas pr&#233;sent&lt;/a&gt;, on obtient l'url&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28-0001/kn28-0001_764.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Parfois affich&#233;e sous la forme plus obscure&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28%2d0001/kn28%2d0001%5f764%2ejpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;D&#233;terminer les param&#232;tres&lt;/h2&gt;
&lt;p&gt;Dans ce genre de publication en ligne, on constate que les URLs poss&#232;dent des &#233;l&#233;ments invariants et un &#233;l&#233;ment variant, &#224; savoir un nombre. Dans le cas pr&#233;sence, il s'agit du nombre qui suit &lt;code&gt;kn28-0001_&lt;/code&gt;&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; il est &#233;gal &#224; &lt;code&gt;001&lt;/code&gt; pour la premi&#232;re image.&lt;/li&gt;&lt;li&gt; il est &#233;gal &#224; &lt;code&gt;1764&lt;/code&gt; pour la derni&#232;re image.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Notez ces deux num&#233;ros&#160;: le script va parcours l'ensemble des num&#233;ros compris entre eux, inclus.&lt;/p&gt;
&lt;p&gt;Nous modifions l'&lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt;, pour fabriquer une &lt;span class=&#034;caps&#034;&gt;URL&lt;/span&gt; g&#233;n&#233;rique. Nous mettons &#224; la place du num&#233;ro le code suivant &lt;code&gt;{nombre}&lt;/code&gt;. Ce qui donne dans le cas pr&#233;sent&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28-0001/kn28-0001_{nombre}.jpg&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Configuration du script&lt;/h2&gt;
&lt;p&gt;Ayant not&#233; l'ensemble des param&#232;tres, il faut d&#233;sormais configurer le script, apr&#232;s l'avoir t&#233;l&#233;charg&#233;&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;Le script est sous licence GPL3. Il est disponible sur Github.&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;&#160;:&lt;/p&gt;
&lt;div class='spip_document_124 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;56&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href=&#034;https://github.com/maieul/recuperation-images-livre/archive/stable.zip&#034; class=&#034; spip_doc_lien&#034; title='Zip - ' type=&#034;application/zip&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/zip-f045b.svg?1772795703' 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-124 '&gt;&lt;strong&gt;Script de r&#233;cup&#233;ration d'image
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-124 '&gt;Derni&#232;re version stable
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Apr&#232;s avoir d&#233;zipp&#233;, ouvrir le fichier &lt;code&gt;config.py&lt;/code&gt;. Il doit normalement s'ouvrir avec un &#233;diteur python, install&#233; en m&#234;me temps que Python sur votre machine. Actuellement, il contient les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;#les param&#232;tres
##&#160;les + importants
base=&#034;http://babel.hathitrust.org/cgi/imgsrv/image?id=mdp.39015012425404;seq={nombre}&#034;
extension = &#034;.jpg&#034;
min = 1
max = 2
dossier=&#034;Schlumberger1884&#034; ## les secondaires
romain = False
complete = 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Nous n'allons modifier, pour le moment, que les lignes 3 &#224; 7, ainsi que la ligne 11
Chaque param&#232;tre peut &#234;tre&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un cha&#238;ne de caract&#232;res, entre guillemets.&lt;/li&gt;&lt;li&gt; Un nombre entier, sans guilllement&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il faut modifier&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;base&lt;/code&gt;, en mettant l'url g&#233;n&#233;rique que nous avons construit.&lt;/li&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;min&lt;/code&gt;, qui doit contenir le nombre correspondant &#224; notre premi&#232;re image.&lt;/li&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;max&lt;/code&gt; correspondant &#224; notre derni&#232;re image.&lt;/li&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;dossier&lt;/code&gt; contenant le nom du dossier dans lequel nous enregistrons les fichiers.&lt;/li&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;extension&lt;/code&gt; contenant l'extension des fichiers enregistr&#233;s.&lt;/li&gt;&lt;li&gt; le param&#232;tre &lt;code&gt;complete&lt;/code&gt; contenant le nombre total de caract&#232;re pour l'affichage des nombres dans l'url. Dans le cas pr&#233;sent, on voit que la premi&#232;re image a le nombre affich&#233; sous la forme &lt;code&gt;001&lt;/code&gt;&#160;: il y a donc trois nombres.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Notre fichier va donc contenir les lignes suivantes&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;#les param&#232;tres
##&#160;les + importants
base=&#034;http://www.ceec.uni-koeln.de/projekte/CEEC/manuscripts/fit/kn28-0001/kn28-0001_{nombre}.jpg&#034;
extension = &#034;.jpg&#034;
min = 1
max = 764
dossier=&#034;Cologne&#034; ## les secondaires
romain = False
complete = 3&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Ex&#233;cution du script&lt;/h2&gt;
&lt;p&gt;Il nous reste &#224; ex&#233;cuter le script &lt;code&gt;recuperation-images-livre.py&lt;/code&gt;. Pour ce faire, deux solutions s'offrent &#224; nous&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; en ligne de commande, avec le Terminal/l'invite de commande. Une fois dans le dossier du script, frapper&#160;:
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;python3 recuperation-images-livre.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; avec le logiciel &lt;span class=&#034;caps&#034;&gt;IDLE&lt;/span&gt;, livr&#233; avec les installations python, ouvrir le fichier &lt;code&gt;recuperation-images-livre.py&lt;/code&gt;, puis dans le menu &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Run&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, choisir &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Run module&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;.
&lt;div class='spip_document_125 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;37&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L426xH100/idle-5d485.png?1760459864' width='426' height='100' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-125 '&gt;&lt;strong&gt;Ex&#233;cuter un script Python avec &lt;span class=&#034;caps&#034;&gt;IDLE&lt;/span&gt;
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Dans les deux cas, on doit voir d&#233;filer &#224; l'&#233;cran les URLs de chaque image t&#233;l&#233;charg&#233;e, pr&#233;c&#233;d&#233;s du nom du fichier enregistr&#233; sur votre ordinateur.&lt;/p&gt;
&lt;div class='spip_document_126 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;38&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH418/logs-recup-image-376d5.png?1760459864' width='500' height='418' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-126 '&gt;&lt;strong&gt;D&#233;tail de la r&#233;cup&#233;ration des images
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Il ne reste plus qu'&#224; r&#233;cup&#233;rer le dossier.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Param&#232;tre suppl&#233;mentaire&lt;/h2&gt;
&lt;p&gt;Il peut arriver que certains sites proposent des pages num&#233;rot&#233;s en nombres romains minuscules. Dans ce cas, il faut changer la l. 10 du script, en&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;romain = True&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Toutes propositions d'am&#233;lioration est la bienvenue. Merci dans ce cas d'&lt;a href=&#034;https://github.com/maieul/recuperation-images-livre/issues/new&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ouvrir un ticket sur la page github&lt;/a&gt;.&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;Le script est sous licence &lt;span class=&#034;caps&#034;&gt;&lt;span class=&#034;caps&#034;&gt;GPL3&lt;/span&gt;&lt;/span&gt;. &lt;a href=&#034;https://github.com/maieul/recuperation-images-livre/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Il est disponible sur Github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Automatiser la sauvegarde de son site en local</title>
		<link>https://geekographie.maieul.net/132</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/132</guid>
		<dc:date>2013-12-05T23:45:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;En th&#233;orie, un bon h&#233;bergeur est cens&#233; avoir une copie des donn&#233;es dans un autre local, en cas d'accident. Mais par pr&#233;caution, avoir soi-m&#234;me une copie des donn&#233;es de son site sur son ordinateur peut toujours &#234;tre utile, comme le prouve une m&#233;saventure arriv&#233;e &#224; Teddy Payet. Comme c'est une op&#233;ration r&#233;guli&#232;re, autant avoir un script qui permette d'automatiser la t&#226;che. J'en ai cr&#233;&#233; un pour moi, que je vous propose ici. Objectifs Pouvoir r&#233;cup&#233;rer les documents aussi bien via &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; que&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;En th&#233;orie, un bon h&#233;bergeur est cens&#233; avoir une copie des donn&#233;es dans un autre local, en cas d'accident. Mais par pr&#233;caution, avoir soi-m&#234;me une copie des donn&#233;es de son site sur son ordinateur peut toujours &#234;tre utile, comme le prouve une m&#233;saventure arriv&#233;e &#224; &lt;a href=&#034;http://www.teddypayet.com/Mon-absence-de-la-toile-pendant-19&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Teddy Payet&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comme c'est une op&#233;ration r&#233;guli&#232;re, autant avoir un script qui permette d'automatiser la t&#226;che. J'en ai cr&#233;&#233; un pour moi, que je vous propose ici.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Objectifs&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Pouvoir r&#233;cup&#233;rer les documents aussi bien via &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; que via &lt;span class=&#034;caps&#034;&gt;SSH&lt;/span&gt; + clefs publique/priv&#233;e.&lt;/li&gt;&lt;li&gt; Ne r&#233;cup&#233;rer que les documents modifi&#233;s depuis la derni&#232;re r&#233;cup&#233;ration.&lt;/li&gt;&lt;li&gt; Inutile de garder en local un &#233;tat du site &#224; chaque sauvegarde&#160;: on s'appuie sur notre outil de sauvegarde locale.&lt;/li&gt;&lt;li&gt; Pouvoir ajouter facilement un nouveau site &#224; sauvegarder en pr&#233;cisant quels sont les fichiers &#224; sauvegarder.&lt;/li&gt;&lt;li&gt; Pouvoir utiliser le trousseau d'acc&#232;s du syst&#232;me pour stocker les mots de passe &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; Pouvoir r&#233;cup&#233;rer une dump &lt;code&gt;.sql&lt;/code&gt; de la base de donn&#233;es MySql.
&lt;h2 class=&#034;h2&#034;&gt;Outils&lt;/h2&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour remplir les deux premiers objectifs, je me sers de &lt;a href=&#034;https://fr.wikipedia.org/wiki/rsync&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;rsync&lt;/a&gt; et de &lt;a href=&#034;https://fr.wikipedia.org/wiki/lftp&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;lftp&lt;/a&gt;. Le premier est install&#233; sous Mac&#160;&lt;span class=&#034;caps&#034;&gt;OS&lt;/span&gt;&#160;X et a priori sous Linux&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 Windows, je n'en sais fichtre rien.&#034; id=&#034;nh2-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Le second en revanche n'est pas install&#233; sous Mac&#160;Os&#160;X par d&#233;faut. Mais son installation est tr&#232;s simple, pour peu que l'on n'ait pas peur d'ouvrir une fen&#234;tre de terminal&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;De toute fa&#231;on il faudra le faire pour lancer mon script.&#034; id=&#034;nh2-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;D'abord installer &lt;i&gt;brew&lt;/i&gt; si on ne l'a pas d&#233;j&#224; fait. &lt;a href=&#034;http://brew.sh/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Brew&lt;/a&gt; est un programme en ligne de commande qui permet d'installer facilement d'autres programmes en ligne de commande. Dans son terminal, mettre&#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;ruby -e &#034;$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Valider par un retour &#224; la ligne&#160;: le script s'installe. Reste &#224; installer lftp:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;brew install lftp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il me restait &#224; g&#233;rer les autres conditions. J'ai d&#233;cid&#233; d'&#233;crire cela en &lt;a href=&#034;https://fr.wikipedia.org/wiki/python&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;python&lt;/a&gt;, parce que je le connais mieux que &lt;a href=&#034;https://fr.wikipedia.org/wiki/bash&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;bash&lt;/a&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;Auquel je ne comprend rien.&#034; id=&#034;nh2-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt; et que c'est un langage simple mais puissant.&lt;/p&gt;
&lt;p&gt;Python est install&#233; sous Linux et Os&#160;X par d&#233;faut, donc pas de souci. En revanche il faut installer un module compl&#233;mentaire &lt;a href=&#034;https://pypi.python.org/pypi/keyring&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;keyring&lt;/a&gt;, qui permettra de sauvegarder les mots de passe dans le trousseau.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;bash&#034;&gt;&lt;code&gt;sudo easy_install keyring&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Bref, les pr&#233;-requis sont l&#224;, il ne reste plus qu'&#224; passer au script.&lt;/p&gt;
&lt;p&gt;Enfin, pour r&#233;cup&#233;rer le dump de la base de donn&#233;es, j'utilise le plugin spip &lt;a href=&#034;http://contrib.spip.net/Le-plugin-saveauto-sauvegarde-automatique-de-la-base&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;saveauto&lt;/a&gt;, en configurant pour que les sauvegardes soient faites tous les jours dans le dossier &lt;code&gt;tmp/dump&lt;/code&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Installation et configuration du script&lt;/h2&gt;
&lt;p&gt;T&#233;l&#233;charger le zip&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;Ou cloner le projet depuis Github.&#034; id=&#034;nh2-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;, le d&#233;compresser, installer le dossier &#224; l'emplacement de son choix.&lt;/p&gt;
&lt;div class='spip_document_107 spip_document spip_documents spip_document_file spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;46&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href=&#034;https://github.com/maieul/sauvegarde-sites/archive/master.zip&#034; class=&#034; spip_doc_lien&#034; title='Zip - ' type=&#034;application/zip&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/zip-f045b.svg?1772795703' 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-107 '&gt;&lt;strong&gt;Script de sauvegarde
&lt;/strong&gt;&lt;/div&gt; &lt;div class='spip_doc_descriptif crayon document-descriptif-107 '&gt;Derni&#232;re version stable
&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Passons maintenant &#224; la configuration du script. Dans son dossier, &#224; c&#244;t&#233; de &lt;code&gt;sauvegarde-site.py&lt;/code&gt;, cr&#233;er un fichier &lt;code&gt;config.py&lt;/code&gt;, qui contiendra les param&#232;tres du fichier.&lt;/p&gt;
&lt;p&gt;La premi&#232;re ligne contient le chemin absolu vers le dossier o&#249; sera stock&#233; toutes les sauvegardes des sites. Par exemple chez moi&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;dossier = &#034;/Users/maieul/Sites/sauvegarde&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Les lignes suivantes vont contenir les descriptions des sites &#224; sauvegarder, sous la forme&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;sites=[ { parametre pour un site }, { parametres pour un autre site }, etc ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Un param&#232;tre est une &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;clef&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mise entre guillemets, suivi de &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#160;:&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; puis suivi de sa valeur. Soit g&#233;n&#233;ralement une cha&#238;ne entre guillemets, ou &#224; d&#233;faut une liste de cha&#238;ne entre crochets. Chaque param&#232;tre est s&#233;par&#233; du suivant par une virgule.&lt;/p&gt;
&lt;p&gt;Ainsi donc&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;{ &#034;param1&#034; : &#034;valeur 1&#034;, &#034;param2&#034; : &#034;valeur 2&#034;, &#034;param3&#034; : [&#034;valeur3a&#034;,&#034;valeur3b&#034;] }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le script fonctionne avec sept&#160;param&#232;tres&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;&#034;mode&#034;&lt;/code&gt; qui indique comment on r&#233;cup&#232;re les fichiers. Deux valeurs sont possibles &lt;code&gt;&#034;SSH&#034;&lt;/code&gt; ou &lt;code&gt;&#034;FTP&#034;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;login&#034;&lt;/code&gt; qui indique le login du serveur o&#249; l'on r&#233;cup&#232;re les fichiers. Par exemple&#160;: &lt;code&gt;&#034;toto&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;serveur&#034;&lt;/code&gt; qui indique l'adresse du serveur o&#249; l'on r&#233;cup&#232;re les fichiers, par exemple&#160;: &lt;code&gt;&#034;ftp.toto.net&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;base&#034;&lt;/code&gt; qui indique le chemin sur le serveur du dossier o&#249; se trouve le site, par exemple&#160;: &lt;code&gt;&#034;www/sites/toto&#034;&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;recuperation&#034;&lt;/code&gt; qui indique les chemins, depuis la base du site, des dossiers &#224; r&#233;cuperer. Typiquement avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: &lt;code&gt;['IMG','tmp/dump']&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;exclure&#034;&lt;/code&gt; qui indique les dossiers &#224; ne pas r&#233;cup&#233;rer. Typiquement avec &lt;span class=&#034;caps&#034;&gt;SPIP&lt;/span&gt;&#160;: &lt;code&gt;'exclure':['article_PDF','distant','.svn','.ok']&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;dossier&#034;&lt;/code&gt; qui indique dans quel sous-dossier vont &#234;tre rang&#233;s les fichiers r&#233;cup&#233;r&#233;s. Par exemple &lt;code&gt;&#034;toto&#034;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ainsi un fichier &lt;code&gt;config.py&lt;/code&gt; minimum pourra &#234;tre le suivant&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;dossier = &#034;/Users/maieul/Sites/sauvegarde&#034; sites=[ { 'mode':'FTP', 'login':'toto', 'serveur':'ftp.toto.org', 'base':'www/sites/toto', 'recuperation':['IMG','tmp/dump'], 'exclure':['article_PDF','distant','.svn','.ok'], 'dossier':'toto' } ]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;Lancer le script&lt;/h2&gt;
&lt;p&gt;Il ne reste plus qu'&#224; lancer le script via&#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;python chemin-du-fichier-sauvegarde-sites.py&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le script r&#233;cup&#232;re l'ensemble des sites en les mettant chacun dans le dossier correspondant&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; la premi&#232;re fois qu'il rencontre un site &#224; r&#233;cup&#233;rer par ftp, il s'interrompt et vous demande le mot de passe.&lt;/li&gt;&lt;li&gt; les fois suivantes, il ne r&#233;cup&#232;re que les fichiers modifi&#233;s, et, le cas &#233;ch&#233;ant, supprime de la version locale les fichiers supprim&#233;s de la version distante&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb2-5&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Encore une fois, mon script est simple&#160;: pour avoir un historique du site, (&#8230;)&#034; id=&#034;nh2-5&#034;&gt;5&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;li&gt; &#224; la fin, ils vous indique les sites dont la sauvegarde a &#233;chou&#233;. Ils ne vous indique pas plus en d&#233;tails les causes de l'&#233;chec, mais les informations sont indiqu&#233;s plus haut, dans les messages affich&#233;s au cour de l'ex&#233;cution.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour ma part, je lance le script tous les matins en arrivant au travail, et je me suis cr&#233;&#233; un &lt;a href=&#034;http://gvallver.perso.univ-pau.fr/?p=265&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;alias bash&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Limites&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Script non con&#231;u pour Windows. En particulier je me base sur l'hypoth&#232;se que les chemins de fichiers sont indiqu&#233;s avec des &lt;code&gt;/&lt;/code&gt; et non des &lt;code&gt;\&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Si vous demandez &#224; r&#233;cup&#233;rer par &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; un dossier qui n'existe pas, vous r&#233;cup&#233;rez l'ensemble du site.&lt;/li&gt;&lt;li&gt; Si votre mdp &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; a chang&#233;, il vous faut le supprimer dans le trousseau d'acc&#232;s. Il est enregistr&#233; avec un titre sous la forme&#160;: &lt;code&gt;sauvegarde login@serveur&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Ce script est beaucoup plus simple et puissant que mon pr&#233;c&#233;dent, que je n'avais os&#233; publier, m&#234;me si j'en avais donn&#233; &lt;a href='https://geekographie.maieul.net/19' class=&#034;spip_in&#034;&gt;des pr&#233;misses&lt;/a&gt;.&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 Windows, je n'en sais fichtre rien.&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;De toute fa&#231;on il faudra le faire pour lancer mon script.&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;Auquel je ne comprend rien.&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;Ou cloner le projet depuis &lt;a href=&#034;https://github.com/maieul/sauvegarde-sites&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb2-5&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh2-5&#034; class=&#034;spip_note&#034; title=&#034;Notes 2-5&#034; rev=&#034;appendix&#034;&gt;5&lt;/a&gt;] &lt;/span&gt;Encore une fois, mon script est simple&#160;: pour avoir un historique du site, on s'appuiera sur le syst&#232;me de sauvegarde local.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Du Thesaurus Linguae Graecae &#224; LaTeX</title>
		<link>https://geekographie.maieul.net/117</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/117</guid>
		<dc:date>2013-04-29T14:00:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Mon script permettant d'adapter des textes extraits du Thesaurus Linguae Graecae &#224; LaTeX a &#233;t&#233; am&#233;lior&#233; avec l'aide de Annette von &lt;span class=&#034;caps&#034;&gt;STOCKHAUSEN&lt;/span&gt;. Outre des nouvelles fonctionnalit&#233;s, il est d&#233;sormais configurable. Le pr&#233;sent article a pour vocation &#224; devenir la documentation &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;officielle&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; du script &#224; partir de sa version 2.0 [1]. Exemple J'ai extrait du site &lt;span class=&#034;caps&#034;&gt;TLG&lt;/span&gt; le texte suivant [2]&#160;: &#7964;&#954;&#945;&#956;&#949;&#957; &#8001; &#955;&#972;&#947;&#959;&#962;, &#964;&#959;&#8166;&#964;&#959;&#957; &#964;&#8056;&#957; &#952;&#949;&#963;&#960;&#941;&#963;&#953;&#959;&#957; &#954;&#945;&#8054; &#964;&#961;&#953;&#960;&#972;&#952;&#951;&#964;&#959;&#957; &#914;&#945;&#961;&#957;&#940;&#946;&#945;&#957; &#964;&#8056;&#957; &#7936;&#960;&#972;&#963;&#964;&#959;&#955;&#959;&#957; &#7952;&#960;&#8118;&#961;&#945;&#953; &#964;&#959;&#8150;&#962; &#7952;&#947;&#954;&#969;&#956;&#943;&#959;&#953;&#962; &#960;&#959;&#952;&#8182;&#957;,&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Mon &lt;a href='https://geekographie.maieul.net/112' class=&#034;spip_in&#034;&gt;script permettant d'adapter des textes extraits du &lt;i&gt;Thesaurus Linguae Graecae&lt;/i&gt; &#224; LaTeX&lt;/a&gt; a &#233;t&#233; am&#233;lior&#233; avec l'aide de &lt;a href=&#034;https://github.com/pharos-alexandria/tlg2latex&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Annette von &lt;span class=&#034;caps&#034;&gt;STOCKHAUSEN&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Outre des nouvelles fonctionnalit&#233;s, il est d&#233;sormais configurable. Le pr&#233;sent article a pour vocation &#224; devenir la documentation &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;officielle&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; du script &#224; partir de sa version 2.0&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;On nous excusera par cons&#233;quent le caract&#232;re redondant de certaines parties (&#8230;)&#034; id=&#034;nh3-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Exemple&lt;/h2&gt;
&lt;p&gt;J'ai extrait du site &lt;span class=&#034;caps&#034;&gt;TLG&lt;/span&gt; le texte suivant&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;Il s'agit d'un extrait d'une louange &#224; l'ap&#244;tre Barnab&#233;.&#034; id=&#034;nh3-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;text&#034;&gt;&lt;code&gt; &#7964;&#954;&#945;&#956;&#949;&#957; &#8001; &#955;&#972;&#947;&#959;&#962;, &#964;&#959;&#8166;&#964;&#959;&#957; &#964;&#8056;&#957; &#952;&#949;&#963;&#960;&#941;&#963;&#953;&#959;&#957; &#954;&#945;&#8054; &#964;&#961;&#953;&#960;&#972;&#952;&#951;&#964;&#959;&#957;
&#914;&#945;&#961;&#957;&#940;&#946;&#945;&#957; &#964;&#8056;&#957; &#7936;&#960;&#972;&#963;&#964;&#959;&#955;&#959;&#957; &#7952;&#960;&#8118;&#961;&#945;&#953; &#964;&#959;&#8150;&#962; &#7952;&#947;&#954;&#969;&#956;&#943;&#959;&#953;&#962; &#960;&#959;&#952;&#8182;&#957;,
&#954;&#945;&#8054; &#959;&#8020;&#960;&#969; &#7973;&#968;&#945;&#964;&#959; &#964;&#959;&#8166; &#960;&#961;&#959;&#959;&#953;&#956;&#943;&#959;&#965;&#183; &#964;&#959;&#8150;&#962; &#947;&#8048;&#961; &#7952;&#960;&#945;&#943;&#957;&#959;&#953;&#962; &#7936;&#960;&#961;&#972;-
&#963;&#953;&#964;&#959;&#962; &#964;&#965;&#947;&#967;&#940;&#957;&#949;&#953; &#8001; &#952;&#945;&#965;&#956;&#940;&#963;&#953;&#959;&#962;. &#916;&#953;&#8056; &#7936;&#966;&#941;&#957;&#964;&#949;&#962; &#8033;&#962; &#7936;&#957;&#941;&#966;&#953;&#954;&#964;&#959;&#957; (135)
&#964;&#8056;&#957; &#960;&#949;&#961;&#8054; &#964;&#8182;&#957; &#7952;&#947;&#954;&#969;&#956;&#943;&#969;&#957; &#955;&#972;&#947;&#959;&#957;, &#8000;&#955;&#943;&#947;&#945; &#964;&#8182;&#957; &#949;&#7984;&#962; &#7969;&#956;&#8118;&#962;
&#7984;&#972;&#957;&#964;&#969;&#957; &#960;&#949;&#961;&#8054; &#964;&#8134;&#962; &#964;&#959;&#973;&#964;&#959;&#965; &#946;&#953;&#974;&#963;&#949;&#969;&#962; &#954;&#945;&#8054; &#964;&#949;&#955;&#949;&#953;&#974;&#963;&#949;&#969;&#962; &#7956;&#954; &#964;&#949;
&#964;&#959;&#8166; &#931;&#964;&#961;&#969;&#956;&#945;&#964;&#941;&#969;&#962; &#954;&#945;&#8054; &#7952;&#958; &#7953;&#964;&#941;&#961;&#969;&#957; &#7936;&#961;&#967;&#945;&#943;&#969;&#957; &#963;&#965;&#947;&#947;&#961;&#945;&#956;&#956;&#940;&#964;&#969;&#957;
&#960;&#945;&#961;&#945;&#952;&#942;&#963;&#959;&#956;&#945;&#953; &#964;&#8135; &#8017;&#956;&#949;&#964;&#941;&#961;&#8115; &#8001;&#963;&#953;&#972;&#964;&#951;&#964;&#953;, &#954;&#945;&#8054; &#959;&#8021;&#964;&#969; &#964;&#8056; &#960;&#941;&#961;&#945;&#962;
&#7952;&#960;&#953;&#952;&#942;&#963;&#959;&#956;&#949;&#957; &#964;&#8183; &#948;&#953;&#951;&#947;&#942;&#956;&#945;&#964;&#953;, &#960;&#945;&#961;&#945;&#967;&#969;&#961;&#942;&#963;&#945;&#957;&#964;&#949;&#962; &#964;&#8135; &#952;&#949;&#959;&#960;&#957;&#949;&#973;&#963;&#964;&#8179; (140)
&#915;&#961;&#945;&#966;&#8135; &#964;&#959;&#8166; &#7936;&#959;&#953;&#948;&#943;&#956;&#959;&#965; &#964;&#8052;&#957; &#954;&#949;&#966;&#945;&#955;&#8052;&#957; &#956;&#949;&#947;&#945;&#955;&#959;&#960;&#961;&#949;&#960;&#8182;&#962; &#963;&#964;&#949;-
&#966;&#945;&#957;&#8182;&#963;&#945;&#953;&#183; &#966;&#951;&#963;&#8054; &#947;&#940;&#961;&#183; &#8220;&#7982;&#957; &#948;&#8050; &#914;&#945;&#961;&#957;&#940;&#946;&#945;&#962; &#7936;&#957;&#8052;&#961; &#7936;&#947;&#945;&#952;&#8056;&#962; &#954;&#945;&#8054;
&#960;&#955;&#942;&#961;&#951;&#962; &#928;&#957;&#949;&#973;&#956;&#945;&#964;&#959;&#962; &#7937;&#947;&#943;&#959;&#965; &#954;&#945;&#8054; &#960;&#943;&#963;&#964;&#949;&#969;&#962;.&#8221; &#927;&#8023; &#964;&#943; &#7938;&#957; &#947;&#941;&#957;&#959;&#953;&#964;&#959;
&#7988;&#963;&#959;&#957; &#7970; &#960;&#945;&#961;&#945;&#960;&#955;&#942;&#963;&#953;&#959;&#957; &#960;&#974;&#960;&#959;&#964;&#949;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je souhaiterais&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; faire dispara&#238;tre les num&#233;ros de ligne&lt;/li&gt;&lt;li&gt; transformer les guillemets en utilisant la commande &lt;code&gt;\csquotes&lt;/code&gt; &#224; la place.&lt;/li&gt;&lt;li&gt; supprimer les c&#233;sures, puisque LaTeX se charge tout seul d'en mettre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voici le r&#233;sultat souhait&#233;&#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;&#7964;&#954;&#945;&#956;&#949;&#957; &#8001; &#955;&#972;&#947;&#959;&#962;, &#964;&#959;&#8166;&#964;&#959;&#957; &#964;&#8056;&#957; &#952;&#949;&#963;&#960;&#941;&#963;&#953;&#959;&#957; &#954;&#945;&#8054; &#964;&#961;&#953;&#960;&#972;&#952;&#951;&#964;&#959;&#957;
&#914;&#945;&#961;&#957;&#940;&#946;&#945;&#957; &#964;&#8056;&#957; &#7936;&#960;&#972;&#963;&#964;&#959;&#955;&#959;&#957; &#7952;&#960;&#8118;&#961;&#945;&#953; &#964;&#959;&#8150;&#962; &#7952;&#947;&#954;&#969;&#956;&#943;&#959;&#953;&#962; &#960;&#959;&#952;&#8182;&#957;,
&#954;&#945;&#8054; &#959;&#8020;&#960;&#969; &#7973;&#968;&#945;&#964;&#959; &#964;&#959;&#8166; &#960;&#961;&#959;&#959;&#953;&#956;&#943;&#959;&#965;&#183; &#964;&#959;&#8150;&#962; &#947;&#8048;&#961; &#7952;&#960;&#945;&#943;&#957;&#959;&#953;&#962; &#7936;&#960;&#961;&#972;%
&#963;&#953;&#964;&#959;&#962; &#964;&#965;&#947;&#967;&#940;&#957;&#949;&#953; &#8001; &#952;&#945;&#965;&#956;&#940;&#963;&#953;&#959;&#962;. &#916;&#953;&#8056; &#7936;&#966;&#941;&#957;&#964;&#949;&#962; &#8033;&#962; &#7936;&#957;&#941;&#966;&#953;&#954;&#964;&#959;&#957; &#964;&#8056;&#957; &#960;&#949;&#961;&#8054; &#964;&#8182;&#957; &#7952;&#947;&#954;&#969;&#956;&#943;&#969;&#957; &#955;&#972;&#947;&#959;&#957;, &#8000;&#955;&#943;&#947;&#945; &#964;&#8182;&#957; &#949;&#7984;&#962; &#7969;&#956;&#8118;&#962;
&#7984;&#972;&#957;&#964;&#969;&#957; &#960;&#949;&#961;&#8054; &#964;&#8134;&#962; &#964;&#959;&#973;&#964;&#959;&#965; &#946;&#953;&#974;&#963;&#949;&#969;&#962; &#954;&#945;&#8054; &#964;&#949;&#955;&#949;&#953;&#974;&#963;&#949;&#969;&#962; &#7956;&#954; &#964;&#949;
&#964;&#959;&#8166; &#931;&#964;&#961;&#969;&#956;&#945;&#964;&#941;&#969;&#962; &#954;&#945;&#8054; &#7952;&#958; &#7953;&#964;&#941;&#961;&#969;&#957; &#7936;&#961;&#967;&#945;&#943;&#969;&#957; &#963;&#965;&#947;&#947;&#961;&#945;&#956;&#956;&#940;&#964;&#969;&#957;
&#960;&#945;&#961;&#945;&#952;&#942;&#963;&#959;&#956;&#945;&#953; &#964;&#8135; &#8017;&#956;&#949;&#964;&#941;&#961;&#8115; &#8001;&#963;&#953;&#972;&#964;&#951;&#964;&#953;, &#954;&#945;&#8054; &#959;&#8021;&#964;&#969; &#964;&#8056; &#960;&#941;&#961;&#945;&#962;
&#7952;&#960;&#953;&#952;&#942;&#963;&#959;&#956;&#949;&#957; &#964;&#8183; &#948;&#953;&#951;&#947;&#942;&#956;&#945;&#964;&#953;, &#960;&#945;&#961;&#945;&#967;&#969;&#961;&#942;&#963;&#945;&#957;&#964;&#949;&#962; &#964;&#8135; &#952;&#949;&#959;&#960;&#957;&#949;&#973;&#963;&#964;&#8179; &#915;&#961;&#945;&#966;&#8135; &#964;&#959;&#8166; &#7936;&#959;&#953;&#948;&#943;&#956;&#959;&#965; &#964;&#8052;&#957; &#954;&#949;&#966;&#945;&#955;&#8052;&#957; &#956;&#949;&#947;&#945;&#955;&#959;&#960;&#961;&#949;&#960;&#8182;&#962; &#963;&#964;&#949;%
&#966;&#945;&#957;&#8182;&#963;&#945;&#953;&#183; &#966;&#951;&#963;&#8054; &#947;&#940;&#961;&#183; \enquote{&#7982;&#957; &#948;&#8050; &#914;&#945;&#961;&#957;&#940;&#946;&#945;&#962; &#7936;&#957;&#8052;&#961; &#7936;&#947;&#945;&#952;&#8056;&#962; &#954;&#945;&#8054;
&#960;&#955;&#942;&#961;&#951;&#962; &#928;&#957;&#949;&#973;&#956;&#945;&#964;&#959;&#962; &#7937;&#947;&#943;&#959;&#965; &#954;&#945;&#8054; &#960;&#943;&#963;&#964;&#949;&#969;&#962;.} &#927;&#8023; &#964;&#943; &#7938;&#957; &#947;&#941;&#957;&#959;&#953;&#964;&#959;
&#7988;&#963;&#959;&#957; &#7970; &#960;&#945;&#961;&#945;&#960;&#955;&#942;&#963;&#953;&#959;&#957; &#960;&#974;&#960;&#959;&#964;&#949;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je me sert pour cela du script Python joint.&lt;/p&gt;
&lt;div class='spip_document_83 spip_document spip_documents spip_document_file spip_documents_right spip_document_right spip_document_avec_legende' data-legende-len=&#034;45&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href=&#034;https://github.com/maieul/tlg2latex/archive/master.zip&#034; class=&#034; spip_doc_lien&#034; title='Zip - ' type=&#034;application/zip&#034;&gt;&lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L64xH64/zip-f045b.svg?1772795703' 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-83 '&gt;&lt;strong&gt;Derni&#232;re version stable du script TLG2LaTeX
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h2 class=&#034;h2&#034;&gt;Utilisation (tutoriel)&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Dans le &lt;span class=&#034;caps&#034;&gt;TLG&lt;/span&gt;, afficher le texte sans les &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Beta Escape&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (dans la colonne de gauche, le menu d&#233;roulant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Beta Escape&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mis &#224; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;None&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;).&lt;/li&gt;&lt;li&gt; Le copier dans un fichier &lt;code&gt;nom.txt&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Avoir &lt;a href=&#034;http://www.python.org/download/releases/3.0/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Python 3&lt;/a&gt; ou plus install&#233; sur sa machine.&lt;/li&gt;&lt;li&gt; R&#233;cup&#233;rer le zip joint, le d&#233;compresser, et mettre les deux fichiers &lt;code&gt;.py&lt;/code&gt; &#224; c&#244;t&#233; du fichier &lt;code&gt;nom.txt&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Avec &lt;a href='https://geekographie.maieul.net/50' class=&#034;spip_in&#034;&gt;son terminal, se rendre dans le dossier du fichier&lt;/a&gt; et frapper &lt;code&gt;python3 tlg2latex.py nom.txt&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Un fichier &lt;code&gt;normalise_nom.txt&lt;/code&gt; appara&#238;t &#224; c&#244;t&#233;&#160;: il contient le code utilisable dans LaTeX.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Nouvelles fonctionnalit&#233; de la version 2.0&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;Comprend les nouveaut&#233;s de la version 1.1.&#034; id=&#034;nh3-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Possibilit&#233; de configurer le script.&lt;/li&gt;&lt;li&gt; Possibilit&#233; de normaliser un fichier situ&#233; dans un autre dossier.&lt;/li&gt;&lt;li&gt; Gestion des &#233;lisions, pour &#233;viter de confondre les signes d'&#233;lisions avec les guillemets ouvrants.&lt;/li&gt;&lt;li&gt; Prototype de gestion des num&#233;ros de chapitres et de paragraphes.&lt;/li&gt;&lt;li&gt; Possibilit&#233; de normaliser l'&lt;a href='https://geekographie.maieul.net/116' class=&#034;spip_in&#034;&gt;encodage unicode&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; Ajout de jeu de test.&lt;/li&gt;&lt;li&gt; Standardisation du code.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Options de configuration&lt;/h2&gt;
&lt;p&gt;Le fichier de configuration &lt;code&gt;config.py&lt;/code&gt; est &#224; placer &#224; c&#244;t&#233; du script.&lt;/p&gt;
&lt;p&gt;Il se compose de ligne sous la forme&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;'&gt;&lt;code&gt;option = valeur&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'ensemble des options sont list&#233;es dans &lt;code&gt;default.py&lt;/code&gt;. Les valeurs peuvent &#234;tre&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Des cha&#238;nes, mise entre guillemet anglais &lt;code&gt;&#034;cha&#238;ne&#034;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Des tuples, ou listes, selon la syntaxe&#160;: &lt;code&gt;(&#034;cha&#238;ne1&#034;,&#034;cha&#238;ne2&#034;,&#034;cha&#238;ne...&#034;,&#034;cha&#238;nen&#034;)&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Des cha&#238;nes pour remplacement d'expressions r&#233;guli&#232;res&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;Pour comprendre les expression r&#233;guli&#232;res, on pourra lire le tutoriel de la (&#8230;)&#034; id=&#034;nh3-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;, sous la forme&#160;: &lt;cope&gt;r&#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;cha&#238;nes&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Une valeur bool&#233;enne&#160;: &lt;code&gt;False&lt;/code&gt; ou &lt;code&gt;True&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Les options se divisent en deux cat&#233;gories&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Celles pour interpr&#233;ter le fichier en entr&#233;e.&lt;/li&gt;&lt;li&gt; Celles pour r&#233;gler le fichier en sortie.&lt;/li&gt;&lt;/ul&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;caption&gt;Liste des options pour le fichier en entr&#233;e&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id8c18_c0'&gt;Option&lt;/th&gt;&lt;th id='id8c18_c1'&gt;Explication&lt;/th&gt;&lt;th id='id8c18_c2'&gt;Valeur par d&#233;faut&lt;/th&gt;&lt;th id='id8c18_c3'&gt;Introduit dans la version&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;hyphen&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Traits de c&#233;sure&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;(&#034;&#8209;&#034;,&#034;-&#034;)&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;line_number_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour d&#233;coder les num&#233;ros de lignes&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;\([0-9]*\)&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.3. Entre 2.0 et 2.3 &#233;tait &lt;code&gt;line_number&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;ellipsis&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les ellisions&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;(([&#947;&#948;(&#948;&#953;)&#952;&#955;&#956;&#960;&#961;&#964;&#966;(&#7989;&#957;)])&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0. Modifi&#233; en 2.6.&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;begin_quote_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les guillemets ouvrants&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;[&#8216;&#8220;&#171;]&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;end_quote_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les guillemets fermants&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;['&#8221;&#187;]&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;paragraph_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les num&#233;ros de paragraphe&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;\((\w+?)\.\) &#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;chapter_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les num&#233;ros de chapitre&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;(\d+?\.)&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;ndash_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer les tirets demi-cadratins&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;&#8212;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.1&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;begin_insert_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer le d&#233;but des insertions.&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;&lt;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;end_insert_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer la fin des insertions.&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;&gt;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;par_break_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Expression r&#233;guli&#232;re pour rep&#233;rer le d&#233;but des nouveaux paragraphes.&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034;^( )&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;empty_line_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Lignes vides&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;(&#034;&#034;,&#034;\r&#034;,&#034;\n&#034;)&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;before_stanza_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Ligne indiquant un d&#233;but de po&#233;sie.&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034; \n&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id8c18_c0'&gt;&lt;code&gt;after_stanta_r&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c1'&gt;Ligne indiquant une fin de po&#233;sie.&lt;/td&gt;
&lt;td headers='id8c18_c2'&gt;&lt;code&gt;&#034; \n&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id8c18_c3'&gt;2.5&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;table class=&#034;table spip&#034;&gt;
&lt;caption&gt;Liste des options pour le fichier en sortie&lt;/caption&gt;
&lt;thead&gt;&lt;tr class='row_first'&gt;&lt;th id='id3da1_c0'&gt;Option&lt;/th&gt;&lt;th id='id3da1_c1'&gt;Explication&lt;/th&gt;&lt;th id='id3da1_c2'&gt;Valeur par d&#233;faut&lt;/th&gt;&lt;th id='id3da1_c3'&gt;Introduit dans la version&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;begin_quote_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Guillemets ouvrants&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;\enquote{&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;end_quote_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Guillemets fermants&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;}&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;paragraph_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Cha&#238;ne pour remplacement d'expression r&#233;guli&#232;re indiquant le num&#233;ro de paragraphe&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;r&#034;\\marginnote{\1}&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;chapter_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Cha&#238;ne pour remplacement d'expression r&#233;guli&#232;re indiquant le num&#233;ro de chapitre&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;r&#034;\n\\textbf{\1}&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;unicode_normalize&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Indique le type de &lt;a href='https://geekographie.maieul.net/lien'&gt;normalisation unicode&lt;/a&gt; &#224; mettre en &#339;uvre. Les valeurs possibles sont&#160;:&lt;br /&gt; &lt;br /&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;False&lt;/code&gt;&#160;: pas de normalisation&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;NFC&#034;&lt;/code&gt;&#160;: utilise les formes unitaires des caract&#232;res&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt; &lt;code&gt;&#034;NFKC&#034;&lt;/code&gt;&#160;: utilise les formes unitaires des caract&#232;res et remplace les caract&#232;res &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#233;quivalents&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Par exemple le caract&#232;re unicode &lt;code&gt;U+216C&lt;/code&gt; indiquant le chiffre romain &lt;code&gt;&#8556;&lt;/code&gt; (50) est remplac&#233; par son &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#233;quivalent&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; &lt;code&gt;U+004C&lt;/code&gt;, indiquant la lettre latine &lt;code&gt;L&lt;/code&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt;&lt;code&gt;&#034;NFD&#034;&lt;/code&gt; utilise les formes compos&#233;es des caract&#232;res&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;;&lt;/li&gt;&lt;li&gt;&lt;code&gt;&#034;NFKD&#034;&lt;/code&gt; utilise les formes compos&#233;es des caract&#232;res et remplace les caract&#232;res &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#233;quivalents&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;
&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;False&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;ellipsis_back&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Symbole d'&#233;lision&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;'&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;ndash_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Tiret demi-cadratin&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;--&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.1&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;begin_insert_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;D&#233;but d'une insertion&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;r&#034;\\textins{&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;end_insert_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Fin d'une insertion&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;}&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;empty_line_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Ligne vide&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;\n&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.2&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;line_number_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Cha&#238;ne pour remplacement d'expression r&#233;guli&#232;re indiquant le num&#233;ro de ligne.&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.3&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;last_regexp&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;S&#233;rie d'expression r&#233;guli&#232;re et de cha&#238;ne de remplacement &#224; appliquer au tout dernier moment. Par exemple j'utilise&#160;:
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class=&#034;python&#034;&gt;&lt;code&gt;[
(&#034;\s+(,|&#183;|\.|&#729;|;)&#034;,r&#034;\1&#034;),
(&#034;&#183;&#034;,&#034;&#729;&#034;),
(&#034;;&#034;,&#034;;&#034;)
]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;br /&gt; &lt;br /&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l.&#160;2&#160;: &#233;vite les espaces avant les signes de ponctuations.&lt;/li&gt;&lt;li&gt; l.&#160;3&#160;: remplace les points du milieu par des points en haut.&lt;/li&gt;&lt;li&gt; l.&#160;4&#160;: remplace les points-virgules (&lt;code&gt;U+003B&lt;/code&gt;) par des points d'interrogation grecs (&lt;code&gt;U+037E&lt;/code&gt;). &lt;/code&gt;
&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;False&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.4&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;before_stanza_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Code de d&#233;but de po&#233;sie.&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;\stanza&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even even'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;after_stanza_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Code de fin de po&#233;sie.&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;\&amp;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.5&lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd odd'&gt;
&lt;td headers='id3da1_c0'&gt;&lt;code&gt;between_stanza_w&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c1'&gt;Code entre chaques vers.&lt;/td&gt;
&lt;td headers='id3da1_c2'&gt;&lt;code&gt;&#034;&amp;&#034;&lt;/code&gt;&lt;/td&gt;
&lt;td headers='id3da1_c3'&gt;2.5&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Ce script est sous licence &lt;span class=&#034;caps&#034;&gt;GPL&lt;/span&gt;&#160;3. Ses auteurs sont&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Ma&#239;eul &lt;span class=&#034;caps&#034;&gt;ROUQUETTE&lt;/span&gt;&lt;/li&gt;&lt;li&gt; Annette von &lt;span class=&#034;caps&#034;&gt;STOCKHAUSEN&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il est &lt;a href=&#034;https://github.com/maieul/tlg2latex&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;disponible sur Github&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;On nous excusera par cons&#233;quent le caract&#232;re redondant de certaines parties de l'article.&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;Il s'agit d'un extrait d'une louange &#224; l'ap&#244;tre Barnab&#233;.&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;Comprend les nouveaut&#233;s de la version 1.1.&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;Pour comprendre les expression r&#233;guli&#232;res, on pourra lire &lt;a href=&#034;http://docs.python.org/3/howto/regex.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;le tutoriel de la documentation de Python&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Normalisation des caract&#232;res unicode et typographie</title>
		<link>https://geekographie.maieul.net/116</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/116</guid>
		<dc:date>2013-04-29T09:19:22Z</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 norme unicode permet d'encoder la quasi totalit&#233; des caract&#232;res existants sur Terre. Elle poss&#232;de certaines subtilit&#233;s, qui peuvent &#234;tre probl&#233;matique avec certaines polices. Parmi ces subtilit&#233;s, le fait qu'un m&#234;me caract&#232;re puisse se noter de plusieurs mani&#232;res... mais que les polices peuvent ne pas comprendre qu'il s'agit du m&#234;me caract&#232;re. Pour &#233;viter ces probl&#232;mes, une solution est de normaliser les caract&#232;res. Voici un script permettant de le faire. Explication et exemple La&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;La norme unicode permet d'encoder la quasi totalit&#233; des caract&#232;res existants sur Terre&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;Il reste m&#234;me en th&#233;orie de la place pour les caract&#232;re extra-terrestres.&#034; id=&#034;nh4-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;. Elle poss&#232;de certaines subtilit&#233;s, qui peuvent &#234;tre probl&#233;matique avec certaines polices. Parmi ces subtilit&#233;s, le fait qu'un m&#234;me caract&#232;re puisse se noter de plusieurs mani&#232;res... mais que les polices peuvent ne pas comprendre qu'il s'agit du m&#234;me caract&#232;re.&lt;/p&gt;
&lt;p&gt;Pour &#233;viter ces probl&#232;mes, une solution est de normaliser les caract&#232;res. Voici un script permettant de le faire.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Explication et exemple&lt;/h2&gt;
&lt;p&gt;La norme Unicode, comme tous les jeux de caract&#232;res, affecte un num&#233;ro &#224; chaque caract&#232;re. Cependant il existe des caract&#232;res dit &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;compos&#233;s&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; qui peuvent soit avoir un num&#233;ro unique, soit s'encoder comme une suite de caract&#232;re.&lt;/p&gt;
&lt;p&gt;Prenons par exemple le caract&#232;re grec &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Alpha avec iota souscrit&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;. Il y a de mani&#232;re de le noter en unicode&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; avec le caract&#232;re &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;span class=&#034;caps&#034;&gt;GREEK&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;SMALL&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LETTER&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;ALPHA&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;WITH&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;YPOGEGRAMMENI&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, dont le code unicode est &lt;code&gt;U+1FB3&lt;/code&gt;, ce qui donne &lt;code&gt;&#8115;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; avec le caract&#232;re &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;span class=&#034;caps&#034;&gt;GREEK&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;SMALL&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;LETTER&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;ALPHA&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, dont le code unicode est &lt;code&gt;U+03B1&lt;/code&gt;, suivi du caract&#232;re &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&lt;span class=&#034;caps&#034;&gt;COMBINING&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;GREEK&lt;/span&gt; &lt;span class=&#034;caps&#034;&gt;YPOGEGRAMMENI&lt;/span&gt;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;, dont le code unicode est &lt;code&gt;U+0345&lt;/code&gt;, ce qui donne &lt;code&gt;&#8115;&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Typiquement, si avec votre clavier vous frappez le iota souscrit avant le alpha, vous utilisez la premi&#232;re solution, et si vous le frappez apr&#232;s le alpha, vous utilisez la seconde solution.&lt;/p&gt;
&lt;p&gt;En th&#233;orie, les polices sont cens&#233;es rendre la m&#234;me chose... cependant cela ne fonctionne pas toujours tr&#232;s bien.&lt;/p&gt;
&lt;p&gt;Ainsi prenons la police &lt;a href=&#034;http://www.linuxlibertine.org/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Linux Libertine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Voici ce qu'elle affiche, &lt;a href=&#034;https://sourceforge.net/tracker/?func=detail&amp;atid=590374&amp;aid=3612039&amp;group_id=89513&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;pour le moment&lt;/a&gt;, selon les deux mani&#232;res d'encoder.&lt;/p&gt;
&lt;div class='spip_document_79 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;84&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH34/alpha-differents-7436a.png?1760459864' width='500' height='34' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-79 '&gt;&lt;strong&gt;Deux mani&#232;res d'encoder un alpha avec iota souscrit ... deux affichages diff&#233;rents
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_80 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;84&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://geekographie.maieul.net/IMG/pdf/alpha-differents.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 6.9 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://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-80 '&gt;&lt;strong&gt;Deux mani&#232;res d'encoder un alpha avec iota souscrit ... deux affichages diff&#233;rents
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&#034;h2&#034;&gt;R&#233;solution du probl&#232;me&lt;/h2&gt;
&lt;p&gt;La norme unicode &lt;a href=&#034;http://unicode.org/reports/tr15/#Norm_Forms&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;pr&#233;voit des formes normalis&#233;es&lt;/a&gt;. Les plus courantes sont&#160;:&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;NFC&lt;/code&gt;, qui compose les caract&#232;res. Ainsi, si on applique cette normalisation, &lt;code&gt;U+03B1 U+0345&lt;/code&gt; devient &lt;code&gt;U+1FB3&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; &lt;code&gt;NFD&lt;/code&gt;, qui d&#233;compose les caract&#232;res. Ainsi, si on applique cette normalisation, &lt;code&gt;U+1FB3&lt;/code&gt; devient &lt;code&gt;U+03B1 U+0345&lt;/code&gt;.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;En g&#233;n&#233;ral, pour avoir le meilleur rendu typographique, il faut pr&#233;f&#233;rer la forme &lt;code&gt;NFC&lt;/code&gt;&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;En effet, les auteurs de polices de caract&#232;res commencent g&#233;n&#233;ralement par (&#8230;)&#034; id=&#034;nh4-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;On peut le faire &#224; deux niveaux&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; soit au niveau du fichier m&#234;me, en appliquant un &lt;a href=&#034;https://github.com/maieul/combineunicode&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;script qui normalise les formes, par exemple celui que j'ai d&#233;pos&#233; sur github&lt;/a&gt;. Cependant, cela implique de penser &#224; ex&#233;cuter le script avant la compilation, ce qui n'est gu&#232;re pratique.&lt;/li&gt;&lt;li&gt; soit au niveau de XeTeX, en utilisant la commande &lt;code&gt;\XeTeXinputnormalization&lt;/code&gt;, suivi d'un num&#233;ro&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code&gt;1&lt;/code&gt; pour appliquer &lt;code&gt;NFC&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code&gt;2&lt;/code&gt; pour appliquer &lt;code&gt;NFD&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si on met en place cette commande, le fichier n'est pas modifi&#233;, mais XeTeX fera dynamiquement les modifications.&lt;/p&gt;
&lt;p&gt;Ainsi, dans le cas pr&#233;sent, nous pouvons mettre&#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;\documentclass{article} \usepackage{fontspec,polyglossia,xunicode} \setmainfont{Linux Libertine O} \usepackage[margin=0.1cm,a4paper]{geometry} % juste pour l'exemple, histoire de ne pas couper la ligne \XeTeXinputnormalization 1 \begin{document} &#8115; GREEK SMALL LETTER ALPHA (U+03B1) + COMBINING GREEK YPOGEGRAMMENI (U+0345) &#8115; GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI (U+1FB3) \end{document}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class='spip_document_82 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;84&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;img src='https://geekographie.maieul.net/local/cache-vignettes/L500xH38/alpha-identiques-ed360.png?1760459864' width='500' height='38' alt='' /&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-82 '&gt;&lt;strong&gt;Deux mani&#232;res d'encoder un alpha avec iota souscrit ... deux affichages identiques
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class='spip_document_81 spip_document spip_documents spip_document_file spip_document_avec_legende' data-legende-len=&#034;84&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt;
&lt;a href='https://geekographie.maieul.net/IMG/pdf/alpha-identiques.pdf' class=&#034; spip_doc_lien&#034; title='PDF - 6.8 kio' type=&#034;application/pdf&#034;&gt;&lt;img src='https://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-81 '&gt;&lt;strong&gt;Deux mani&#232;res d'encoder un alpha avec iota souscrit ... deux affichages identiques
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&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;Il reste m&#234;me en th&#233;orie de la place pour les caract&#232;re extra-terrestres.&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;En effet, les auteurs de polices de caract&#232;res commencent g&#233;n&#233;ralement par pr&#233;voir les formes unitaire plut&#244;t que compos&#233;s.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Du Thesaurus Linguae Graecae vers LaTeX</title>
		<link>https://geekographie.maieul.net/112</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/112</guid>
		<dc:date>2013-04-11T10:22:07Z</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 Thesaurus Linguae Graecae est un outils indispensable pour les hell&#233;nistes. L'un de ses avantages est de permettre de copier-coller facilement des textes grecs vers son travail, s'&#233;vitant ainsi la fastidieuse t&#226;che de retranscription, avec toutes les erreurs que cela implique. Cependant le texte tel qu'il est fourni n'est pas utilisable tel quel&#160;: il n&#233;c&#233;essite quelques retouches. Voici un script permettant d'automatiser certaine d'entre elle, afin de pouvoir utiliser le texte avec&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Le &lt;i&gt;Thesaurus Linguae Graecae&lt;/i&gt; est un outils indispensable pour les hell&#233;nistes. L'un de ses avantages est de permettre de copier-coller facilement des textes grecs vers son travail, s'&#233;vitant ainsi la fastidieuse t&#226;che de retranscription, avec toutes les erreurs que cela implique.&lt;/p&gt;
&lt;p&gt;Cependant le texte tel qu'il est fourni n'est pas utilisable tel quel&#160;: il n&#233;c&#233;essite quelques retouches. Voici un script permettant d'automatiser certaine d'entre elle, afin de pouvoir utiliser le texte avec LaTeX.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Exemple&lt;/h2&gt;
&lt;p&gt;J'ai extrait du site &lt;span class=&#034;caps&#034;&gt;TLG&lt;/span&gt; le texte suivant&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb5-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il s'agit d'un extrait d'une louange &#224; l'ap&#244;tre Barnab&#233;.&#034; id=&#034;nh5-1&#034;&gt;1&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;text&#034;&gt;&lt;code&gt; &#7964;&#954;&#945;&#956;&#949;&#957; &#8001; &#955;&#972;&#947;&#959;&#962;, &#964;&#959;&#8166;&#964;&#959;&#957; &#964;&#8056;&#957; &#952;&#949;&#963;&#960;&#941;&#963;&#953;&#959;&#957; &#954;&#945;&#8054; &#964;&#961;&#953;&#960;&#972;&#952;&#951;&#964;&#959;&#957;
&#914;&#945;&#961;&#957;&#940;&#946;&#945;&#957; &#964;&#8056;&#957; &#7936;&#960;&#972;&#963;&#964;&#959;&#955;&#959;&#957; &#7952;&#960;&#8118;&#961;&#945;&#953; &#964;&#959;&#8150;&#962; &#7952;&#947;&#954;&#969;&#956;&#943;&#959;&#953;&#962; &#960;&#959;&#952;&#8182;&#957;,
&#954;&#945;&#8054; &#959;&#8020;&#960;&#969; &#7973;&#968;&#945;&#964;&#959; &#964;&#959;&#8166; &#960;&#961;&#959;&#959;&#953;&#956;&#943;&#959;&#965;&#183; &#964;&#959;&#8150;&#962; &#947;&#8048;&#961; &#7952;&#960;&#945;&#943;&#957;&#959;&#953;&#962; &#7936;&#960;&#961;&#972;-
&#963;&#953;&#964;&#959;&#962; &#964;&#965;&#947;&#967;&#940;&#957;&#949;&#953; &#8001; &#952;&#945;&#965;&#956;&#940;&#963;&#953;&#959;&#962;. &#916;&#953;&#8056; &#7936;&#966;&#941;&#957;&#964;&#949;&#962; &#8033;&#962; &#7936;&#957;&#941;&#966;&#953;&#954;&#964;&#959;&#957; (135)
&#964;&#8056;&#957; &#960;&#949;&#961;&#8054; &#964;&#8182;&#957; &#7952;&#947;&#954;&#969;&#956;&#943;&#969;&#957; &#955;&#972;&#947;&#959;&#957;, &#8000;&#955;&#943;&#947;&#945; &#964;&#8182;&#957; &#949;&#7984;&#962; &#7969;&#956;&#8118;&#962;
&#7984;&#972;&#957;&#964;&#969;&#957; &#960;&#949;&#961;&#8054; &#964;&#8134;&#962; &#964;&#959;&#973;&#964;&#959;&#965; &#946;&#953;&#974;&#963;&#949;&#969;&#962; &#954;&#945;&#8054; &#964;&#949;&#955;&#949;&#953;&#974;&#963;&#949;&#969;&#962; &#7956;&#954; &#964;&#949;
&#964;&#959;&#8166; &#931;&#964;&#961;&#969;&#956;&#945;&#964;&#941;&#969;&#962; &#954;&#945;&#8054; &#7952;&#958; &#7953;&#964;&#941;&#961;&#969;&#957; &#7936;&#961;&#967;&#945;&#943;&#969;&#957; &#963;&#965;&#947;&#947;&#961;&#945;&#956;&#956;&#940;&#964;&#969;&#957;
&#960;&#945;&#961;&#945;&#952;&#942;&#963;&#959;&#956;&#945;&#953; &#964;&#8135; &#8017;&#956;&#949;&#964;&#941;&#961;&#8115; &#8001;&#963;&#953;&#972;&#964;&#951;&#964;&#953;, &#954;&#945;&#8054; &#959;&#8021;&#964;&#969; &#964;&#8056; &#960;&#941;&#961;&#945;&#962;
&#7952;&#960;&#953;&#952;&#942;&#963;&#959;&#956;&#949;&#957; &#964;&#8183; &#948;&#953;&#951;&#947;&#942;&#956;&#945;&#964;&#953;, &#960;&#945;&#961;&#945;&#967;&#969;&#961;&#942;&#963;&#945;&#957;&#964;&#949;&#962; &#964;&#8135; &#952;&#949;&#959;&#960;&#957;&#949;&#973;&#963;&#964;&#8179; (140)
&#915;&#961;&#945;&#966;&#8135; &#964;&#959;&#8166; &#7936;&#959;&#953;&#948;&#943;&#956;&#959;&#965; &#964;&#8052;&#957; &#954;&#949;&#966;&#945;&#955;&#8052;&#957; &#956;&#949;&#947;&#945;&#955;&#959;&#960;&#961;&#949;&#960;&#8182;&#962; &#963;&#964;&#949;-
&#966;&#945;&#957;&#8182;&#963;&#945;&#953;&#183; &#966;&#951;&#963;&#8054; &#947;&#940;&#961;&#183; &#8220;&#7982;&#957; &#948;&#8050; &#914;&#945;&#961;&#957;&#940;&#946;&#945;&#962; &#7936;&#957;&#8052;&#961; &#7936;&#947;&#945;&#952;&#8056;&#962; &#954;&#945;&#8054;
&#960;&#955;&#942;&#961;&#951;&#962; &#928;&#957;&#949;&#973;&#956;&#945;&#964;&#959;&#962; &#7937;&#947;&#943;&#959;&#965; &#954;&#945;&#8054; &#960;&#943;&#963;&#964;&#949;&#969;&#962;.&#8221; &#927;&#8023; &#964;&#943; &#7938;&#957; &#947;&#941;&#957;&#959;&#953;&#964;&#959;
&#7988;&#963;&#959;&#957; &#7970; &#960;&#945;&#961;&#945;&#960;&#955;&#942;&#963;&#953;&#959;&#957; &#960;&#974;&#960;&#959;&#964;&#949;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je souhaiterais&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; faire dispara&#238;tre les num&#233;ros de ligne&lt;/li&gt;&lt;li&gt; transformer les guillemets en utilisant la commande &lt;code&gt;\csquotes&lt;/code&gt; &#224; la place.&lt;/li&gt;&lt;li&gt; supprimer les c&#233;sures, puisque LaTeX se charge tout seul d'en mettre.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voici le r&#233;sultat souhait&#233;&#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;&#7964;&#954;&#945;&#956;&#949;&#957; &#8001; &#955;&#972;&#947;&#959;&#962;, &#964;&#959;&#8166;&#964;&#959;&#957; &#964;&#8056;&#957; &#952;&#949;&#963;&#960;&#941;&#963;&#953;&#959;&#957; &#954;&#945;&#8054; &#964;&#961;&#953;&#960;&#972;&#952;&#951;&#964;&#959;&#957;
&#914;&#945;&#961;&#957;&#940;&#946;&#945;&#957; &#964;&#8056;&#957; &#7936;&#960;&#972;&#963;&#964;&#959;&#955;&#959;&#957; &#7952;&#960;&#8118;&#961;&#945;&#953; &#964;&#959;&#8150;&#962; &#7952;&#947;&#954;&#969;&#956;&#943;&#959;&#953;&#962; &#960;&#959;&#952;&#8182;&#957;,
&#954;&#945;&#8054; &#959;&#8020;&#960;&#969; &#7973;&#968;&#945;&#964;&#959; &#964;&#959;&#8166; &#960;&#961;&#959;&#959;&#953;&#956;&#943;&#959;&#965;&#183; &#964;&#959;&#8150;&#962; &#947;&#8048;&#961; &#7952;&#960;&#945;&#943;&#957;&#959;&#953;&#962; &#7936;&#960;&#961;&#972;%
&#963;&#953;&#964;&#959;&#962; &#964;&#965;&#947;&#967;&#940;&#957;&#949;&#953; &#8001; &#952;&#945;&#965;&#956;&#940;&#963;&#953;&#959;&#962;. &#916;&#953;&#8056; &#7936;&#966;&#941;&#957;&#964;&#949;&#962; &#8033;&#962; &#7936;&#957;&#941;&#966;&#953;&#954;&#964;&#959;&#957; &#964;&#8056;&#957; &#960;&#949;&#961;&#8054; &#964;&#8182;&#957; &#7952;&#947;&#954;&#969;&#956;&#943;&#969;&#957; &#955;&#972;&#947;&#959;&#957;, &#8000;&#955;&#943;&#947;&#945; &#964;&#8182;&#957; &#949;&#7984;&#962; &#7969;&#956;&#8118;&#962;
&#7984;&#972;&#957;&#964;&#969;&#957; &#960;&#949;&#961;&#8054; &#964;&#8134;&#962; &#964;&#959;&#973;&#964;&#959;&#965; &#946;&#953;&#974;&#963;&#949;&#969;&#962; &#954;&#945;&#8054; &#964;&#949;&#955;&#949;&#953;&#974;&#963;&#949;&#969;&#962; &#7956;&#954; &#964;&#949;
&#964;&#959;&#8166; &#931;&#964;&#961;&#969;&#956;&#945;&#964;&#941;&#969;&#962; &#954;&#945;&#8054; &#7952;&#958; &#7953;&#964;&#941;&#961;&#969;&#957; &#7936;&#961;&#967;&#945;&#943;&#969;&#957; &#963;&#965;&#947;&#947;&#961;&#945;&#956;&#956;&#940;&#964;&#969;&#957;
&#960;&#945;&#961;&#945;&#952;&#942;&#963;&#959;&#956;&#945;&#953; &#964;&#8135; &#8017;&#956;&#949;&#964;&#941;&#961;&#8115; &#8001;&#963;&#953;&#972;&#964;&#951;&#964;&#953;, &#954;&#945;&#8054; &#959;&#8021;&#964;&#969; &#964;&#8056; &#960;&#941;&#961;&#945;&#962;
&#7952;&#960;&#953;&#952;&#942;&#963;&#959;&#956;&#949;&#957; &#964;&#8183; &#948;&#953;&#951;&#947;&#942;&#956;&#945;&#964;&#953;, &#960;&#945;&#961;&#945;&#967;&#969;&#961;&#942;&#963;&#945;&#957;&#964;&#949;&#962; &#964;&#8135; &#952;&#949;&#959;&#960;&#957;&#949;&#973;&#963;&#964;&#8179; &#915;&#961;&#945;&#966;&#8135; &#964;&#959;&#8166; &#7936;&#959;&#953;&#948;&#943;&#956;&#959;&#965; &#964;&#8052;&#957; &#954;&#949;&#966;&#945;&#955;&#8052;&#957; &#956;&#949;&#947;&#945;&#955;&#959;&#960;&#961;&#949;&#960;&#8182;&#962; &#963;&#964;&#949;%
&#966;&#945;&#957;&#8182;&#963;&#945;&#953;&#183; &#966;&#951;&#963;&#8054; &#947;&#940;&#961;&#183; \enquote{&#7982;&#957; &#948;&#8050; &#914;&#945;&#961;&#957;&#940;&#946;&#945;&#962; &#7936;&#957;&#8052;&#961; &#7936;&#947;&#945;&#952;&#8056;&#962; &#954;&#945;&#8054;
&#960;&#955;&#942;&#961;&#951;&#962; &#928;&#957;&#949;&#973;&#956;&#945;&#964;&#959;&#962; &#7937;&#947;&#943;&#959;&#965; &#954;&#945;&#8054; &#960;&#943;&#963;&#964;&#949;&#969;&#962;.} &#927;&#8023; &#964;&#943; &#7938;&#957; &#947;&#941;&#957;&#959;&#953;&#964;&#959;
&#7988;&#963;&#959;&#957; &#7970; &#960;&#945;&#961;&#945;&#960;&#955;&#942;&#963;&#953;&#959;&#957; &#960;&#974;&#960;&#959;&#964;&#949;;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je me sert pour cela du script Python joint.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Utilisation&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Dans le &lt;span class=&#034;caps&#034;&gt;TLG&lt;/span&gt;, afficher le texte sans les &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Beta Escape&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; (dans la colonne de gauche, le menu d&#233;roulant &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;Beta Escape&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187; mis &#224; &#171;&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;None&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;&#187;).&lt;/li&gt;&lt;li&gt; Le copier dans un fichier &lt;code&gt;nom.txt&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Avoir &lt;a href=&#034;http://www.python.org/download/releases/3.0/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Python 3&lt;/a&gt; ou plus install&#233; sur sa machine.&lt;/li&gt;&lt;li&gt; Mettre le script joint &#224; c&#244;t&#233; du fichier.&lt;/li&gt;&lt;li&gt; Avec son terminal, se rendre dans le dossier du fichier et frapper &lt;code&gt;python3 tlg2latex.py nom.txt&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Un fichier &lt;code&gt;normalise_nom.txt&lt;/code&gt; appara&#238;t &#224; c&#244;t&#233;&#160;: il contient le code utilisable dans LaTeX.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;&#192; faire&lt;/h2&gt;
&lt;p&gt;Tout les cas possibles ne sont sans doute pas encore pris en compte. J'attend vos avis, ou m&#234;me &lt;a href=&#034;https://github.com/maieul/tlg2latex/pull/1&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;vos am&#233;liorations directes&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Le code est disponible sur Github, sous Licence &lt;span class=&#034;caps&#034;&gt;GPL3&lt;/span&gt;&#160;: &lt;a href=&#034;https://github.com/maieul/tlg2latex&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/maieul/tlg2latex&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb5-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh5-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 5-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Il s'agit d'un extrait d'une louange &#224; l'ap&#244;tre Barnab&#233;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		
		<enclosure url="https://raw.github.com/maieul/tlg2latex/stable1/tlg2latex.py" length="1903" type="application/x-python" />
		

	</item>
<item xml:lang="fr">
		<title>Un index des sources primaires (3)</title>
		<link>https://geekographie.maieul.net/28</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/28</guid>
		<dc:date>2011-01-26T22:59:20Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;J'avais propos&#233; il y a peu une m&#233;thode pour indexer les sources primaires en deux articles . Je n'&#233;tais pas tr&#232;s satisfait de ce que j'avais fait, voici une meilleure m&#233;thode. Limites de la pr&#233;c&#233;dente m&#233;thode Pas d'indexation de l'endroit pr&#233;cis. Un code Python qui analyse un fichier de BibTex avec un module externe&#160;: Complexe &#224; maintenir. Complexe &#224; personnaliser. Mal cod&#233;, et truff&#233; de bugs potentiels li&#233;s &#224; toutes les subtilit&#233;s du format .bib que je ne ma&#238;trise pas encore&#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;J'avais propos&#233; il y a peu une m&#233;thode pour indexer les sources primaires en deux articles&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Un index des sources primaires (1) et Un index des sources primaires (2)&#034; id=&#034;nh6-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Je n'&#233;tais pas tr&#232;s satisfait de ce que j'avais fait, voici une meilleure m&#233;thode.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Limites de la pr&#233;c&#233;dente m&#233;thode&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Pas d'indexation de l'endroit pr&#233;cis.&lt;/li&gt;&lt;li&gt; Un code Python qui analyse un fichier de BibTex avec un module externe&#160;:
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Complexe &#224; maintenir.&lt;/li&gt;&lt;li&gt; Complexe &#224; personnaliser.&lt;/li&gt;&lt;li&gt; Mal cod&#233;, et truff&#233; de bugs potentiels li&#233;s &#224; toutes les subtilit&#233;s du format &lt;code&gt;.bib&lt;/code&gt; que je ne ma&#238;trise pas encore parfaitement.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Nouvelle m&#233;thode&#160;: le principe&lt;/h2&gt;
&lt;p&gt;Chaque fois qu'une source primaire est cit&#233;e&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Je ne trouve pas utile d'indexer les sources secondaires.&#034; id=&#034;nh6-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;, on indexe dans un fichier d'indexation&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'auteur, &#224; partir du champ &lt;code&gt;Namea&lt;/code&gt;, sinon du champ &lt;code&gt;Author&lt;/code&gt;&lt;/li&gt;&lt;li&gt; le titre, &#224; partir du champ &lt;code&gt;indextitle&lt;/code&gt;, sinon &#224; partir du champ &lt;code&gt;title&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &#233;ventuellement la page, &#224; partir de la valeur du param&#232;tre &lt;code&gt;postnote&lt;/code&gt; quand on cite&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-3&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Du coup, on ne peut pas mettre autre chose que le num&#233;ro, mais je ne pense (&#8230;)&#034; id=&#034;nh6-3&#034;&gt;3&lt;/a&gt;]&lt;/span&gt;, sinon &#224; partir du champ &lt;code&gt;pages&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; Une fausse entr&#233;e &lt;code&gt;---&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Puis le script Python est ex&#233;cut&#233; pour lire le fichier d'indexation. Les fausses entr&#233;es vont lui permettre de d&#233;limiter les les blocs de r&#233;f&#233;rences, et de les concat&#233;ner en un seul morceau.&lt;/p&gt;
&lt;p&gt;Par exemple, LaTex + BibLaTex produit, gr&#226;ce &#224; mes commandes, dans mon fichier d'indexation&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='latex'&gt;&lt;code&gt;\indexentry {Pseudo-Augustin}{1}
\indexentry {Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)}{1}
\indexentry {4}{1}
\indexentry {---}{1}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s passage du script Python, j'obtiens &#224; la place&#160;:&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='latex'&gt;&lt;code&gt;\indexentry {Pseudo-Augustin@Pseudo-Augustin!Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)@Sermon \incipit {Fratres carissimi, unum rei documentum} (Caillau \cRM {2}, 27)!4@4}{1}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;qui sera automatiquement intepr&#233;t&#233; par MakeIndex.&lt;/p&gt;
&lt;p&gt;Notez que le script s'occupe tout seul de supprimer les accents pour choisir l'entr&#233;e&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-4&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Oui, bon, ici il n'y a pas d'accent&#034; id=&#034;nh6-4&#034;&gt;4&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Les avantages&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Pas besoin de relire le fichier de bibliographie avec Python.&lt;/li&gt;&lt;li&gt; La majeure partie du traitement est laiss&#233; &#224; LaTex.&lt;/li&gt;&lt;li&gt; Pas besoin d'un module Python sp&#233;cifique.
&lt;h2 class=&#034;h2&#034;&gt;Concr&#232;tement&lt;/h2&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il faut mettre ce code dans son fichier &lt;code&gt;.tex&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-5&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Et non pas dans le fichier , comme je viens de le d&#233;couvrir.&#034; id=&#034;nh6-5&#034;&gt;5&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='latex'&gt;&lt;code&gt;\renewbibmacro{citeindex}{%
\iffieldequalstr{usera}{1}{ \ifciteindex{% %Index l'auteur \ifnameundef{namea}{% \indexnames[sources]{author}}% {\indexnames[sources]{namea}} \iffieldundef{indextitle}{% \indexfield[sources]{title}% }% {% \indexfield[sources]{indextitle}% }% \iffieldundef{postnote}{ \indexfield[sources]{pages}}% {\indexfield[sources]{postnote}}% }{}% \index[sources]{---} }{}
}
\DeclareIndexNameFormat{sources}{% \usebibmacro{index:name}{\index[sources]}{#1}{#3}{#5}{#7}%
}% \DeclareIndexFieldFormat{sources}{% \index[sources]{#1}%
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J'ai choisi d'utiliser le champ &lt;code&gt;usera&lt;/code&gt; pour signaler si on a affaire &#224; une source.&lt;/p&gt;
&lt;p&gt;Il faut &#233;galement d&#233;clar&#233; qu'on souhaite un index sp&#233;cial&#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}{sox}{sod}{Index des sources}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ensuite, il suffit d'utiliser le script Python ci-joint.&lt;/p&gt;
&lt;p&gt;Pour cela&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; avoir Python install&#233; (c'est le cas avec la plupart des distribs Linux et avec OsX)&lt;/li&gt;&lt;li&gt; placer le script &#224; c&#244;t&#233; du fichier principal et du fichier d'indexation (qui normalement sont au m&#234;me endroit).&lt;/li&gt;&lt;li&gt; se rendre avec l'invite de commande dans le dossier&lt;/li&gt;&lt;li&gt; ex&#233;cuter la commande suivante&#160;: &lt;code&gt;% python index2.py&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb6-6&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Le&#160;% indique l'invite de commande.&#034; id=&#034;nh6-6&#034;&gt;6&lt;/a&gt;]&lt;/span&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Et ce apr&#232;s avoir compil&#233; une premier fois en LaTeX, puis en BibTeX, puis en LaTeX.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb6-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;&lt;a href='https://geekographie.maieul.net/20' class=&#034;spip_in&#034;&gt;Un index des sources primaires (1)&lt;/a&gt; et &lt;a href='https://geekographie.maieul.net/21' class=&#034;spip_in&#034;&gt;Un index des sources primaires (2)&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Je ne trouve pas utile d'indexer les sources secondaires.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6-3&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-3&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-3&#034; rev=&#034;appendix&#034;&gt;3&lt;/a&gt;] &lt;/span&gt;Du coup, on ne peut pas mettre autre chose que le num&#233;ro, mais je ne pense pas que cela soit limitatif pour les sources primaires.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6-4&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-4&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-4&#034; rev=&#034;appendix&#034;&gt;4&lt;/a&gt;] &lt;/span&gt;Oui, bon, ici il n'y a pas d'accent&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6-5&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-5&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-5&#034; rev=&#034;appendix&#034;&gt;5&lt;/a&gt;] &lt;/span&gt;Et non pas dans le fichier &lt;code&gt;.bbx&lt;/code&gt;, comme &lt;a href='https://geekographie.maieul.net/27' class=&#034;spip_in&#034;&gt;je viens de le d&#233;couvrir&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb6-6&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh6-6&#034; class=&#034;spip_note&#034; title=&#034;Notes 6-6&#034; rev=&#034;appendix&#034;&gt;6&lt;/a&gt;] &lt;/span&gt;Le&lt;small class=&#034;fine d-inline&#034;&gt;&#160;&lt;/small&gt;% indique l'invite de commande.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


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

	</item>
<item xml:lang="fr">
		<title>Un correcteur typographique pour la Library of Latin Texts</title>
		<link>https://geekographie.maieul.net/26</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/26</guid>
		<dc:date>2011-01-21T23:05: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;La Library of Latin Texts est un outils tr&#232;s utile pour les chercheurs en histoire latinophone antique et en histoire m&#233;dievale occidentale. Elle met &#224; disposition des &#233;ditions de texte sous forme informatique, avec possibilit&#233; de faire des recherches avec de nombreux jokers. Surtout, elle permet d'&#233;viter d'avoir &#224; recopier les textes soit m&#234;me sur son ordinateur, et &#233;vite ainsi les fautes de frappes. Pourtant elle souffre d'un soucis&#160;: la typographie suit les conventions anglo-saxonnes,&#160;(&#8230;)&lt;/p&gt;


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


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;La &lt;span lang=&#034;en&#034;&gt;&lt;i&gt;Library of Latin Texts&lt;/i&gt;&lt;/span&gt; est un outils tr&#232;s utile pour les chercheurs en histoire latinophone antique et en histoire m&#233;dievale occidentale. Elle met &#224; disposition des &#233;ditions de texte sous forme informatique, avec possibilit&#233; de faire des recherches avec de nombreux jokers&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb7-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;C'est pourquoi il est &#224; regretter que la Patrologie Latine de Migne ne soit (&#8230;)&#034; id=&#034;nh7-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Surtout, elle permet d'&#233;viter d'avoir &#224; recopier les textes soit m&#234;me sur son ordinateur, et &#233;vite ainsi les fautes de frappes.
Pourtant elle souffre d'un soucis&#160;: la typographie suit les conventions anglo-saxonnes, et non pas fran&#231;aises.&lt;/p&gt;
&lt;p&gt;Voici un script Python qui corrige cela&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb7-2&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Il est sous la m&#234;me licence que l'ensemble du site.&#034; id=&#034;nh7-2&#034;&gt;2&lt;/a&gt;]&lt;/span&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;h2&#034;&gt;Ce que fait le script&lt;/h2&gt;
&lt;p&gt;Le script ouvre un texte et le modifier de tel sorte que&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Les espaces blancs soient supprim&#233;s en d&#233;but et fin de ligne.&lt;/li&gt;&lt;li&gt; Les majuscules soit restaur&#233;es apr&#232;s les &lt;code&gt;!&lt;/code&gt;&lt;code&gt;?&lt;/code&gt;&lt;code&gt;.&lt;/code&gt;&lt;/li&gt;&lt;li&gt; Les signes de ponctuations doubles &lt;code&gt;!&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;code&gt;;&lt;/code&gt;&lt;code&gt;?&lt;/code&gt; aient un espace avant.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;h2&#034;&gt;Ce que ne fais pas le script&lt;/h2&gt;
&lt;p&gt;Ni le caf&#233;, ni la traduction ... ni surtout le remplacement des &lt;code&gt;u&lt;/code&gt; par des &lt;code&gt;v&lt;/code&gt; aux endroits n&#233;cessaires, pour la simple raison que je ne connais pas la r&#232;gle g&#233;n&#233;rale.&lt;/p&gt;
&lt;h2 class=&#034;h2&#034;&gt;Comment s'en servir&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Avoir Python install&#233; sur son ordinateur.&lt;/li&gt;&lt;li&gt; Mettre les fichiers &#224; corriger &#224; c&#244;t&#233; du script.&lt;/li&gt;&lt;li&gt; Se rendre avec la console / le terminal dans le script.&lt;/li&gt;&lt;li&gt; Faire &lt;code&gt;python normalisetypoLLTA.py fichier1 fichier2 fichier... fichiern&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Attention&#160;: aucun fichier ne doit s'appeler test. En effet, faire &lt;code&gt;python normalisetypoLLTA.py test&lt;/code&gt; sert pour faire les &lt;a href=&#034;https://fr.wikipedia.org/wiki/tests_unitaires&#034; class=&#034;spip_glossaire&#034; rel=&#034;external&#034;&gt;tests unitaires&lt;/a&gt; lors du d&#233;veloppement du script.&lt;/p&gt;
&lt;p&gt;Le script indique si des fichiers posent probl&#232;me.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Le code est &lt;a href=&#034;https://github.com/maieul/normalise_typoLLTA&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;d&#233;sormais sur Github&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb7-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh7-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 7-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;C'est pourquoi il est &#224; regretter que la &lt;i&gt;Patrologie Latine&lt;/i&gt; de Migne ne soit pas dessus, mais c'est une autre question.&lt;/p&gt;
&lt;/div&gt;&lt;div id=&#034;nb7-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh7-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 7-2&#034; rev=&#034;appendix&#034;&gt;2&lt;/a&gt;] &lt;/span&gt;Il est sous la m&#234;me licence que l'ensemble du site.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		
		<enclosure url="https://raw.github.com/maieul/normalise_typoLLTA/master/normalise_typoLLTA.py" length="1" type="application/x-python" />
		

	</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;#nb8-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;nh8-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;#nb8-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;nh8-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;nb8-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh8-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 8-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;nb8-2&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh8-2&#034; class=&#034;spip_note&#034; title=&#034;Notes 8-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>
<item xml:lang="fr">
		<title>R&#233;cup&#233;rer un r&#233;pertoire par FTP</title>
		<link>https://geekographie.maieul.net/19</link>
		<guid isPermaLink="true">https://geekographie.maieul.net/19</guid>
		<dc:date>2011-01-03T20:06:54Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Ma&#239;eul</dc:creator>



		<description>
&lt;p&gt;Pour sauvegarder r&#233;guli&#232;rement mes sites web, j'utilise un script Python personnel. Une des &#233;tapes consiste &#224; r&#233;cup&#233;rer des fichier sur un serveur &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt;. Comme j'ai eu un peu de mal &#224; comprendre comment fonctionne le module &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; de Python, je vous livre ici ma solution. J'ai d&#233;cid&#233; de cr&#233;er une nouvelle classe ftp_perso qui contiendra un ensemble de m&#233;thode. D&#233;riv&#233;e de la classe &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; elle devrait permettre&#160;: de lister r&#233;cursivement le contenu d'un r&#233;pertoire. de r&#233;cup&#233;rer r&#233;cursivement le&#160;(&#8230;)&lt;/p&gt;


-
&lt;a href="" rel="directory"&gt;FTP&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Pour sauvegarder r&#233;guli&#232;rement mes sites web, j'utilise un script Python personnel. Une des &#233;tapes consiste &#224; r&#233;cup&#233;rer des fichier sur un serveur &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt;. Comme j'ai eu un peu de mal &#224; comprendre comment fonctionne le module &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; de Python, je vous livre ici ma solution.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;J'ai d&#233;cid&#233; de cr&#233;er une nouvelle classe &lt;code&gt;ftp_perso&lt;/code&gt; qui contiendra un ensemble de m&#233;thode.&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb9-1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;Si vous trouvez un nom mieux je suis preneur.&#034; id=&#034;nh9-1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt; D&#233;riv&#233;e de la classe &lt;code&gt;FTP&lt;/code&gt; elle devrait permettre&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; de lister r&#233;cursivement le contenu d'un r&#233;pertoire.&lt;/li&gt;&lt;li&gt; de r&#233;cup&#233;rer r&#233;cursivement le contenu d'un r&#233;pertoire.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Un probl&#232;me qui s'est pos&#233; est que tous les serveurs &lt;span class=&#034;caps&#034;&gt;FTP&lt;/span&gt; ne renvoient pas le m&#234;me type de chemin&#160;: certains renvoient un chemin depuis la racine, d'autres se contentent d'indiquer le nom du r&#233;pertoire courant.&lt;/p&gt;
&lt;p&gt;Pour r&#233;soudre cela, &#224; l'initialisation d'une instance de classe, un attribut d'objet est calcul&#233;. &lt;code&gt;self.hierarchie&lt;/code&gt;&#160;: selon sa valeur, le parcours r&#233;cursif ne sera pas effectu&#233; de la m&#234;me mani&#232;re, car il ne faudra pas envoyer les m&#234;mes requ&#234;tes au serveur.&lt;/p&gt;
&lt;p&gt;Par ailleurs certains listent les dossiers &lt;code&gt;.&lt;/code&gt; et &lt;code&gt;..&lt;/code&gt; lorsqu'on envoie une commande ls. Comme il s'agit du r&#233;pertoire courant et du r&#233;pertoire parent, il ne faut pas les utiliser lorsqu'on parcourt r&#233;cursivement, sinon on tourne. J'ai donc d&#233;fini un attribut de d'objet, avec une valeur standard mais pouvant prendre de nouvelles valeurs &#224; l'initialisation d'une instance&#160;: &lt;code&gt;self.faux_reps&lt;/code&gt;, qui contient la liste des dossiers &#224; ne pas parcourir.&lt;/p&gt;
&lt;p&gt;Enfin, il n'est pas toujours &#233;vident de savoir si un fichier est un r&#233;pertoire (dossier) ou nom&#160;: j'ai donc d&#233;fini une m&#233;thode &lt;code&gt;is_dir(self, file)&lt;/code&gt; que j'appelle sur chaque fichier avant de tenter d'y entrer comme un r&#233;pertoire.&lt;/p&gt;
&lt;p&gt;Au final j'ai donc&#160;:&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; une m&#233;thode &lt;code&gt;is_dir()&lt;/code&gt; &#224; usage interne.&lt;/li&gt;&lt;li&gt; une m&#233;thode &lt;code&gt;lister_repertoire(self,rep='',niveau=0)&lt;/code&gt; qui permet de lister r&#233;cursivement un r&#233;pertoire. Cette m&#233;thode s'appelle elle m&#234;me, d'o&#249; l'argument &lt;code&gt;niveau&lt;/code&gt;.&lt;/li&gt;&lt;li&gt; une m&#233;thode &lt;code&gt;rapatrier_repertoire(self,chemin_local='.',rep='',niveau=0)&lt;/code&gt; qui permet de r&#233;cup&#233;rer un r&#233;pertoire distant en local.&lt;/li&gt;&lt;/ul&gt;&lt;div class='precode'&gt;&lt;pre dir='ltr' style='text-align: left;' class='python'&gt;&lt;code&gt;class ftp_perso(FTP): ''' Reprend la class FTP de ftplib en rajoutant le listage r&#233;cursive d'un r&#233;pertoire et la r&#233;cup&#233;ration de l'ensemble du contenur d'un r&#233;pertoire''' def __init__(self,host,user,mdp,faux_dossiers=()): FTP.__init__(self,host,user,mdp) self.mkd('pyftptest') self.mkd('pyftptest/pyftptest') self.hierarchie=self.nlst('pyftptest') self.rmd('pyftptest/pyftptest') self.rmd('pyftptest') self.faux_reps = ('..','.','.ok','article_PDF') + faux_dossiers if len(self.hierarchie) &gt; 1: from string import find if find(self.hierarchie[2],'/') &gt; -1: self.hierarchie = '/' else: self.hierarchie = '' else: self.hierarchie = '/' def lister_repertoire(self,rep='',niveau=0): from string import rfind contenu = self.nlst(rep) if self.hierarchie != '/': for i in contenu: if not i in self.faux_reps: print rep+'/'+i if not self.is_dir(rep+'/'+i): print &#034;%sFichier &#171;%s&#187;&#034; % (niveau * &#034;\t&#034;, i ) else: print &#034;%s Dossier &#171;%s&#187;&#034; % (niveau * &#034;\t&#034;, i ) self.lister_repertoire(rep+'/'+i,niveau=niveau+1) else: for i in contenu: if not i[rfind(i,'/')+1:] in self.faux_reps: if not self.is_dir(i): print &#034;%sFichier &#171;%s&#187;&#034; % (niveau * &#034;\t&#034;, i[rfind(i,'/')+1:] ) else: print &#034;%s Dossier &#171;%s&#187;&#034; % (niveau * &#034;\t&#034;, i[rfind(i,'/')+1:] ) self.lister_repertoire(i,niveau=niveau+1) def is_dir(self,file): try: courant = self.pwd() self.cwd(file) self.cwd(courant) return True except: return False def rapatrier_repertoire(self,chemin_local='.',rep='',niveau=0): from string import rfind contenu = self.nlst(rep) if self.hierarchie != '/': for i in contenu: if not i in self.faux_reps: print rep + '/' + i if not self.is_dir(rep+'/'+i): if rep!='' and rep[0]!='/': self.retrbinary('RETR '+rep+'/'+i,open(chemin_local+'/'+rep+'/'+i,'wb').write) else: self.retrbinary('RETR '+rep+'/'+i,open(chemin_local+rep+'/'+i,'wb').write) else: if rep!='' and rep[0]!='/': makedirs(chemin_local+'/'+rep+'/'+i) else: makedirs(chemin_local+rep+'/'+i) self.rapatrier_repertoire(chemin_local,rep+'/'+i,niveau=niveau+1) else: for i in contenu: if not i[rfind(i,'/')+1:] in self.faux_reps: print i if not self.is_dir(i): self.retrbinary('RETR '+i,open(chemin_local+'/'+i,'wb').write) else: makedirs(chemin_local+'/'+i) self.rapatrier_repertoire(chemin_local,i,niveau=niveau+1)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;p&gt;Si vous voulez r&#233;cuperer le code, attention &#224; bien prendre celui dans le lien de t&#233;l&#233;chargement, sinon vous perdez les indentations.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb9-1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh9-1&#034; class=&#034;spip_note&#034; title=&#034;Notes 9-1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;Si vous trouvez un nom mieux je suis preneur.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>



</channel>

</rss>
