Hallo Leute
da ich bald einen Python-Kurs geben werde, bin ich momentan gerade daran meine Folien mit Latex zu schreiben. Jetzt stellt sich mir aber ein Problem:
Wie kann ich Python-Code mit Latex korrekt darstellen?
Hat da schon jemand Erfahrung?
Danke im voraus und liebe Grüsse
Clython
Pythoncode in LaTeX
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Es gibt z.B. das Paket listings. Hier mal ein kleines Beispielsnippet:
Gruß, mawe
Es gibt z.B. das Paket listings. Hier mal ein kleines Beispielsnippet:
Code: Alles auswählen
\documentclass{article}
\usepackage{listings}
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt}
\lstset{language=Python}
\begin{document}
Trallala, hier kommt gleich ein Python-Code ...
\begin{lstlisting}
for i in range(3):
print i
\end{lstlisting}
\end{document}
Die Syntaxbeschreibung beim listings-Package hinkt immer ein bischen hinterher. Das letzte mal als ich aktualisiert hatte, gab's immer noch kein ``assert``. Deshalb habe ich mir folgendes kleines Skript geschrieben, das die Schlüsselwörter aus dem laufenden Interpreter in eine Sprachdefinition für das listings-Package schreibt.
Code: Alles auswählen
#!/usr/bin/env python
"""Syntax highlighting generator for LaTeX *listings* package.
The script creates a language definition from the keywords of the running
interpreter.
Just embed the output of this script into your LaTeX document and choose the
language ``[version]Python`` where *version* is the appropriate version of
the interpreter that was used to generate the output, e.g. ``2.4`` for a
interpreter version 2.4.1::
\\lstset{language=[2.4]Python}
\\lstinputlisting{test.py}
"""
import sys
from keyword import kwlist
__author__ = "Marc 'BlackJack' Rintsch"
__date__ = '$Date: 2006-02-27 16:05:10 +0100 (Mon, 27 Feb 2006) $'
__revision__ = '$Rev: 815 $'
source = r"""
%%%%
%%%% Update of keywords extracted from running Python interpreter.
%%%% Extends existing Python definition of the listings package.
%%%%
\lstdefinelanguage[%s]{Python}[]{Python}
{morekeywords={%s}}
%%%%
%%%% Literate Python. (Experimental)
%%%%
\lstdefinelanguage[Literate]{Python}[%s]{Python}
{literate=
{\ in\ }{~$\in$~}{3}
{\ lambda\ }{~$\lambda$~}{3}
{\ lambda:}{~$\lambda$:}{3}
{=}{$\gets$}{2}
{==}{$=$}{1}
{<=}{$\leq$}{1}
{>=}{$\geq$}{1}
{!=}{$\neq$}{1}
{\ and\ }{~$\wedge$~}{3}
{\ or\ }{~$\vee$~}{3}
{\ not\ }{~$\neg$}{2}
}
"""
def get_keywords(first_length=10, max_length=70):
"""Get keywords as string.
Format the keywords as comma delimited lines where no line is longer
than `max_length`. The first line is max. `max_length` - `first_length`
characters long.
"""
result = list()
line = list()
line_length = first_length
for keyword in kwlist:
word_length = len(keyword)
if (line_length + word_length) >= max_length:
result.append(line)
line = list()
line_length = 0
else:
line.append(keyword)
line_length += word_length + 1
if line:
result.append(line)
return ',\n '.join(map(','.join, result))
def main():
"""Main function."""
version = '%s.%s' % sys.version_info[:2]
keywords = get_keywords()
print source % (version, keywords, version)
if __name__ == '__main__':
main()
Hey, ihr scheint ja LaTeX-Gurus zu sein, vielleicht kann mir einer damit helfen:
Hab mal auf Beamer (da mir gesagt wurde das Seminar-Package sei veraltet) umgestellt, aber wenn ich in einer frame-Umgebung die listings-Umgebung benutze, bekomme ich einen Fehler:
Wenn ich die frame-Umgebung nicht benutze, funktionierts, das Layout der Folie ist dann aber nicht optimal. Was ist hier nun schon wieder das Problem?
Hab mal auf Beamer (da mir gesagt wurde das Seminar-Package sei veraltet) umgestellt, aber wenn ich in einer frame-Umgebung die listings-Umgebung benutze, bekomme ich einen Fehler:
Code: Alles auswählen
TeX capacity exceeded, sorry [input stack size=1500]- \end{frame}
Das ist so etwas ähnliches wie die Beschränkung bei CPython, die man mit `sys.getrecursionlimit()` abfragen kann. Wenn mehrere komplexere Pakete/Funktionen benutzt werden, dann läuft bei Tex gerne mal der Stack über. Genau wie bei Python kann man das bei Tex irgendwo selbst einstellen. Bei Tex in irgendeiner Konfigurationsdatei. Ich hab's auch selbst schonmal machen müssen, weiss aber beim besten Willen nicht mehr wo. Eine Suchmaschine hilft sicher weiter.
Ein kleiner Nachtrag:
Vor einiger Zeit (Ich weiß nicht mehr wann und habe den Thread auch nicht mehr finden können) gab es auf der Python-Tutor-Mailingliste einen Thread zu eben der Grundfrage mit verschiedenen sehr schönen Lösungen. Wenn jemand dem nachgehen möchte ...
Ansonsten finde ich die Lösung von BlackJack aber auch nicht schlecht ...
Gruß,
Christian
Vor einiger Zeit (Ich weiß nicht mehr wann und habe den Thread auch nicht mehr finden können) gab es auf der Python-Tutor-Mailingliste einen Thread zu eben der Grundfrage mit verschiedenen sehr schönen Lösungen. Wenn jemand dem nachgehen möchte ...
Ansonsten finde ich die Lösung von BlackJack aber auch nicht schlecht ...
Gruß,
Christian