\documentclass[12pt,a4paper,oneside,ngerman]{scrbook} \usepackage[english,ngerman]{babel} \usepackage{textcomp,amsmath,amsfonts,booktabs,microtype,graphicx,enumitem,caption,nicematrix,eurosym} \usepackage{xcolor} \usepackage{listings} \definecolor{light-gray}{gray}{0.95} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{codegray}{rgb}{0.4,0.4,0.4} \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codered}{rgb}{0.8,0.25,0.33} \definecolor{codeblue}{rgb}{0,0.58,0.71} \lstset{literate={\%}{{{\color{codepurple}\%}}}1} \lstdefinestyle{mystyle}{ backgroundcolor=\color{light-gray}, commentstyle=\color{codeblue}, stringstyle=\color{codered}, keywordstyle=\color{codegreen}, numberstyle=\tiny\color{codegray}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2 } \lstset{style=mystyle} \begin{document} \begin{lstlisting} [language=Python] tasks = [] for y in range(1,worksheet.nrows): tasks.append((worksheet.cell_value(y,1))) \end{lstlisting} \end{document}
listing - Code mit mehreren Farben für keywordstyle
listing - Code mit mehreren Farben für keywordstyle
Hey, ich habe einen Code aus Python den ich gerne in meine Arbeit integrieren würde. Klappt alles auch soweit. Nun ist das Problem, dass ich mit den Standard Befehlen wie keywordstyle, commandstyle etc. arbeiten kann. Jedoch möchte ich dass einige Zeichen wie %,=,+,Zahlen,... auch in einer bestimmten Farbe dargestellt werden sollen. Dazu habe ich eine Möglichkeit gefunden die aber nur für % gilt und wenn ich den gleichen Code einfach nur mehrmals mit den anderen Zeichen Wiederhole funktioniert es auch nicht. Gibt es denn generell ne Möglichkeit es wie bei keywordstyle oder so zu implementieren oder wenn nicht welche Tricks könnte ich sonst anwenden um mehrere Arten von Zeichen farbig darzustellen? Mein Minimalbeispiel ist so:
Ich habe den Codezeile für das farbig machen von % fett hervorgehoben. Wie man sieht funktioniert das Grün wie es soll, das lila für % auch aber genau dass soll auch das = farbig machen. Vielen Dank
Re: listing - Code mit mehreren Farben für keywordstyle
Bei mir funktioniert:
Ich vermute daher, dass du in erster Linie die Reihenfolge von Einstellungen nicht beachtet hast. Wenn du sowohl mit \lstdefinestyle, als auch \lstset, als auch Optionen zu lstlisting arbeitest, dann kann es natürlich passieren, dass beispielsweise die Sprachauswahl frühere Einstellungen von \lstset wieder überschreibt. Ebenso kann eine spätere style-Einstellung vorherige Einstellungen, die nicht an den Stil gebunden sind, überschreiben. Wenn du also spezielle Einstellungen für Python haben willst, dann definiere einen Stil, bei dem erst die Sprache und dann die davon abweichenden Einstellungen vorgenommen werden. Oder definiere gleich eine neue Umgebung PythonCode (Anleitung dazu beachten!), bei der alle Einstellungen wunschgemäß vorgenommen werden.
BTW: Mir gefällt übrigens die Darstellung mit minted besser. Ob damit auch die Farbe einzelner Zeichen geändert werden kann, weiß ich aber nicht. Solche Anforderungen hatte ich noch nie. Eine weitere Alternative wäre hvpygmentex. Das habe ich mir aber noch nicht angeschaut.
\documentclass[12pt,a4paper,oneside,ngerman]{scrbook} \usepackage[english,ngerman]{babel} \usepackage{textcomp,amsmath,amsfonts,booktabs,microtype,graphicx,enumitem,caption,nicematrix,eurosym}% min. textcomp braucht es AFAIK inzwischen nicht mehr \usepackage{xcolor} \usepackage{listings} \definecolor{light-gray}{gray}{0.95} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{codegray}{rgb}{0.4,0.4,0.4} \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codered}{rgb}{0.8,0.25,0.33} \definecolor{codeblue}{rgb}{0,0.58,0.71} \lstset{literate={\%}{{{\color{codepurple}\%}}}1} \lstdefinestyle{mystyle}{ backgroundcolor=\color{light-gray}, commentstyle=\color{codeblue}, stringstyle=\color{codered}, keywordstyle=\color{codegreen}, numberstyle=\tiny\color{codegray}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2 } \lstset{style=mystyle} \begin{document} \begin{lstlisting} [language=Python,literate={=}{{{\color{codepurple}=}}}1] tasks = [] for y in range(1,worksheet.nrows): tasks.append((worksheet.cell_value(y,1))) \end{lstlisting} \end{document}
BTW: Mir gefällt übrigens die Darstellung mit minted besser. Ob damit auch die Farbe einzelner Zeichen geändert werden kann, weiß ich aber nicht. Solche Anforderungen hatte ich noch nie. Eine weitere Alternative wäre hvpygmentex. Das habe ich mir aber noch nicht angeschaut.
Re: listing - Code mit mehreren Farben für keywordstyle
Wie kann ich im Vorfeld definieren, dass alle meine Codes in der Sprache Python sind, ohne das dann bei \begin{lstlistings} eingeben zu müssen? Ich nehme mal an, dass das der Vorschlag war.
Re: listing - Code mit mehreren Farben für keywordstyle
\documentclass[12pt,a4paper,oneside,% Einseitig gedrucktes Buch??? Oder doch eher scrreprt? ngerman]{scrbook} \usepackage[english,ngerman]{babel} \usepackage{xcolor} \usepackage{listings} \definecolor{light-gray}{gray}{0.95} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{codegray}{rgb}{0.4,0.4,0.4} \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codered}{rgb}{0.8,0.25,0.33} \definecolor{codeblue}{rgb}{0,0.58,0.71} \lstdefinestyle{Python}{% Stil definieren language=Python,% einschließlich Sprache backgroundcolor=\color{light-gray}, commentstyle=\color{codeblue}, stringstyle=\color{codered}, keywordstyle=\color{codegreen}, numberstyle=\tiny\color{codegray}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2, literate={\%}{{{\color{codepurple}\%}}}1,% und allem literate={=}{{{\color{codepurple}=}}}1% anderen } \begin{document} % Stil verwenden (Sprache ist in obiger Stildefinition enthalten): \begin{lstlisting}[style=Python] tasks = [] for y in range(1,worksheet.nrows): tasks.append((worksheet.cell_value(y,1))) \end{lstlisting} \end{document}
Hinweis: Alternativ kann man auch einige Einstellungen in einem allgemeinen Stil definieren, den man dann im Stil Python nach dem Einstellen der Sprache ebenfalls aufruft. Man kann also in einer Stildefinition eine andere Stildefinition verwenden.
Hinweis: Man kann auch eine eigene Umgebung mit \lstnewenvironment definieren, wie das in Abschnitt 4.5 von listings am Beispiel einer Umgebung für Pascal-Code gezeigt wird. Dabei würde man dann im Prinzip alles aus obiger Stildefinition in eine entsprechende \lstset-Anweisung packen.
goLaTeX-Knigge (mit Minimalbeispiel und »So stellst Du Deine Frage richtig«)
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script
Re: listing - Code mit mehreren Farben für keywordstyle
Bei der Lösung von KOMA funktioniert das immer nur für ein Zeichen, d.h. wenn % farbig angezeigt wird dann = nicht und anders rum genauso. Wie kann ich das für mehrere Zeichen implementieren?
Re: listing - Code mit mehreren Farben für keywordstyle
Kurzer Blick in Abschnitt 5.4 der listings-Anleitung offenbart, dass man mehrere literate-Argumente direkt hintereinander setzen kann
Man kann auch Strings und Kommentare von der Ersetzung ausnehmen. Wie steht ebenfalls in der Erklärung zu literate im genannten Abschnitt der Anleitung.
\documentclass[12pt,a4paper,oneside,% Einseitig gedrucktes Buch??? Oder doch eher scrreprt? ngerman]{scrbook} \usepackage[english,ngerman]{babel} \usepackage{xcolor} \usepackage{listings} \definecolor{light-gray}{gray}{0.95} \definecolor{codepurple}{rgb}{0.58,0,0.82} \definecolor{codegray}{rgb}{0.4,0.4,0.4} \definecolor{codegreen}{rgb}{0,0.6,0} \definecolor{codered}{rgb}{0.8,0.25,0.33} \definecolor{codeblue}{rgb}{0,0.58,0.71} \lstdefinestyle{Python}{% Stil definieren language=Python,% einschließlich Sprache backgroundcolor=\color{light-gray}, commentstyle=\color{codeblue}, stringstyle=\color{codered}, keywordstyle=\color{codegreen}, numberstyle=\tiny\color{codegray}, basicstyle=\ttfamily\footnotesize, breakatwhitespace=false, breaklines=true, captionpos=b, keepspaces=true, numbers=left, numbersep=5pt, showspaces=false, showstringspaces=false, showtabs=false, tabsize=2, literate={\%}{{{\color{codepurple}\%}}}1% und allem {=}{{{\color{codepurple}=}}}1% anderen } \begin{document} % Stil verwenden (Sprache ist in obiger Stildefinition enthalten): \begin{lstlisting}[style=Python] tasks = [] % 5 for y in range(1,worksheet.nrows): tasks.append((worksheet.cell_value(y,1))) \end{lstlisting} \end{document}
Re: listing - Code mit mehreren Farben für keywordstyle
@ich meine ja nur: Danke für die Korrektur. Wie gesagt: listings ist nicht meins.
goLaTeX-Knigge (mit Minimalbeispiel und »So stellst Du Deine Frage richtig«)
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script