Python Code gesplittet einfügen

Schriftbild, Absätze und Auflistungen einstellen


lizagliza
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Mi 13. Jun 2018, 11:16

Python Code gesplittet einfügen

Beitrag von lizagliza »

Hallo,

Ich würde gerne meinen Pythoncode gesplittet einfügen. Ich hätte gerne, dass die Zeilen des Codes nummeriert sind und jeder "Codeschnipsel" mit einem Kasten umrandet ist also in der Art

"hier erkläre ich den Code

1 mein code
 2 mein code 

jetzt erkläre ich wieder was dazu

3 geht es weiter mit dem Code und der passenden Zeilennummerierung

"

Kann mir jemand dazu einen Tipp geben?
Wie ich den Code vollständig einfüge weiß ich, allerdings hätte ich auch dort gerne einen Kasten/Rahmen drum.

Vielen Dank und liebe Grüße
lizagliza


Grummelgast

Re: Python Code gesplittet einfügen

Beitrag von Grummelgast »

listings und ggf. dessen Erweiterung mit tcolorbox


Stammgast

Re: Python Code gesplittet einfügen

Beitrag von Stammgast »

Es gibt da noch mehr Pakete, und wesentlich bessere als »listings«.

  1. Basierend auf »listings«.

  2. Benötigen ›PythonPygments.


lizagliza
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Mi 13. Jun 2018, 11:16

Re: Python Code gesplittet einfügen

Beitrag von lizagliza »

Danke erstmal :) einen Rahmen habe ich jetzt einfach mit der Optiion [frame=single].
Allerdings ist der Rahmen jetzt immer an Stellen an denen ein Kommentar (in grün) steht auch grün.

\documentclass[11pt, a4paper]{scrreprt}
\usepackage[utf8]{inputenc}
%\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath,amssymb,amstext} 
\usepackage{scrlayer-scrpage}
\usepackage{graphicx} %Bilder einbinden
\usepackage{amsthm}
\usepackage{color} 
\usepackage{array}
\usepackage{floatrow}
\usepackage{capt-of}
\pagestyle{scrheadings}
\clearpairofpagestyles
\chead{\headmark}
\cfoot[\pagemark]{\pagemark}
\usepackage{hyperref}
%für pseudocode
\usepackage{algorithm}
\usepackage{algorithmic}
\usepackage{lmodern}
\usepackage[list=true, font=large, labelfont=bf, 
labelformat=brace, position=top]{subcaption} %Damit Subtabellen beschriftet sind
%Damit Subtabellen nummeriert werden:
\DeclareCaptionSubType*[arabic]{table}
\captionsetup[subtable]{labelformat=simple,labelsep=colon}
%um Matlab-code einzubinden, sogar farbig
\definecolor{mygreen}{RGB}{28,172,0} % color values Red, Green, Blue
\definecolor{mylilas}{RGB}{170,55,241}
% Paket zur besseren Implementierung von Code in den Fließtext
\usepackage{fancyvrb}
\usepackage{listings}
\lstset{language=Python,%
	%basicstyle=\color{red},
	breaklines=true,%
	morekeywords={matlab2tikz},
	keywordstyle=\color{blue},%
	morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
	identifierstyle=\color{black},%
	stringstyle=\color{mylilas},
	commentstyle=\color{mygreen},%
	showstringspaces=false,%without this there will be a symbol in the places where there is a space
	numbers=left,%
	numberstyle={\tiny \color{black}},% size of the numbers
	numbersep=9pt, % this defines how far the numbers are from the text
	emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise
	%emph=[2]{word1,word2}, emphstyle=[2]{style},    
} \begin{document} \begin{lstlisting}[frame=single] # Def Mesh mesh = UnitCubeMesh(5, 5, 5) #mesh = UnitCubeMesh(10, 10, 10) print('dim mesh:', mesh.geometry().dim()) # Zeigt die Dimension des mesh an #Definiere Funktionenraume \end{lstlisting} erläuterung ... \begin{lstlisting}[frame=single] #Definiere Funktionenraume \end{lstlisting} \begin{lstlisting}[frame=single] # Definiere Randwerte def boundary(x, on_boundary): return on_boundary w = Function(W) bc = DirichletBC(W, w, boundary \end{lstlisting} \end{document}

was ich aber irgendwie nicht hinbekomme ist, dass wenn ich das Splitte in einzelne Blöcke um dazwischen den Code zu erläutern usw., dass dann die Zeilen weitergezählt werden statt wieder bei 1 beginnen. Geht das irgendwie automatisch? Alternativ würde mir manuell natürlich auch genügen

Vielen Dank und liebe grüße


Grummelgast

Re: Python Code gesplittet einfügen

Beitrag von Grummelgast »

Dein Beispiel ist wegen der Leerzeile (= Absatz) in \lstset leider nicht lauffähig. Bitte achte immer auf die Lauffähigkeit und überprüfe diese auch nach dem Absenden noch einmal mit dem LaTeX-Ausgabe-Knopf. Minimaler dürfte es nach lesen der Minimalbeispiel-Anleitung sicher auch noch zu erreichen sein.

Ein zusätzliches

	rulecolor=\color{black},

solle bezüglich der Framefarbe helfen. Noch schöner gehen Rahmen aber mit dem bereits erwähnten tcolorbox.

Bezüglich der Nummerierung seit auf Option firstnumber=auto, firstnumber=last und name=… verwiesen.

BTW:

  • 11pt, a4paper ist Voreinstellung bei scrreprt.

  • \usepackage[utf8]{inputenc} braucht man seit LaTeX 2018-04-01 nicht mehr.

  • capt-of braucht man mit einer KOMA-Script-Klasse nicht und sollte es auch nicht laden. Auch das Paket caption (verwendet von subcaption) stellt die Funktionalität bei Bedarf zur Verfügung. Damit ist capt-of quasi doppelt überflüssig.

  • Seitenstil scrheadings ist die Voreinstellung von scrlayer-scrpage. Es ist aber zu empfehlen, das Paket explizit mit Option automark oder manualmark zu laden.

  • hyperref sollte von wenigen, dokumentieren Ausnahmen abgesehen das letzte Paket sein.


lizagliza
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Mi 13. Jun 2018, 11:16

Re: Python Code gesplittet einfügen

Beitrag von lizagliza »

Danke, ich habe aufgeräumt ;)

firstnumber=auto, firstnumber=last und name=…

Das sind optionen für \lstset, oder? Ist das so korrekt?

\lstset{language=Python,%
	%basicstyle=\color{red},
	breaklines=true,%
	morekeywords={matlab2tikz},
	keywordstyle=\color{blue},%
	morekeywords=[2]{1}, keywordstyle=[2]{\color{black}},
	identifierstyle=\color{black},%
	stringstyle=\color{mylilas},
	commentstyle=\color{mygreen},%
	showstringspaces=false,
	numbers=left,%
	numberstyle={\tiny \color{black}},
	numbersep=9pt, 
	firstnumber=auto, 
firstnumber=last
	emph=[1]{for,end,break},emphstyle=[1]\color{red}, %some words to emphasise
	%emph=[2]{word1,word2}, emphstyle=[2]{style},    
}

Das klappt super. Danke

Aber ich habe noch einen zweiten Code. Der soll natürlich bei seiner ersten Zeile auch bei 1 beginnen. Wie kann ich das ändern?

Hat sich erledigt. Danke :)
Habe bei dem neuen Code einfach die Option gesetzt und damit funkitoniert es :)

\begin{lstlisting}[firstnumber=1]
Zuletzt geändert von Stefan Kottwitz am Fr 30. Jul 2021, 19:25, insgesamt 1-mal geändert.
Grund: Code markiert

Grummelgast

Re: Python Code gesplittet einfügen

Beitrag von Grummelgast »

Sowohl firstnumber=auto als auch firstnumber=last ist natürlich Unfug. Lies die Option in der Anleitung nach und verwende dann diejenige, die besser passt. Lies auch unbedingt die Erklärung zu name. Und diese Optionen gibt man normalerweise nicht global, sondern beim jeweiligen Listing an.

Wenn du das sorgfältig nachgelesen hast, dann sollte auch klar sein, wie man bei einem neuen Listing wieder (weitgehend automatisch) bei 1 beginnt. Man kann sogar mehrere verschiedene Listings immer wieder unterbrechen, zwischen den Listings hin und her wechseln und trotzdem die Fortsetzung korrekt bekommen – wenn man die genannten Optionen in der listings-Anleitung studiert hat.

BTW: Gewöhnte dir bitte an, Code korrekt zu markieren. Er wird sonst eventuell durch die Formatierung verfälscht. Und bei Fragen natürlich immer ein Minimalbeispiel angeben, damit wir direkt daran arbeiten können.


Antworten