<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le mpg-blog &#187; latex</title>
	<atom:link href="http://weblog.elzevir.fr/par-tag/latex/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.elzevir.fr</link>
	<description>LaTeX et autres geekeries</description>
	<lastBuildDate>Thu, 08 Jul 2010 09:56:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>La courte intro à LaTeX est de retour</title>
		<link>http://weblog.elzevir.fr/2010/02/la-courte-intro-a-latex-est-de-retour/</link>
		<comments>http://weblog.elzevir.fr/2010/02/la-courte-intro-a-latex-est-de-retour/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 10:01:57 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/2010/02/la-courte-intro-a-latex-est-de-retour/</guid>
		<description><![CDATA[La « courte (?) introduction à LaTeX », un document classique d&#8217;introduction
(celui que j&#8217;ai utilisé pour débuter, d&#8217;ailleurs) souffrait depuis quelque temps
d&#8217;un manque de mises à jour dans sa version française. Récemment, ce retard a
été comblé par Samuel Colin et votre serviteur. Une version 4.27fr-3
flambant neuve se trouve donc sur le CTAN (lshort-fr.pdf) et est
accessible sous TeX [...]]]></description>
			<content:encoded><![CDATA[<p>La « courte (?) introduction à LaTeX », un document classique d&#8217;introduction
(celui que j&#8217;ai utilisé pour débuter, d&#8217;ailleurs) souffrait depuis quelque temps
d&#8217;un manque de mises à jour dans sa version française. Récemment, ce retard a
été comblé par <a href="http://hivernal.org/blog/index.php">Samuel Colin</a> et votre serviteur. Une version 4.27fr-3
flambant neuve se trouve donc sur le CTAN (<a href="http://mirror.ctan.org/info/lshort/french/lshort-fr.pdf">lshort-fr.pdf</a>) et est
accessible sous TeX Live (si l&#8217;installation est à jour) en tapant <code>texdoc
lshort-fr</code>.<span id="more-99"></span></p>

<p>Depuis la précédente version française, le chapitre sur les math a
considérablement évolué, ce qui est heureux car la composition des maths est
souvent la raison qui pousse à essayer LaTeX. Par ailleurs, des sections sur le
PDF et l&#8217;utilisation d&#8217;hyperref ont été ajoutées. Pour la petite histoire,
ce matériel avait été d&#8217;abord écrit par <a href="http://daniel.flipo.free.fr/">Daniel Flipo</a> pour un <a href="http://www.gutenberg.eu.org/publications/cahiers/98-introlatex2e.html">numéro
hors-série</a> des <em><a href="http://www.gutenberg.eu.org/publications/cahiers/">Cahiers GUTenberg</a></em>.</p>

<p>Nous avons l&#8217;intention de continuer à tenir à jour régulièrement la version
française. Notre travail est distribué sous licence GPL, et la dernière version
des sources ainsi que l&#8217;historique sont disponibles sur github : <a href="http://github.com/scolin/lshort-fr/">ici</a> et
<a href="http://github.com/mpg/lshort-fr/">là</a> (attention, la branche <code>master</code> représente la version originale).</p>

<p>Au cours du travail de traduction, des erreurs ou coquilles nous ont
vraisemblablement échappé : n&#8217;hésitez pas à nous les signaler, ou à nous
suggérer des améliorations. Les suggestions qui ne sont pas spécifiques à la
traduction peuvent aussi être adressées à l&#8217;auteur, <a href="http://tobi.oetiker.ch/hp/">Tobias Oetiker</a>.</p>

<p>Un grand merci à <a href="http://homepages.laas.fr/matthieu/">Matthieu Herrb</a> pour avoir effectué la première
traduction et assuré sa maintenance jusqu&#8217;à la version 3.20 !</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2010/02/la-courte-intro-a-latex-est-de-retour/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Biblatex 0.9 est sorti</title>
		<link>http://weblog.elzevir.fr/2010/02/biblatex-0-9-est-sorti/</link>
		<comments>http://weblog.elzevir.fr/2010/02/biblatex-0-9-est-sorti/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 11:08:23 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[biblatex]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/2010/02/biblatex-0-9-est-sorti/</guid>
		<description><![CDATA[La version 0.9 de biblatex, la nouvelle façon de gérer ses bibliographies
sous LaTeX, est sortie le 14 février, et a été intégrée à TeX Live le lendemain.
Ceux qui connaissent déjà biblatex et la raison pour laquelle il n&#8217;était pas
inclus dans TeX Live s&#8217;en réjouiront ; pour les autres, voici quelques
explications.

C&#8217;est quoi ce biblatex, d&#8217;abord ?

C&#8217;est, en [...]]]></description>
			<content:encoded><![CDATA[<p>La version 0.9 de <a href="http://ctan.org/pkg/biblatex">biblatex</a>, <em>la</em> nouvelle façon de gérer ses bibliographies
sous LaTeX, est sortie le 14 février, et a été intégrée à TeX Live le lendemain.
Ceux qui connaissent déjà biblatex et la raison pour laquelle il n&#8217;était pas
inclus dans TeX Live s&#8217;en réjouiront ; pour les autres, voici quelques
explications.<span id="more-96"></span></p>

<h3>C&#8217;est quoi ce biblatex, d&#8217;abord ?</h3>

<p>C&#8217;est, en principe, la solution à tous les problèmes de bibliographie qui se
posent en utilisant bibtex avec LaTeX et les paquets LaTeX existants. Par
exemple, il n&#8217;est pas possible seulement avec LaTeX d&#8217;obtenir une bibliographie
par chapitre, ou bien des bibliographies par sujet, de faire apparaître le
bibliographie dans la table des matières et/ou les marques-pages PDF,
l&#8217;internationalisation laisse à désirer. Différentes extensions existent qui
fournissent chacune une de ces fonctionnalités, mais elles ne coopèrent pas
forcément bien entre elle, il faut choisir laquelle utiliser, s&#8217;adapter à une
demi-douzaine d&#8217;interfaces différentes&#8230;</p>

<p>Par ailleurs, il n&#8217;est pas commode de personnaliser le style de la bibliographie
elle-même (cela se fait en éditant des fichiers de styles bibtex, ceux avec
l&#8217;extension <code>bst</code>, qui sont écrit dans un langage de pile propre à bibtex,
qu&#8217;il faut se donner la peine d&#8217;apprendre alors que notre document est bien sûr
à rendre pour hier), ni celui de citation (en particulier si on a des souhaits
« exotiques » comme de placer les références en notes de bas de page).</p>

<p>Le but de biblatex est de proposer des solutions à tous ces problèmes par le
biais d&#8217;une unique extension (ce qui élimine les problèmes de compatibilité et
ne fait qu&#8217;une documentation à lire, même s&#8217;il faut bien reconnaître que
celle-ci fait presque 200 pages). Surtout, bibtex n&#8217;est plus utilisé que pour
l&#8217;extraction des entrée à partir de la base de données et leur classement, tous
les styles sont ensuite construits en LaTeX, ce qui fait un langage de moins à
apprendre pour ceux qui souhaitent personnaliser les styles de citation et de
bibliographie.</p>

<p>De nombreux styles couvrant les besoins les plus courants sont fournis, et
d&#8217;autres styles plus spécialisés ont déjà été produits par d&#8217;autres auteurs,
voir le répertoire <a href="http://mirror.ctan.org/macros/latex/exptl/biblatex-contrib/">biblatex-contrib</a> du CTAN.</p>

<h3>Super, mais en pratique je fais comment ?</h3>

<p>En pratique, je n&#8217;entends pas expliquer en quelques lignes toutes les
fonctionnalités de biblatex, mais voici un exemple tiré d&#8217;un de mes documents
personnels, qui doit pouvoir servir de base pour démarrer.</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\usepackage</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">csquotes</span><span style="color: #E02020; ">}</span>           <span style="color: #2C922C; font-style: italic;">% utilisé par biblatex</span>
<span style="color: #800000; font-weight: normal;">\usepackage</span><span style="color: #E02020; ">[</span>style=alphabetic,   <span style="color: #2C922C; font-style: italic;">% citations comme [Fa91] pour Faltings, 91</span>
  sorting=nyt,                  <span style="color: #2C922C; font-style: italic;">% classement par nom, année, titre</span>
  sortcites=true,               <span style="color: #2C922C; font-style: italic;">% classer les citations multiples</span>
  autopunct=true,               <span style="color: #2C922C; font-style: italic;">% gérer automatiquement les ponctuations</span>
  babel=hyphen,                 <span style="color: #2C922C; font-style: italic;">% ajuster les césure pour chaque entrée</span>
  hyperref=true,                <span style="color: #2C922C; font-style: italic;">% les liens hypertexte, c'est le Bien</span>
  backref=false<span style="color: #E02020; ">]{</span><span style="color: #2020C0; font-weight: normal;">biblatex</span><span style="color: #E02020; ">}</span>      <span style="color: #2C922C; font-style: italic;">% pas de réfs. aux pages où l'entrée est citée</span>
<span style="color: #800000; font-weight: normal;">\bibliography</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">these</span><span style="color: #E02020; ">}</span>            <span style="color: #2C922C; font-style: italic;">% utiliser these.bib (format bibtex normal)</span>
<span style="color: #800000; font-weight: normal;">\defbibheading</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">bibempty</span><span style="color: #E02020; ">}{</span><span style="color: #E02020; ">}</span>      <span style="color: #2C922C; font-style: italic;">% voir ci-dessous</span></pre></div></div>


<p>Ça, c&#8217;était dans le préambule, à la place de la commande <code>\bibliographystyle</code>
qui n&#8217;est désormais plus utilisée (c&#8217;est l&#8217;option <code>style</code> qui la remplace ici.
Maintenant, dans le document, imaginons que je souhaite que la bibliographie
soit une section à part entière (numérotée et tout le tintouin) et que de plus
je veuille insérer des commentaires entre le titre « références » et la
bibliographie elle-même. Rien de plus simple : je demande à biblatex de ne pas
insérer de titre, et je fais tout moi-même. Pour ça, j&#8217;ai préalablement défini
un style d&#8217;entête de bibliographie, avec <code>\defbibheading</code>, qu&#8217;on pourrait
appeler le style trivial : il ne fait rien (voir ci-dessus).</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\section</span><span style="color: #E02020; ">{</span><span style="color: #00008B; font-weight: bold;">Références</span><span style="color: #E02020; ">}</span>
&nbsp;
Du blabla ici parce que je suis bavard. Si j'étais un utilitaire Unix<span style="color: #800000; font-weight: normal;">\dots</span> en
fait je serais pas un utilitaire Unix, parce que vraiment je suis trop verbeux.
&nbsp;
<span style="color: #800000; font-weight: normal;">\printbibliography</span><span style="color: #E02020; ">[</span><span style="color: #C08020; font-weight: normal;">heading=bibempty</span><span style="color: #E02020; ">]</span> <span style="color: #2C922C; font-style: italic;">% utilisons le style d'entête vide</span></pre></div></div>


<p>Remarquez qu&#8217;on utilise <code>\printbibliography</code>, et qu&#8217;on a pas besoin de préciser
le fichier <code>bib</code> utilisé, puisqu&#8217;on l&#8217;a déjà fait dans le préambule. Si vous
voulez voir le résultat (document complet), <a href="http://people.math.jussieu.fr/~mpg/files/sujet-these-mpg.pdf">il est ici</a>.</p>

<p>Pour aller plus loin, je renvoie à la documentation de biblatex (<code>texdoc
biblatex</code> pour la trouver). Elle est longue, mais le premier paragraphe de
l&#8217;introduction indique les sections à lire en priorité. Par ailleurs, de
nombreux exemples sont fournis (vous les trouverez sous
<code>TEXMFDIST/doc/latex/biblatex/examples</code>).</p>

<h3>Sympa, mais alors pourquoi c&#8217;était pas encore dans TeX Live ?</h3>

<p>On s&#8217;en doute, le développement d&#8217;un projet aussi ambitieux prend du temps. Au
cours de ce processus, l&#8217;auteur est susceptible de vouloir opérer des
changements qui briseront la compatibilité avec les versions préliminaires
précédentes, et doit pouvoir le faire sans pression de la part des utilisateurs
s&#8217;il souhaite arriver à une version 1.0 de qualité. C&#8217;est pourquoi l&#8217;auteur de
biblatex avait expressément demandé aux distributions TeX de ne pas inclure
biblatex, dans l&#8217;espoir d&#8217;éviter une croissance prématurée de sa base
d&#8217;utilisateurs.</p>

<p>Cependant, de nombreux utilisateurs plus avancés ou téméraires avaient commencé
à utiliser biblatex en production et en étaient très satisfaits. Tout le monde
était donc impatient de voir une première version distribuable de biblatex :
c&#8217;est maintenant fait.</p>

<p>Notons toutefois que cette version 0.9 n&#8217;est pas encore considérée comme
stable : pas dans le sens où elle serait pleine de bugs, mais plutôt dans le
sens que la rétro-compatibilité des versions ultérieures ne sera garantie qu&#8217;à
partir de la version 1.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2010/02/biblatex-0-9-est-sorti/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Detexify</title>
		<link>http://weblog.elzevir.fr/2009/10/detexify/</link>
		<comments>http://weblog.elzevir.fr/2009/10/detexify/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 00:35:44 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/2009/10/detexify/</guid>
		<description><![CDATA[Pour fêter la rentrée après des mois de silence, un tout petit billet en forme
de lien vers un outil génial, que j&#8217;ai découvert cet été, et dont j&#8217;ai réalisé
aujourd&#8217;hui que je n&#8217;en avais pas encore parlé à tous mes amis (on va voir si
mes amis lisent ce blog) : detexify.

C&#8217;est un outil en ligne qui permet [...]]]></description>
			<content:encoded><![CDATA[<p>Pour fêter la rentrée après des mois de silence, un tout petit billet en forme
de lien vers un outil génial, que j&#8217;ai découvert cet été, et dont j&#8217;ai réalisé
aujourd&#8217;hui que je n&#8217;en avais pas encore parlé à tous mes amis (on va voir si
mes amis lisent ce blog) : <a href="http://detexify.kirelabs.org/classify.html">detexify</a>.</p>

<p>C&#8217;est un outil en ligne qui permet de dessiner un symbole quelconque, en général
un symbole mathématique, et d&#8217;avoir en retour la commande LaTeX (avec le nom du
<em>package</em> qui la fournit, le cas échéant). C&#8217;est une façon efficace et,
avouons-le, bien marrante, de fouiller dans <a href="http://mirror.ctan.org/info/symbols/comprehensive/symbols-a4.pdf">symbols-a4</a>. Le seul avantage qui
reste à ce document, est qu&#8217;on peut le consulter hors-ligne facilement (avec les
commandes <code>texdoc symbols-a4</code> sous <a href="http://tug.org/texlive/">TeX Live</a> et <code>mthelp symbols-a4</code> sous
<a href="http://miktex.org/">MiKTeX</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2009/10/detexify/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MinionPro sous pdfTeX</title>
		<link>http://weblog.elzevir.fr/2008/09/minionpro-sous-pdftex/</link>
		<comments>http://weblog.elzevir.fr/2008/09/minionpro-sous-pdftex/#comments</comments>
		<pubDate>Tue, 30 Sep 2008 16:45:50 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[fontes]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/2008/09/minionpro-sous-pdftex/</guid>
		<description><![CDATA[Je n&#8217;ai pas encore finit de lire The Elements of Typographic Style
mais j&#8217;ai déjà eu le temps d&#8217;apprécier la qualité de l&#8217;ouvrage et de se
composition, notamment la police principale, Minion. Il se trouve que j&#8217;ai
justement la version (très complète) incluse dans les Adobe Type Classics for
Learning (une collection de fontes Adobe bon marché pour les [...]]]></description>
			<content:encoded><![CDATA[<p>Je n&#8217;ai pas encore finit de lire <em><a href="http://www.amazon.fr/Elements-Typographic-Style-Version-3-1/dp/toc/0881792063">The Elements of Typographic Style</a></em>
mais j&#8217;ai déjà eu le temps d&#8217;apprécier la qualité de l&#8217;ouvrage et de se
composition, notamment la police principale, <em>Minion</em>. Il se trouve que j&#8217;ai
justement la version (très complète) incluse dans les <em><a href="http://www.adobe.com/education/products/typeclassics.html">Adobe Type Classics for
Learning</a></em> (une collection de fontes Adobe bon marché pour les étudiants),
et naturellement j&#8217;ai envie de l&#8217;utiliser dans mes documents LaTeX.</p>

<p>Pour cela, on peut bien sûr utiliser XeLaTeX et l&#8217;excellent module
<em><a href="http://ctan.org/pkg/fontspec">fontspec</a></em>, ou convertir les polices au format PostScript Type 1, et générer
les fichiers (<code>tfm</code>, <code>vf</code>, <code>fd</code>,&#8230;) dont ont besoin (pdf)TeX et LaTeX pour les
utiliser. Je me propose ici de vous exposer comment j&#8217;ai mis en oeuvre cette
deuxième option,
<span id="more-20"></span>
 qui, on le verra dans un prochain billet, est également
utile avec XeLaTeX, en attendant un meilleur support de l&#8217;OpenType mathématique,
et une police mathématique OpenType accordée à Minion (peut-être <a href="http://river-valley.tv/conferences/tug2008/#0202-Johannes_Kuster">Minion Math</a>
?).</p>

<p>Tout le travail pénible et déjà été fait pour nous : on trouve sur le CTAN les
fichiers de support nécessaires, et un script pour la conversion des polices
elles-même, dans le paquet <a href="http://ctan.org/pkg/minionpro">minionpro</a>. Les fichiers dont vous avez besoin
dépendent de votre version de Minion. Parcourez le <a href="http://mirror.ctan.org/fonts/minionpro/README">README</a> pour savoir
comment adapter les explications ci-dessous.</p>

<p>Avant toute chose, vérifiez de vous avez installé <code>lcdf-typetools</code>, la
collection d&#8217;outils utilisée par les script de conversion. Puis créez un
répertoire temporaire, récupérez et décompressez les fichiers nécessaires.</p>

<pre><code>% mkdir tmp/minionpro
% cd !$
% wget http://mirror.ctan.org/fonts/minionpro/{README,enc-1.000.zip,metrics-base.zip,metrics-full.zip,metrics-opticals.zip,scripts.zip}
% for i in *.zip; do unzip $i; done
</code></pre>

<p>Il s&#8217;agit alors de copier dans le répertoire <code>otf</code> créé les fichiers de Minion
au format OpenType. Vous êtes alors prêts à lancer la conversion et à placer le
résultat dans un endroit approprié.</p>

<pre><code>%  cp ~/.fonts/Adobe/Western\ Fonts/Minion\ Pro\ Opticals/* otf
% ./convert.sh
% mkdir -p fonts/type1/adobe
% mv pfb !$/MinionPro
</code></pre>

<p>La dernière étape consiste à intégrer les fichiers au reste de votre
distribution TeX. Si vous n&#8217;êtes pas administrateur sur la machine en question,
ou ne souhaitez installer les fontes que pour vous, remplacez le répertoire
<code>TEXMF</code> de base par votre <code>TEXMFHOME</code>, et la commande <code>updmap-sys</code> par <code>updmap</code>.</p>

<pre><code>% cp -r doc fonts tex /usr/local/texlive/texmf-local
% mktexlsr !$
% updmap-sys --enable Map MinionPro.map
</code></pre>

<p>Voilà, c&#8217;est fini (c&#8217;était facile, hein ?), il ne vous reste plus qu&#8217;à tester.
Chez moi, ça marche avec pdflatex, latex+dvips+pstopdf, et latex+xdvipdfmx. Il
faut aussi avoir le paquet MnSymbol pour les maths, j&#8217;ai supposé qu&#8217;il était
déjà installé.</p>

<p>Un dernier mot d&#8217;avertissement : comme tous les <code>how-to</code> ici, c&#8217;est plutôt un «
comment j&#8217;ai fait chez moi pour que ça marche chez moi ». En particulier, je
fais les suppositions suivantes :</p>

<ul>
<li>on est sous Linux, le shell est zsh ou un truc voisin (bash doit convenir) ;</li>
<li>la distribution TeX est une TeX Live « nature », les chemins changent sinon ;</li>
<li>l&#8217;utilisateur qui fait la dernière étape a les droits en écriture sur
l&#8217;arborescence utilisée. Chez moi, j&#8217;ai donné à l&#8217;utilisateur <code>mpg</code> (moi) les
droits sur <code>/usr/local/texlive</code> : ça m&#8217;évite de passer <code>root</code> ou d&#8217;utiliser
<code>sudo</code> chaque fois que je veux bidouiller ma TeX Live.</li>
</ul>

<p>Amusez-vous bien avec cette jolie fonte, et faites de beaux documents !</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2008/09/minionpro-sous-pdftex/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tester si une commande est définie en (La)TeX</title>
		<link>http://weblog.elzevir.fr/2008/07/tester-si-une-commande-est-definie-en-latex/</link>
		<comments>http://weblog.elzevir.fr/2008/07/tester-si-une-commande-est-definie-en-latex/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 16:47:58 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[astuce]]></category>
		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/2008/07/9/</guid>
		<description><![CDATA[Reprise d&#8217;un de mes articles récents sur fctt, qui fait le point sur les
mille-et-une (en fait, un peu moins) façons de savoir si une séquence de
contrôle est définie ou non : en TeX pur, en LaTeX, en e-TeX, en distinguant ou
pas \relax de undefined&#8230;



Pour commencer, précisons que « non défini » et \relax
c&#8217;est pas pareil en [...]]]></description>
			<content:encoded><![CDATA[<p>Reprise d&#8217;un de mes articles récents sur fctt, qui fait le point sur les
mille-et-une (en fait, un peu moins) façons de savoir si une séquence de
contrôle est définie ou non : en TeX pur, en LaTeX, en e-TeX, en distinguant ou
pas <code>\relax</code> de <code>undefined</code>&#8230;</p>

<p><span id="more-9"></span></p>

<p>Pour commencer, précisons que « non défini » et <code>\relax</code>
c&#8217;est pas pareil en général :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;">This is TeX, Version 3.1415926 (Web2C 7.5.7)
**<span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\relax</span>
&gt; <span style="color: #800000; font-weight: normal;">\relax</span>=<span style="color: #800000; font-weight: normal;">\relax</span>.
&lt;*&gt; <span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\relax</span>
&nbsp;
? 
&nbsp;
*<span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\cettecommandenexistepas</span>
&gt; <span style="color: #800000; font-weight: normal;">\cettecommandenexistepas</span>=undefined.
&lt;*&gt; <span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\cettecommandenexistepas</span>
&nbsp;
? x
No pages of output.
Transcript written on texput.log.</pre></div></div>


<p><code>\ifx</code> compare toujours les significations (« meaning ») des trucs : deux
trucs sont <code>\ifx</code>-égaux si et seulement si il ont la même signification. La
signification est à peu près ce qui est affiché par <code>\show</code>, sauf qu&#8217;avec
<code>\show</code> on perd les catcodes alors que bien sûr en vrai ils comptent.</p>

<p>Deuxième point : quand on forme avec <code>\csname</code> une séquence de contrôle dont
la signification était précedemment <code>undefined</code>, la séquence est
immédiatement rendue <code>\let</code>-égale à <code>\relax</code>. La porté de cette opération est
limité comme celle de toute assignation. Exemple :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\begingroup</span>
<span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\undefined</span>     <span style="color: #2C922C; font-style: italic;">% \undefined=undefined</span>
<span style="color: #800000; font-weight: normal;">\csname</span> undefined<span style="color: #800000; font-weight: normal;">\endcsname</span>
<span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\undefined</span>     <span style="color: #2C922C; font-style: italic;">% \undefined=\relax</span>
<span style="color: #800000; font-weight: normal;">\endgroup</span>
<span style="color: #800000; font-weight: normal;">\show</span><span style="color: #800000; font-weight: normal;">\undefined</span>     <span style="color: #2C922C; font-style: italic;">% \undefined=undefined</span></pre></div></div>


<p>Application, extraite de latex.ltx (ou de source2e) :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\<span style="color: #800000; font-weight: bold;">def</span></span><span style="color: #E00000; font-weight: normal;">\@ifundefined</span>#1<span style="color: #E02020; ">{</span><span style="color: #2C922C; font-style: italic;">%</span>
  <span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #800000; font-weight: normal;">\ifx</span><span style="color: #800000; font-weight: normal;">\csname</span>#1<span style="color: #800000; font-weight: normal;">\endcsname</span><span style="color: #800000; font-weight: normal;">\relax</span>
    <span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #E00000; font-weight: normal;">\@firstoftwo</span>
  <span style="color: #800000; font-weight: normal;">\else</span>
    <span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #E00000; font-weight: normal;">\@secondoftwo</span>
  <span style="color: #800000; font-weight: normal;">\fi</span><span style="color: #E02020; ">}</span></pre></div></div>


<p>Usage :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #E00000; font-weight: normal;">\@ifundefined</span><span style="color: #E02020; ">{</span><span style="color: #2020C0; font-weight: normal;">newcommand</span><span style="color: #E02020; ">}{</span><span style="color: #2020C0; font-weight: normal;">Pas LaTeX</span><span style="color: #E02020; ">}{</span><span style="color: #2020C0; font-weight: normal;">LaTeX</span><span style="color: #E02020; ">}</span></pre></div></div>


<p>Particularité : <code>\@ifundefined{relax}{Non}{Oui}</code> répond non. En LaTeX, on met
donc dans le même sac <code>\relax</code> et <code>undefined</code>, mais c&#8217;est un choix propre à
LaTeX. (Autre) inconvénient : dans le cas où on exécute la ligne ci-dessus
en Plain, c&#8217;est comme si on avait aussi fait <code>\let\newcommand\relax</code>.</p>

<p>Autres tests qui ne présentent pas ces inconvénients :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\ifx</span><span style="color: #800000; font-weight: normal;">\truc</span><span style="color: #800000; font-weight: normal;">\undefined</span> <span style="color: #2C922C; font-style: italic;">% par convention, on suppose que \undefined est non</span>
<span style="color: #2C922C; font-style: italic;">% définie, mais rien ne le garantit (on utilise aussi \@undefined)</span>
&nbsp;
<span style="color: #800000; font-weight: normal;">\ifx</span><span style="color: #800000; font-weight: normal;">\truc</span><span style="color: #800000; font-weight: normal;">\undefined</span>
  non def
<span style="color: #800000; font-weight: normal;">\else</span>
  <span style="color: #800000; font-weight: normal;">\ifx</span><span style="color: #800000; font-weight: normal;">\truc</span><span style="color: #800000; font-weight: normal;">\relax</span>
    non def <span style="color: #2C922C; font-style: italic;">% au sens de LaTeX</span>
  <span style="color: #800000; font-weight: normal;">\else</span>  
    def
  <span style="color: #800000; font-weight: normal;">\fi</span>
<span style="color: #800000; font-weight: normal;">\fi</span></pre></div></div>


<p>Le deuxième est vachement préférable dans un milieu plus ou moins LaTeXien,
car il y a vraiment un risque que quelqu&#8217;un ait fait un <code>\@ifundefined</code>
avant&#8230; Ces deux tests ne marchent que si on peut écrire la séquence de
contrôle sans problème (pas de caractères zarbis dans le nom). Sinon, on
peut utiliser :</p>


<div class="wp_syntax"><div class="code"><pre class="latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\begingroup</span><span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #800000; font-weight: normal;">\expandafter</span><span style="color: #800000; font-weight: normal;">\endgroup</span>
<span style="color: #800000; font-weight: normal;">\expandfater</span><span style="color: #800000; font-weight: normal;">\ifx</span><span style="color: #800000; font-weight: normal;">\csname</span> nom+bien/chelou<span style="color: #800000; font-weight: normal;">\endcsname</span><span style="color: #800000; font-weight: normal;">\relax</span></pre></div></div>


<p>qui a l&#8217;avantage de ne pas faire passer à <code>\relax</code> un truc qui était
undefined, mais l&#8217;inconvénient de ne plus être développable. En TeX
Knuthien, on ne peut pas faire mieux. En e-TeX, si.</p>

<p>On a d&#8217;abord <code>\ifdefined\truc</code> qui est l&#8217;exact équivalent de
<code>\ifx\truc\undefined</code> <em>sauf</em> qu&#8217;on a plus besoin de supposer que <code>\undefined</code>
est vraiment non définie. Ensuite, on a <code>\ifcsname truc+che/lou\endcsname</code>
qui fonctionne pareil et ne présente pas l&#8217;inconvénient de rendre <code>\truc</code>
égal à <code>\relax</code> s&#8217;il était précédemment non défini. Bref, le pied. (Le tout
était bien sûr développable, cela va sans dire.)</p>

<p>Comme souvent, la solution e-TeX est la meilleure techniquement, mais elle
n&#8217;etre pas très vite dans les mœurs, en particulier elle n&#8217;entrera pas dans le
noyau LaTeX avant la sortie de LaTeX3 (c&#8217;est-à-dire pas tout de suite). Pour une
interface LaTeXienne aux fonctionnalités d&#8217;e-TeX (et bien d&#8217;autres choses), je
recommande le paquet <a href="http://ctan.org/pkg/etoolbox">etoolbox</a>. Voir par exemple la section 3.5.1 de son
manuel, concernant des points discutés ici.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2008/07/tester-si-une-commande-est-definie-en-latex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sur l&#8217;avenir de (La)TeX</title>
		<link>http://weblog.elzevir.fr/2008/06/sur-lavenir-de-latex/</link>
		<comments>http://weblog.elzevir.fr/2008/06/sur-lavenir-de-latex/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 23:05:29 +0000</pubDate>
		<dc:creator>mpg</dc:creator>
				<category><![CDATA[TeX et compagnie]]></category>
		<category><![CDATA[latex]]></category>
		<category><![CDATA[luatex]]></category>
		<category><![CDATA[xetex]]></category>

		<guid isPermaLink="false">http://weblog.elzevir.fr/?p=6</guid>
		<description><![CDATA[Suite à une discussion récente sur fctt,
je reformule ici quelques réflexions sur l&#8217;avenir de (La)TeX. La première
remarque est qu&#8217;il faut bien distinguer LaTeX en lui-même, et plus
particulièrement sa version actuelle, LaTeX2e, des outils basés sur TeX en
général. Je crois fortement à l&#8217;avenir d&#8217;outils reprenant les points forts de
TeX, mais à condition de révolutionner certains de [...]]]></description>
			<content:encoded><![CDATA[<p>Suite à une discussion récente sur <abbr title="fr.comp.text.tex">fctt</abbr>,
je reformule ici quelques réflexions sur l&#8217;avenir de (La)TeX. La première
remarque est qu&#8217;il faut bien distinguer LaTeX en lui-même, et plus
particulièrement sa version actuelle, LaTeX2e, des outils basés sur TeX en
général. Je crois fortement à l&#8217;avenir d&#8217;outils reprenant les points forts de
TeX, mais à condition de révolutionner certains de leurs aspects, qui en
particulier feraient sans doute voler en éclats le LaTeX2e que nous
connaissons.</p>

<p>D&#8217;abord, quelques rappels historiques.
<span id="more-6"></span>
 TeX était sans doute le mieux qu&#8217;on
puisse faire à l&#8217;époque où il a été créé, et peut-être encore 10 ans après.
Aujourd&#8217;hui, il est vieux et porte les traces de l&#8217;époque de sa jeunesse : à ce
moment, ni pdf, ni unicode, ni opentype n&#8217;existaient : en fait, postscript non
plus, latin1 non plus, et sans doute aucun format vectoriel de police. Sur ces
points, le retard est en train d&#8217;être rattrapé (voire de l&#8217;avance prise) par
XeTeX, et une partie de LuaTeX.</p>

<p>Il est sans doute intéressant de noter que Microsoft a produit avec Word 2007
une police mathématique (Cambria Math) au format OpenType avec toutes les
informations métriques voulues pour composer des maths correctement.  Leurs
algo de composition mathématique sont ouvertement calqués sur ceux de TeX et
produisent un résultat de qualité comparable (pour les maths, le texte est
encore largement à la traîne). Pour l&#8217;instant, ni XeTeX ni LuaTeX ne gèrent
l&#8217;OpenType mathématique (mais ça ne va pas tarder à changer).</p>

<p>C&#8217;est à mon avis significatif sur le fait que TeX avait à une époque plusieurs
longueurs d&#8217;avance, puisqu&#8217;on le copie presque 30 ans après. Par contre, en le
copiant, on va un peu plus loin : il s&#8217;agit donc de ne pas se reposer sur ses
lauriers si TeX doit garder un rôle de leader. Des progrès importants sont en
cours dans ce sens avec XeTeX et LuaTeX.</p>

<p>Un autre point où TeX porte un peu la trace de son âge, c&#8217;est son manque
d&#8217;intégration au reste du monde en général. On a déjà parlé des grands
standards comme Pdf, PostScript, Unicode et OpenType, mais une foule d&#8217;autres
détails existent, comme le problème des formats d&#8217;images et des modes de
compilation, légitimement agaçants pour les utilisateurs.</p>

<p>Par ailleurs, on peut envisager et souhaiter des réformes profondes au niveau
de l&#8217;interface utilisateur et programmeur de TeX, allant jusqu&#8217;à la disparition
de TeX en tant que langage. En effet, ce dernier présente des particularités
incontournables (dans le sens où on ne peut pas les cacher à l&#8217;utilisateur),
comme le célèbre problème du verbatim dans les arguments de commandes, qui sont
profondément ancrées dans la structure du langage.</p>

<p>La moins profonde des réformes qu&#8217;on peut envisager est déjà en cours avec le
projet LuaTeX : il s&#8217;agit d&#8217;ouvrir certaines des routines internes de TeX au
programmeur. En effet, celui-ci est parfois bloqué par quelques hypothèses
codées en dur dans TeX, qui ne correspondent pas à la situation où il se
trouve, tant il est vrai que même Knuth ne pouvait anticiper toutes les
utilisations qu&#8217;on voudrait faire de TeX après le développement fabuleux qu&#8217;il
a connu.</p>

<p>Pour le moment, il s&#8217;agit, à certains points judicieusement choisis du
traitement d&#8217;un document par TeX, de rendre la main au programmeur. Ceci laisse
en place le flot d&#8217;exécution normal prévu par TeX. Or celui-ci est parfois très
contraignant, par exemple la notion de routine de sortie.</p>

<p>Au final, on aimerait donc dans l&#8217;idéal pourvoir complètement désosser TeX, et
n&#8217;en garder que les parties les plus intéressantes : algorithmes de césure, de
construction des paragraphes, de composition mathématique, structures de
données particulièrement adaptées (listes, boîtes) éventuellement en les
améliorant, mais en étant libre de les agencer comme on veut. C&#8217;est un travail
particulièrement énorme, vu le caractère très monolithique de TeX tant dans sa
conception que dans son implémentation.</p>

<p>On peut alors rêver d&#8217;un système en plusieurs couches comme suit : un cœur
centré sur des composants de TeX liés entre eux de façon souple. Des <em>back-end</em>
produisant un peu ce qu&#8217;on veut : Pdf (X)Html, MathML, etc.  Un <em>front-end</em> en
deux couches : l&#8217;une destinée au programmeur, l&#8217;autre à l&#8217;utilisateur final.</p>

<p>En effet, actuellement les deux disposent d&#8217;un langage commun qui ne satisfait
réellement personne. Du point de vue des deux, il est trop complexe et parfois
difficile à prévoir, et pour le programmeur il manque de la souplesse que
savent fournir des langages modernes, sans même parler du concept de séparation
lecture/développement/exécution qui est pour beaucoup dans la complexité du
langage actuel.</p>

<p>Notons que cette séparation en couches était plus ou moins prévue dès le départ
par Knuth avec la notion de format, et est aussi un des points importants du
projet LaTeX3. Enfin, avec des efforts, un bonne conception de ces deux couches
permettrait peut-être d&#8217;éviter que l&#8217;utilisateur de retrouve confronté à des
messages d&#8217;erreurs que seul le programmeur expérimenté peut comprendre à défaut
d&#8217;apprécier.</p>

<p>Après ce qui peut ressembler à un réquisitoire, quelques réflexions sur la
place de TeX dans le paysage actuel. Il est le seul, parmi les outils destinés
à produire des documents de bonne qualité typographique, à fonctionner comme un
compilateur de documents, et à être réellement programmable. Ceci le rend très
difficile à comparer à d&#8217;éventuels concurrents.</p>

<p>Ses atouts essentiels, conséquence des précédents, est qu&#8217;il peut automatiser
de nombreuses tâches comme la gestion de des références au sens large, notes de
bas de pages, etc, mais aussi trouver automatiquement l&#8217;optimum typographique
sous des contraintes données dans de nombreuses circonstances, là où des outils
comme Quark Xpress ou Adobe InDesign demandent une gestion et un ajustement
manuel. Il peut aussi beaucoup plus facilement d&#8217;intégrer dans des flots de
traitement automatisé de documents (penser XML, Docbook, texinfo).</p>

<p>Pour conclure, tant par la place à part qu&#8217;il occupe dans le paysage de la
typographie assistée par ordinateur, l&#8217;intérêt constant de ses algorithmes
typographiques, les projets existants visant à mieux l&#8217;insérer dans le monde
informatique moderne, que par goût personnel, je crois fortement à l&#8217;avenir
d&#8217;une forme de TeX.</p>

<p>Mais le monde de TeX a été très conservateur pendant une longue période,
choisissant toujours la stabilité au détriment de l&#8217;innovation. Il a donc dans
un sens du retard à rattraper, et je pense et espère que les évolutions en
cours avec XeTeX et plus encore LuaTeX ne sont que le début d&#8217;une révolution,
qui promet d&#8217;être excitante et riche.</p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.elzevir.fr/2008/06/sur-lavenir-de-latex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
