diff options
author | RochDLY <roch.delannay@gmail.com> | 2024-05-09 13:27:45 +0200 |
---|---|---|
committer | RochDLY <roch.delannay@gmail.com> | 2024-05-09 13:27:45 +0200 |
commit | 52e1d1df1d11bed0bf266fb88a5d9e8775f16561 (patch) | |
tree | 3190c644d2da2fb5cc147680c7dbf4bd914ec7b2 /src | |
parent | 36c615fc95e8bd1cfc627a7c17184b9466b052ee (diff) | |
download | pandoc-site-52e1d1df1d11bed0bf266fb88a5d9e8775f16561.tar.gz pandoc-site-52e1d1df1d11bed0bf266fb88a5d9e8775f16561.tar.bz2 pandoc-site-52e1d1df1d11bed0bf266fb88a5d9e8775f16561.zip |
mise à jour du billet et de l'index sur le nouvel export de stylo compatible avec ekdosis
Diffstat (limited to 'src')
-rwxr-xr-x | src/index.md | 2 | ||||
-rw-r--r-- | src/posts/2024-02-15-ekdosis-et-stylo.md | 202 |
2 files changed, 200 insertions, 4 deletions
diff --git a/src/index.md b/src/index.md index a052052..45de390 100755 --- a/src/index.md +++ b/src/index.md @@ -5,7 +5,7 @@ title: Pensées d'un doctorant - [11-Texte présenté lors de l'examen doctoral de l'UdeM](/posts/2024-05-07-texte-examen-de-synthese.html) - [10-La magie de l'AST de Pandoc](/posts/2024-04-10-la-magie-de-l-ast-de-pandoc.html) -- [09-`ekdosis` et Stylo](/posts/2024-02-15-ekdosis-et-stylo.html) +- [09-Nouvel export dans Stylo compatible avec ekdosis](/posts/2024-02-15-ekdosis-et-stylo.html) - [08-Archiver un site web](/posts/2024-01-26-archiver-un-site-web.html) - [07-Préparation du cours Identités numériques avec Quarto](/posts/2024-01-10-preparation-du-cours-identite-numerique.html) diff --git a/src/posts/2024-02-15-ekdosis-et-stylo.md b/src/posts/2024-02-15-ekdosis-et-stylo.md index 0f1e7e6..86fbefa 100644 --- a/src/posts/2024-02-15-ekdosis-et-stylo.md +++ b/src/posts/2024-02-15-ekdosis-et-stylo.md @@ -1,5 +1,5 @@ --- -title: '`ekdosis` et Stylo' +title: 'Créer un nouvel export dans Stylo compatible avec `ekdosis`' date: 2024-02-15 --- @@ -75,5 +75,201 @@ redévelopper tout ce que fait `ekdosis` dans Stylo pour obtenir un comportement similaire. ### Deuxième option -_Work in progress_ (je reviendrai sur cette section lorsque nous aurons avancé -sur son cahier des charges !) + +*Mise à jour effectuée le 09 mai 2024.* + +#### Fonctionnement + +Pour réaliser un export vers pdf et xml-tei [ekdosis](http://www.ekdosis.org/), +la méthode la plus élégante consiste à intégrer ekdosis à Stylo. + +Nous avons déjà presque toutes les technologies à disposition (puisque Pandoc +utilise TeXlive pour compiler les pdf). + +Pandoc interprète les balises LaTeX lorsqu'elle se trouvent dans des documents +en Markdown. + +Pour observer cette interprétation, il faut aller regarder ce qu'il se passe +dans l'AST du document, auquel on accède par la commande suivant : + +`pandoc -f markdown -t native sample.md --lua-filter=style-tex.lua -s -i` + +On y trouve la chose suivante (voir sample.md plus bas) : `RawInline (Format +"tex") "\\emph{emphase}"`. + +Au milieu d'un paragraphe (`Para`), Pandoc parse correctement le latex et le +reconnait sous sa forme brute dans un élément _inline_. + +Lors d'une transformation en PDF, l'emphase déclarée en latex dans le markdown +sera bien interprétée. + +Pour ce qui concerne l'intégration d'ekdosis dans du Markdown nous avons besoin +d'un élément supplémentaire. +Par précaution, il vaut mieux indiquer le package utilisé que l'on déclare +normalement dans le préambule d'un document LaTeX. + +Pandoc accepte cette information si elle est indexée dans une en-tête YAML du +document Markdown sous la clef `header-includes`. + +Cette information est déclarée par exemple dans un fichier sample.md : + +```md +--- +title: "Test 1" +header-includes: | + \usepackage[teiexport]{ekdosis} +--- + +## Test de LaTeX inline + +Ceci est un paragraphe en Markdown. + +Ceci est un paragraphe md avec une \emph{emphase} en latex. + +## Test de blocs + +::: variant +I met my friend \app{ + \lem{Peter} + \rdg{John} + } at the station yesterday. +::: + +::: variant +I met my friend \app{ + \lem{Robert} + \rdg{Roch} + } at the station yesterday. +::: + +``` + +L'en-tête est bien traduite dans l'AST dans le bloc des métadonnées par : + +``` +Meta + { unMeta = + fromList + [ ( "header-includes" + , MetaBlocks + [ RawBlock (Format "tex") "\\usepackage{ekdosis}" ] + ) + , ( "title" , MetaInlines [ Str "Test" , Space , Str "1" ] ) + ] + } +``` + +Avec ceci nous sommes presque prêt à utiliser ekdosis dans Stylo (en préservant +la +syntaxe ekdosis et le traitement par le compilateur LuaLaTeX tels qu'ils ont été +pensés par R. Alessi). + +Pour fonctionner il manque un élément, la balise indiquant l'emploie d'ekdosis +dans le document `\begin{ekdosis}` et `\end{ekdosis}`. + +Les ajouter manuellement dans le Markdown perdrait l'intérêt de l'utilisation du +Markdown (autant tout faire en LaTeX sinon). +L'idée est de rendre ces balises discrètes en utilisant un +filtre LUA où une division en Markdown (inline ou en block) associée à la classe +`variant` ajoute les balises autour du paragraphe où ekdosis est employé. + +C'est ce que l'on peut obtenir avec le filtre suivant: + +```lua +function Div (element) + if element.classes[1] == 'variant' then + return { + pandoc.RawInline('tex', '\\begin{ekdosis}'), + element, + pandoc.RawInline('tex', '\\end{ekdosis}'), + } + end +end +``` + +#### Commandes + +Pour produire le pdf, utiliser les commandes suivantes : + +```sh +pandoc sample.md -o sample.pdf -s -i --pdf-engine=lualatex +--lua-filter=style-tex.lua + +## La commande ci-dessus ne fonctionne pas, voir explication + +## Faire les commandes suivantes: + +pandoc sample.md -o sample.tex -s --lua-filter=style-tex.lua + +lualatex sample.tex + +lualatex sample.tex + +lualatex sample.tex +``` +Compiler le Markdown avec Pandoc (et le compilateur lualatex) fonctionne pour +produire un PDF mais ne fonctionne pas avec ekdosis. + +La raison est assez simple : ekdosis a besoin de compiler le fichier tex 3 fois +pour produire le pdf. La première fois il génère l'appareil critique dans un +fichier temporaire `sample.ekd`, la deuxième fois il opère des calculs pour +numéroter les lignes et la troisième fois il génère le document PDF +correctement. + +Le problème rencontré avec Pandoc est que ce dernier ne prend pas en charge de +fichier extérieur, excepté les filtres et les templates. Du coup, même si on +recompile 3x depuis Pandoc, l'appareil critique présent dans `sample.ekd` ne +sera pas pris en compte. + +Le plus simple est alors de produire le fichier tex avec Pandoc puis de compiler +le tex en PDF en appelant lualatex 3 fois. + +#### Dépendances + +Attention, la version de TeXlive installée sur stylo export est une version +allégée. +Un certain nombre de dépendances sont nécessaires pour faire fonctionner ekdosis +et devront être ajoutées. + +Voici la liste des dépendances d'ekdosis : + +``` +ekdosis-dependencies/ekdosis-dependencies.tex +tex/lualatex/ekdosis/ekdosis.sty +texlive/2024/texmf-dist/tex/generic/etexcmds/etexcmds.sty +texlive/2024/texmf-dist/tex/generic/expkv-bundle/expkv-def.tex +texlive/2024/texmf-dist/tex/generic/expkv-bundle/expkv-pop.tex +texlive/2024/texmf-dist/tex/generic/expkv-bundle/expkv.tex +texlive/2024/texmf-dist/tex/generic/iftex/ifluatex.sty +texlive/2024/texmf-dist/tex/generic/iftex/iftex.sty +texlive/2024/texmf-dist/tex/generic/infwarerr/infwarerr.sty +texlive/2024/texmf-dist/tex/generic/kvdefinekeys/kvdefinekeys.sty +texlive/2024/texmf-dist/tex/generic/ltxcmds/ltxcmds.sty +texlive/2024/texmf-dist/tex/generic/pdftexcmds/pdftexcmds.sty +texlive/2024/texmf-dist/tex/latex/auxhook/auxhook.sty +texlive/2024/texmf-dist/tex/latex/base/article.cls +texlive/2024/texmf-dist/tex/latex/base/size10.clo +texlive/2024/texmf-dist/tex/latex/base/ts1cmr.fd +texlive/2024/texmf-dist/tex/latex/etoolbox/etoolbox.sty +texlive/2024/texmf-dist/tex/latex/expkv-bundle/expkv-def.sty +texlive/2024/texmf-dist/tex/latex/expkv-bundle/expkv-opt.sty +texlive/2024/texmf-dist/tex/latex/expkv-bundle/expkv-pop.sty +texlive/2024/texmf-dist/tex/latex/expkv-bundle/expkv.sty +texlive/2024/texmf-dist/tex/latex/float/float.sty +texlive/2024/texmf-dist/tex/latex/graphics/keyval.sty +texlive/2024/texmf-dist/tex/latex/ifoddpage/ifoddpage.sty +texlive/2024/texmf-dist/tex/latex/kvoptions/kvoptions.sty +texlive/2024/texmf-dist/tex/latex/kvsetkeys/kvsetkeys.sty +texlive/2024/texmf-dist/tex/latex/l3backend/l3backend-luatex.def +texlive/2024/texmf-dist/tex/latex/lineno/lineno.sty +texlive/2024/texmf-dist/tex/latex/paracol/paracol.sty +texlive/2024/texmf-dist/tex/latex/refcount/refcount.sty +texlive/2024/texmf-dist/tex/latex/snapshot/snapshot.sty +texlive/2024/texmf-dist/tex/latex/trivfloat/trivfloat.sty +texlive/2024/texmf-dist/tex/latex/zref/zref-abspage.sty +texlive/2024/texmf-dist/tex/latex/zref/zref-base.sty +texlive/2024/texmf-dist/tex/latex/zref/zref-user.sty +texlive/2024/texmf-dist/tex/lualatex/luacode/luacode.sty +texlive/2024/texmf-dist/tex/luatex/ctablestack/ctablestack.sty +texlive/2024/texmf-dist/tex/luatex/luatexbase/luatexbase.sty +``` |