Traitement différents spans destinés à différents formats (tex ou html)
C'est une question qu'il faut traiter car on aura plusieurs cas de ce type: SI on fait du single source publishing il est nécessaire d'être capable d'avoir un traitement différents pour des bouts de texte.
Le cas se présente typiquement dans mon livre pour les PURH: ceen/de-code-et-de-plomb/01-matiere#17 (closed)
Il peut y avoir plusieurs cas:
- des commandes différentes
- des bouts de texte différents
- des contenus qui vont seulement dans un format.
Je propose l'approche suivante: créer des classes traitées seulement dans un format.
Par ex:
[mon texte]{.print}[autre texte]{.online} doit sortir mon texte pour la sortie tex et autre texte pour la sortie html
Cela permet par exemple d'avoir (pour mon livre) des choses du type:
[(\Plato[Phèdre]{275}[d]{=latex})]{.print}[(Plato, _Phèdre_ 275d]{.online}
ou
[\lettrine{D}]{.print}[D]{.online}
Mais on peut imaginer aussi:
[]{.print}[Cf. cette belle image ![ma belle image]()]{.online} <!--le premier span n'est pas nécessaire-->
Ce comportement peut être obtenu avec le filtre suivant:
import panflute as pf
def filter_span(elem, doc):
if isinstance(elem, pf.Span): #on pourrait le faire aussi pour les div?
if 'print' in elem.classes and doc.format == 'latex':
return list(elem.content)
elif 'online' in elem.classes and doc.format in ['html', 'html5']:
return list(elem.content)
else:
return []
def main():
pf.run_filter(filter_span)
if __name__ == "__main__":
main()
Ensuite il suffit d'appeler pandoc avec l'option --filter=./nomdufiltre.py.
Testé vite fait sur ma machine (pandoc 3.6)
Qu'en pensez-vous @dlarlet et @antoinefauchie ?