Mit dem LaTeX-Paket pythontex I kann man Python-Code in das Latex-Dokument einfügen, das ausgeführt (und auf Wunsch in Ihre Latex-Datei gedruckt) wird, wenn Sie Latex ausführen. Ich verwende Auctex zum Bearbeiten von Latexdateien. Das Bearbeiten des Python-Codes im Latex-Dokument ist jedoch etwas schmerzhaft, da sich der Puffer im Latex-Modus und nicht im Python-Modus befindet. Daher gibt es keine Hilfe für das korrekte Einrücken des Python-Codes und keine Syntaxhervorhebung .
Gibt es also eine vernünftige Möglichkeit, den Python-Modus mit dem Latex-Modus zu mischen? Zum Beispiel, dass der Puffer automatisch in den Python-Modus springt, wenn sich der Punkt in einem Python-Code befindet, der abgeschnitten wurde? Was muss ich meiner .emacs-Datei hinzufügen, damit sie funktioniert? Irgendwelche anderen Ideen?
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
print('test1')
def f( ):
print('test2')
f()
\end{pycode}
\pyc{f()}
\end{document}
Beachten Sie, dass pythontex
mehrere Umgebungen und Befehle hat , die pythoncode enthalten kann, zum Beispiel pycode
oder pyverbatim
als Umgebungen oder \pyc
oder \py
als Befehle.
quelle
org-mode
bewerkstelligen (es wird auch TeX generiert), fügt jedoch zusätzlich zu LaTeX eine weitere Indirektionsebene hinzu und macht es manchmal schwierig, den generierten TeX-Code zu beeinflussen.Antworten:
MMM-mode
(mehrere Hauptmodi) scheint genau das zu sein, wonach Sie suchen. Es wird im Emacs-Wiki erwähnt . Sie müssen eine Submode-Klasse definieren, um LaTeX und Python zu mischen. Geben Sie dabei an, dass Python-Teile durch diepycode
LaTeX-Tags begrenzt werden. Das Hinzufügen von Folgendem zu Ihrer Init-Datei sollte dies tun:Die Schlüsselwörter
:front
und:back
geben reguläre Ausdrücke für Trennzeichen an. In den letzten beiden Zeilen wird darum gebeten, dassmmm-mode
dielatex-python
Klasse standardmäßig in allen Puffern aktiviert wird, deren Hauptmodus istlatex-mode
.Weitere Optionen finden Sie in der Dokumentation (manuelles Aktivieren, basierend auf dem Dateinamen oder mit Dateivariablen).
Es gibt zwei Möglichkeiten, mehrere Trennzeichenpaare anzugeben. Erstens können mehrere Klassen in einer Gruppe verbunden werden . Anstatt die
latex-python
Klasse zu definieren, definieren wir sie unten als eine Gruppe, die die beiden Klassen enthältlatex-python-envs
undlatex-python-cmds
(selbst die Befehle\pyc{…}
und\py{…}
LaTeX erkennt ).Zweitens kann jede Klasse mehr verschiedenen delimiter Paare angeben: Klasse
latex-python-envs
unterhalb beide erkennenpycode
undpyverbatim
LaTeX ENVs (~1
in:back
in der ersten eingeklammerten Gruppe abgestimmt auf den Wert bezieht sich auf:front
).Damit Trennzeichen erkannt werden, müssen Sie
mmm-parse-buffer
(C-c % C-b
) (odermmm-parse-region
odermmm-parse-block
dh ein paar Linien um den Punkt). Wenn Sie es gewohnt sind, LaTeX envs durchLaTeX-insert-environment
(C-c C-e
) einzufügen, kann es zweckmäßig sein, die Ausführung nach Abschluss zu empfehlenmmm-parse-block
, damit MMM die gerade eingefügten Tags sofort erkennt:quelle
\pyc
oderpyverbatim
) ? Gibt es eine Möglichkeit, den mmm-Modus automatisch zu erkennen, wenn ich einepycode
Umgebung einfüge ?\begin{pycode}
+ ENTER + dann einefor
Schleife einfügen , zBfor i in range(0,10):
+ ENTER +print(i)
+ ENTER +\end{pycode}
. Die EINGABETASTE nach derfor
Zeile rückt diese Anweisung ein,print(i)
funktioniert dies jedoch nicht für Sie?pycode
Umgebung einfügen , beabsichtigt der Latex-Modus diese automatisch und Sie müssen TAB explizit verwenden, um dies zu korrigieren. Ein anderes Problem tritt auf, wenn Sie Pycode in einer anderen Umgebung verwenden. Ich habe einen Screencast gemacht, um klar zu machen, was ich meine: expirebox.com/download/e348355feabb8bb5d8c8399b97bccdb8.html\pyc
und\py
abgleichen möchten ?