Je voudrais utiliser un langage de balisage léger pour prendre des notes dans mes cours universitaires.
Mon éditeur de choix est gedit, et j'ai trouvé outils reStructuredText pour Gedit , qui exécutera le processeur reStructuredText et affichera le code HTML dans un volet dans gedit. C'est super, et 80% du chemin.
Mais pour beaucoup de mes cours, j'ai besoin d'inclure des équations mathématiques ou des caractères grecs dans mes notes. Bien que je ne sois pas très familier avec LaTeX, je crois comprendre qu'il a ces capacités.
Comment puis-je utiliser LaTeX dans un document reST? Le document reST devrait-il être traité en LaTeX, puis rendu en HTML, ou existe-t-il un meilleur moyen? Le démarque simplifierait-il cela? Je peux modifier le plugin gedit si nécessaire.
Enfin, quelqu'un fait-il cela? Avez-vous d'autres suggestions pour prendre des notes de classe dans un éditeur de texte brut?
Merci!
Depuis la version 0.8, il est pris en charge nativement: vous ne devriez plus utiliser de solution de contournement. La syntaxe est également très simple. C'est la même chose que pour les mathématiques du latex, mais sans le $$
Vous pouvez donc simplement écrire ce qui suit pour un bloc mathématique
.. math::
\frac{ \sum_{t=0}^{N}f(t,k) }{N}
Ou si vous voulez écrire en ligne, vous pouvez utiliser ceci:
:math:`\frac{ \sum_{t=0}^{N}f(t,k) }{N}`
notez les délimitations délimitant là.
METTRE À JOUR:
dans les versions plus récentes, il semble nécessaire d'utiliser une double barre oblique inverse pour les éléments mathématiques, c'est donc \\frac
et pas \frac
Il existe un support natif pour un rôle et une directive "mathématiques" (en utilisant la syntaxe d'entrée LaTex) depuis la version 0.8 (2011-07-07).
C'est ce que je fais:
Ajoutez un rôle pour les mathématiques au début de votre document reST:
.. role:: raw-math(raw)
:format: latex html
Écrivez vos maths comme
:raw-math:`$$ \frac{s}{\sqrt{N}} $$`
(utilisation $$ ... $$
si vous le souhaitez dans un bloc, ou $ ... $
si vous le souhaitez en ligne.)
Générez une sortie html comme ceci:
rst2html --stylesheet=/path/to/my_beautiful_stylesheet.css my_file.rst \
| tidy -q | /path/to/itex2MML > my_file.xhtml
Cela génère le html avec rst2html
, range avec tidy
puis convertit les maths en latex en MathML avec itex2MML
, sortie sur un fichier xhtml.
Remarques:
LaTeX et ReST sont deux solutions au même problème (balisage de document entier), et je ne suis pas sûr que l'un serait heureux de vivre à l'intérieur de l'autre.
J'ai vu du code pour utiliser un sous-ensemble de TeX pour générer une équation graphique qui est ensuite extraite en HTML ou similaire (par exemple, macro LaTeX Formula de Trac ), qui peut être la meilleure solution disponible.
En décomposant un peu votre problème, le premier objectif est d'obtenir la sortie du code latex textuellement (sauf pour les cgi-échappements pour <,>, etch.) Dans le code HTML généré à partir du balisage léger de votre choix: une fois que vous l'avez là, il peut facilement être LaTex'ed par mathJax (hautement recommandé) ou itex comme mentionné par gozzilli.
Tout d'abord, je dois dire que l'utilisation de Markdown au lieu de ReST serait probablement plus facile car ReST utilise\pour s'échapper, donc tout LaTeX doit être protégé. Pour un exemple de la façon dont les choses fonctionnent bien avec markdown et mathJax , allez jouer avec la configuration sur mathoverflow.net .
Néanmoins, je suppose que vous voulez vraiment ReST (et mathJax), auquel cas il y a deux façons d'avancer: utiliser le stock ReST (et un échappement encombrant), ou ajouter des gestionnaires LaTeX aux docutils.
Option 1 - Stock ReST:
Pour les mathématiques en ligne, utilisez simplement verbatim plus tout ce que vous recherchez dans votre postprocesseur: `` $ x <\ pi $ ``. Pour les mathématiques sur plusieurs lignes, vous voulez un bloc littéral, mais vous devez définir un attribut de classe pour, par exemple. MathJaX pour l'analyser, sinon il saute <pre>
Mots clés:
.. class:: mathjax_process
::
\begin{equation}
x<\pi
\end{equation}
Option 2: étendez votre processeur ReST
Si vous êtes prêt à faire un peu de piratage pour étendre votre processeur ReST, vous pouvez obtenir une notation beaucoup plus agréable pour les littéraux LaTeX, en définissant un texte interprété personnalisé role pour le latex en ligne (par exemple :latex:`x<\pi`
) et un directive personnalisé pour les mathématiques sur plusieurs lignes, par exemple.
.. latex::
\begin{equation}
x<\pi
\end{equation}
La notation mathématique en ligne peut même être raccourcie en `x<\pi`
si vous utilisez default-role .
Il existe plusieurs façons de mettre en œuvre le rôle et la directive. Je suis arrivé (à peu près) à ce qui suit qui a la fonctionnalité Nice qui (contrairement à la plupart des autres hacks que j'ai vus), il se dégrade en code LaTex littéral pour les écrivains sans post-traitement intégré.
from docutils import nodes, utils
from docutils.parsers.rst import directives, Directive
class Latex(Directive):
""" Latex directive to display LaTeX as escaped literal wrapped in
<pre class="latex">.
"""
required_arguments = 0
optional_arguments = 0
has_content = True
def run(self):
self.assert_has_content()
prenode=nodes.literal_block(self.block_text,
'\n'.join(self.content),
classes=['latex'])
return [prenode]
directives.register_directive('latex', Latex)
def latex_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
node = nodes.literal(rawtext,
'\(%s\)'%utils.unescape(text, 1),
classes=['latex'])
return [node],[]
register_local_role('latex', latex_role)
Ce qui précède utilisera la classe "latex" pour marquer les éléments à traiter, vous devrez donc configurer mathJax ou équivalent pour rechercher cette classe. Vous pouvez également modifier le code ci-dessus pour définir la classe sur "mathjax_process", qui est la classe de substitution mathJax par défaut.
Le problème est que reST n'a pas vraiment de plugins. Vous pouvez choisir un framework extensible tel que Sphinx ; un plugin pour JSMath est déjà inclus, et un plugin pour MathJax est également possible. De plus, Sphinx utilise LaTeX pour construire directement des documents PDF.
Une autre solution plus légère consiste à modifier le modèle reST pour inclure MathJax afin que vous puissiez simplement utiliser la syntaxe de MathJax (semblable à LaTeX) dans le document.
Mais en général, j'utilise LaTeX directement pour tout problème sérieux - les capacités de personnalisation de ces langages de balisage légers ne sont tout simplement pas assez complètes pour tout.
Cet élément du Docutils FAQ décrit une façon d'inclure relativement facilement les mathématiques TeX. Vous définissez d'abord un rôle pour le texte interprété qui transmet l'équation directement à LaTeX:
.. role:: raw-latex(raw)
:format: latex
Ensuite, vous pouvez utiliser ce rôle dans votre texte
The area of a circle is :raw-latex:`$\pi r^2$`
L'entrée FAQ mentionne également quelques autres façons de le faire, y compris une approche de préprocesseur qui peut être utilisée pour rendre le calcul sur une image lors de la génération HTML.
Notez que la version 0.8 de docutils (qui analyse reStructuredText) prend en charge les mathématiques LaTeX. Voir http://article.gmane.org/gmane.text.docutils.user/6255 pour de nombreux exemples. Les choix pour l'option "--math-output" sont: MathML, HTML, MathJax et LaTeX.
L'extension de démarque de Pandoc permet de calculer en ligne ou d'afficher des mathématiques LaTeX; vous venez de le mettre entre les signes dollar (immédiatement adjacents) comme ceci: $\sqrt {-1} $ et il est traité comme vous vous y attendez. J'utilise cette fonctionnalité tout le temps, et je ne pense pas que ce soit impossible du tout. Voir le manuel http://johnmacfarlane.net/pandoc/README.html#math
Une fois le démarque analysé, pandoc peut écrire du HTML, LaTeX, ReST, RTF, DocBook, ODT, des pages de manuel, etc., etc. s'affiche immédiatement en HTML ou RTF. (Il fournit un certain nombre d'options pour traiter les mathématiques LaTeX dans les documents non LaTeX.)
Pandoc analyse également ReST (et HTML, et LaTeX pas trop sophistiqué). J'avais donc espéré donner une solution impliquant le lecteur ReSt, mais il ne semble pas avoir de mécanisme spécial pour traiter les mathématiques; voir la discussion du problème 249 http://code.google.com/p/pandoc/issues/detail?id=249 Je vais étudier de plus près pour voir.
Je ne pense pas que quiconque ait encore créé un plugin pandoc pour Gedit (il existe un support élaboré dans emacs et dans TextMate, je sais) - ce serait génial!
Pour développer les réponses précédentes, voici comment j'ai fait MathJax travailler avec ReST et Docutils , sans avoir besoin de LaTeX:
Utilisez des mathématiques de style LaTeX dans ma source ReST, telles que:
The radar backscatter coefficient is $\sigma^0$.
Inclure cela quelque part dans le fichier (je mets le mien en bas):
.. raw:: html
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"HTML-CSS": { availableFonts: ["TeX"] }
});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
Convertir en HTML:
rst2html report.rst report.html
Chargez le HTML dans un navigateur moderne. Le script MathJax est téléchargé et appliqué au HTML lors de la visualisation. Tout me va bien!
Un grand merci à http://www.thales.math.uqam.ca/~labbes/Sage/rst2sws/ pour l'aide!
MISE À JOUR: J'ai remarqué que, bien que le code HTML de sortie fonctionne correctement dans Firefox, MathJax met longtemps à fonctionner dans Chrome, puis il donne une erreur. Je l'ai corrigé en changeant la source du script dans la dernière ligne de
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
à
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"
.
Je crois que la raison en est que FireFox prend en charge MathML, Chrome (Webkit, vraiment) ne le fait pas encore (du moins pas complètement; vous pouvez tester le support de votre navigateur ici ) .
Parce que je n'ai pas besoin de MathML, juste de TeX, j'utilise la version correspondante de MathJax et elle se charge maintenant rapidement en Chrome sans aucune erreur. De plus, il serait beaucoup plus rapide pour vous de taper mathématique TeX -style que MathML-style.
Au lieu de rst2html, utilisez rst2mathml.py .
Il étend les docutils avec un mode latex-math. Le contenu de ce mode est converti en MathML.
Je suggère ( NoTex : Il a un support rST intégré utilisant LaTex uniquement pour les trucs de présentation et les équations mathématiques. Par exemple, dans NoTex vous écririez d'abord une substitution rST comme
.. |E=mc²| replace:: :math:`E = mc ^ 2`
puis utilisez simplement |E=mc²|
où vous en avez besoin; NoTex utilise LaTex pour le traduire en quelque chose qui ressemble à E=mc²
(sans les symboles de tuyau qui indiquent les substitutions rST) et il est rendu de la même manière en HTML en utilisant MathJax.