Seite 1 von 1

Probleme mit Code-listing !Missing \endgroup inserted

Verfasst: Sa 11. Okt 2014, 22:44
von Kanudl
Servus zusammen,

ich habe ein kleines Problem und komme einfach nicht weiter.
In meiner Präambel habe ich 2 definelistings:
\usepackage{listings}
\usepackage{color}
 
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{bashcode}{rgb}{0,0,0}
\definecolor{backcolour}{rgb}{0.9,0.9,0.9}


\lstdefinestyle{bash}
{
	columns=flexible,
	showstringspaces=false,
	basicstyle=\footnotesize\ttfamily,
	frame=single,
	frameround=tttt	
}


\lstdefinestyle{python}
{
	language=python,
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\footnotesize\ttfamily,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

Anschließend versuche ich die Konventionen in einer Tabelle zu erläutern:
\begin{table}[h]
	\begin{tabular}{p{0.25\textwidth}|p{0.75\textwidth}}
	\textbf{Konventionen} 	& 	\textbf{Beschreibung}			\\\hline\hline
	\texttt{0x1234} 		&	Diese Schreibweise kennzeichnet Eingaben, Namen, Adressen oder zeigt Ausgaben.	\\\hline
	"{}cd ..." 				&	Diese Schreibweise kennzeichnet einen Programmcode	\\\hline
	\Ctrl + \keystroke{a}	&	Zeigt Tastenkombinationen an.	\\\hline
	\emph{Highlighted} Text	&	Hervorgehobener Text weist auf wichtige Dinge hin oder dient als Kommentar im Programmcode oder Eingaben.	\\\hline
\begin{lstlisting}[style=python]
import numpy as np
def incmatrix(genl1,genl2):
    return M
\end{lstlisting}				&	Stellt den Programmcode dar	\\\hline
	\end{tabular}\normalsize
\caption{Text-Konventionen}	
\label{table:Text-Konventionen}
\end{table}
Und erhalte anschließend den Fehler:
! Missing \endgroup inserted.

Wenn ich aber zusätzlich ein
\lstset[style=python]
in die Präambel einfüge funktioniert es, jedoch vermischt er dann die definestyles. D. h. ich habe die festgelegten Parameter von definestyle bash in Kombination mit definestyle python.

Gibt es eine Möglichkeit das lstset blockweise einzufügen, also bei Bedarf, wenn ich einen Codeblock einfüge? Oder kann man einfach 2 lstset einfügen, die dann getrennt funktionieren?

Nachtrag:
I've inserted something that you may have forgotten.
(See the <inserted text> above.)
With luck, this will get me unwedged. But if you
really didn't forget anything, try typing `2' now; then
my insertion and my current dilemma will both disappear.
! Missing \endgroup inserted.

Kommt als Fehlermeldung hinzu.

Ebenfalls muss ich die Zeile
\begin{lstlisting}[style=python]
auf
\begin{lstlisting}
ändern.

Hier ist es dann seltsam. Habe ich kein lstset funktioniert nur definestyle bash und der Code in der Tabelle wird unformatiert als Listing dargestellt und überschneidet einfach die Zeilen in der Tabelle "Konventionen".
Füge ich lstset[style=python] ein, erhalte ich den Code formatiert, allerdings gemischt mit der bash-Formatierung.

Danke und Gruß vorab.


:shock:

Verfasst: So 12. Okt 2014, 09:46
von Kanudl
Manchmal ist LaTex doch ein Hu*enkind. Warum es jetzt mit einer Klammer klappt, ist mir echt ein Rätsel. Zuvor hat es ja auch ohne geklappt...

Also editierte ich folgende Zeile in meiner Konventionstabelle:
{\begin{lstlisting}[style=python]
import numpy as np
def incmatrix(genl1,genl2):
    return M \end{lstlisting}	}
Die Klammern vor \begin und nach \end haben die Lösung gebracht.

Falls jemand ein listing in einer Tabelle (listing in table) machen möchte, dann einfach Klammern setzen und that´s it.

cheers

Verfasst: So 12. Okt 2014, 10:31
von Johannes_B
Ich geb dir einen Tipp: Geh die Sache langsam an, in der Ruhe liegt die Kraft. LaTeX läuft seit vielen Jahren für viele Menschen sehr stabil. Du kannst also davon ausgehen, dass du irgendwo nen Tippfehler oder nen Denkfehler drin hast.

Sowas kannst du dann beheben, wenn du den Code Stück für Stück auskommentierst um die Ursache einzugrenzen. Ein ausführliche Anleitung zum Vorgehen findest du auf TeXwelt.

Verfasst: So 12. Okt 2014, 11:19
von Kanudl
:D

Danke, manchmal steigert man sich doch etwas rein und verbringt Stunden damit, in LaTex einen Fehler zu suchen ^^

Verfasst: Mo 13. Okt 2014, 10:20
von u_fischer
Das Problem ist "numbers=left" im Pythonstil. Intern wird dort ein Befehl benutzt, der & zur Trennung von Argumenten benutzt und durch die & in deiner Tabelle kommt der durcheinander. Deine Methode, das Listing durch Klammern zu schützen, ist da völlig richtig.