Seite 1 von 1

Wiederherstellen der Deafult-Werte beim listings Package?

Verfasst: Mi 22. Okt 2014, 14:08
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}

Verfasst: Mi 22. Okt 2014, 17:55
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}

Verfasst: Mi 22. Okt 2014, 20:43
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}

Verfasst: Do 23. Okt 2014, 08:03
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. ä.

Verfasst: Do 23. Okt 2014, 08:07
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.