Wiederherstellen der Deafult-Werte beim listings Package? Thema ist als GELÖST markiert

Schriftbild, Absätze und Auflistungen einstellen


Nikero

Wiederherstellen der Deafult-Werte beim listings Package?

Beitrag von Nikero »

Hallo Allerseits.
Ich schreibe derzeit an einem Dokument, in dem ich Code in mehreren Sprachen habe. Dabei habe ich mir für jede Sprache eine eigene Highlight Syntax gebastelt.
Das Problem ist nur, dass die von der vorherigen Sprache geänderten Werte bei der Benutzung des nächsten Styles bzw. Sprache einfach mit übernommen werden, solange ich sie nicht explizit überschreibe. Dies macht das wechseln zwischen den verschieden Sprachen teilweise sehr mühselig.
Daher suche ich einen Befehl oder ähnliches, mit dem ich einfach die Default Werte wieder herstellen kann. Per Google habe ich so etwas leider nicht gefunden, aber gibt es da eine Möglichkeit?
Falls es sowas nicht gibt, kennt jemand einen Trick, um es doch so hinzukriegen?

Ich bedanke mich bereits im Vorraus für Antworten. Hier ein Minimalbeispiel:
\documentclass[ngerman,12pt,bibtotoc]{scrartcl}

\usepackage[usenames,dvipsnames]{color}
\usepackage{listings}

\lstdefinelanguage{custompython}{
		language=Python,
        %
        literate=*{1}{{{\color{red}1}}}1
}

\lstdefinelanguage{custommatlab}{
		language=Matlab,
        %
        stringstyle=\color{green},
        %
}
\begin{document}
\lstset{language=custompython}
\begin{lstlisting}
a=1
stri='hello'
\end{lstlisting}
Python 1: richtig\\\\
\lstset{language=custommatlab}
\begin{lstlisting}
a=1
stri='hello'
\end{lstlisting}
Matlab 1: falsch (Zahlen rot)\\\\
\lstset{language=custompython}
\begin{lstlisting}
a=1
stri='hello'
\end{lstlisting}
Python 2: falsch (Strings gruen)
\end{document}

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Du beschreibst das zu erwartende Verhalten.
Entweder, übergieb ein optionales Argument für die Listings, oder definier dir gleich neue Umgebungen.
\documentclass[ngerman,12pt,bibtotoc]{scrartcl}

\usepackage[usenames,dvipsnames]{color}
\usepackage{listings}

\lstdefinelanguage{custompython}{
      language=Python,
        %
        literate=*{1}{{{\color{red}1}}}1
}

\lstdefinelanguage{custommatlab}{
      language=Matlab,
        %
        stringstyle=\color{green},
        %
}
\lstnewenvironment{python}{\lstset{language=python,
        literate=*{1}{{{\color{red}1}}}1
}}{}
\lstnewenvironment{matlab}{
	\lstset{language=Matlab,
	stringstyle=\color{green},
}
}{}
\begin{document}

\begin{lstlisting}[language=custompython]
a=1
stri='hello'
\end{lstlisting}
Python 1: richtig

\begin{lstlisting}[language=custommatlab]
a=1
stri='hello'
\end{lstlisting}
Matlab 1: falsch (Zahlen rot)

\begin{lstlisting}[language=custompython]
a=1
stri='hello'
\end{lstlisting}
Python 2: falsch (Strings gruen)
\par\noindent\rule{\textwidth}{.4pt}
\begin{python}
a=1
stri='hello'
\end{python}
\begin{matlab}
a=1
stri='hello'
\end{matlab}
\end{document}
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Nikero

Beitrag von Nikero »

Johannes_B hat geschrieben:Du beschreibst das zu erwartende Verhalten.
Entweder, übergieb ein optionales Argument für die Listings, oder definier dir gleich neue Umgebungen.
Vielen Dank für die Antwort. Da ich eine Programmierungsumgebung leider nicht nutzen kann, da ich Code per \lstinputlisting importiere, habe ich mir einfach eine neue Standardumgebung gebastelt und verwende nur in der \lstset:
\documentclass[ngerman,12pt,bibtotoc]{scrartcl}

\usepackage[usenames,dvipsnames]{color}
\usepackage{listings}

\lstdefinelanguage{custompython}{
      language=Python,
        %
        literate=*{1}{{{\color{red}1}}}1
}

\lstdefinelanguage{custommatlab}{
      language=Matlab,
        %
        stringstyle=\color{green},
        %
}

\newenvironment{donothing}{}{}

\begin{document}
\begin{donothing}
	\lstset{language=custompython}
	\begin{lstlisting}
	a=1
	stri='hello'
	\end{lstlisting}
	Python 1: richtig\\\\
\end{donothing}

\begin{donothing}
	\lstset{language=custommatlab}
	\begin{lstlisting}
	a=1
	stri='hello'
	\end{lstlisting}
	Matlab 1: richtig\\\\
\end{donothing}
\begin{donothing}
	\lstset{language=custompython}
	\begin{lstlisting}
	a=1
	stri='hello'
	\end{lstlisting}
	Python 2: richtig
\end{donothing}
\end{document}

Besserwisser

Beitrag von Besserwisser »

Man kann auch bei \lstinputlisting Optionen angeben, also beispielsweise \lstinputlisting[language=custompython]{Datei}. Dann braucht man keine zusätzliche Umgebung. Wichtig ist einfach nur, dass man \lstset wirklich nur verwendet, wenn man die Standardeinstellungen (für die aktuelle Gruppe) ändern will. Das ist vergleichbar mit der Verwendung von \sffamily o. ä.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

blackbee045 hat geschrieben:Da ich eine Programmierungsumgebung leider nicht nutzen kann, da ich Code per \lstinputlisting importiere, habe ich mir einfach eine neue Standardumgebung gebastelt und verwende nur in der \lstset: ???
Völlige Zustimmung, auch wenn das Spam ist.

Was mich verwirrt, ist das Fehlen des von dir beschriebenen Handelns im Minimalbeispiel. Woher sollen wir wissen, was du genau machst?

Bitte beachte auch, dass \\\\ bestimmt falsch ist. Wenn du uns sagst, was du damit erreichen willst, dann gibt es bestimmt eine Alternative.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Antworten