Neue Umgebung mit lstlisting funktioniert nicht

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Neue Umgebung mit lstlisting funktioniert nicht

Beitrag von Rolli »

Hallo Gemeinde,

ich habe schon wieder so ein LaTeX-Mysterium, bei dem ich nicht weiter komme.
Ich möchte eine lstlisting-Umgebung in eine eigene neue Umgebung stecken, um captionofs, Kommentare usw. standardisiert hinzu fügen zu können.

Das MB wirft einen Fehler beim Compilieren:
Undefined control sequence.
\lstlisting ->\def \lstenv@name
{lstlisting}\begingroup \lst@setcatcodes \ca...
l.7 {\end{lstlisting}
\documentclass{scrartcl}

\usepackage{listings}

\newenvironment{aListing}[0]\relax%
{\begin{lstlisting}}%
{\end{lstlisting}}

\begin{document}

\begin{lstlisting}
Dieses hier funktioniert
\end{lstlisting}

%\begin{aListing}
%Dieses hier funktioniert NICHT - gibt bereits einen Compilerfehler
%\end{aListing}

\end{document}
Warum nur ???

Gruß Rolli

Gast

Beitrag von Gast »

Man kann keine neuen listings-Umgebungen mit \newenvironment definieren. In der [d]listings[/d]-Anleitung findest du aber eine Anweisung, um eigene Umgebungen zu definieren.

Gast

Beitrag von Gast »

PS: Abschnitt 5.14: Environments

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Beitrag von Rolli »

Hallo Gast, danke für Deinen Input. Hatte ich auch schon gesehen - nach meinem Verständnis muss man nach dem Manual lediglich "newenvironment" durch "lstnewenvironment" austauschen ???

Es funktioniert aber trotzdem nicht:
\documentclass{scrartcl}

\usepackage{listings}

\begin{document}

\lstnewenvironment{aListing}[0]\relax%
{
\begin{minipage}{0.3\textwidth} 
   blabla 
\end{minipage}
\hfill
\begin{minipage}{0.6\textwidth}
   \begin{lstlisting}%
}%
{%
   \end{lstlisting}
\end{minipage}
}

\begin{document}

\begin{lstlisting}
Dieses hier funktioniert
\end{lstlisting}

%\begin{aListing}
%Dieses hier funktioniert NICHT - gibt bereits einen Compilerfehler
%\end{aListing}

\end{document}
???

Was ich "eigentlich" machen möchte: Zwei Minipages nebeneinander, links eine captionof und etwas Kommentartext, rechts ein C/C++ - Snippet im Typewriter-font.

"Links" würde ich an meine eigene, neue Umgebung als ein Argument übergeben (#1). Und das eigentliche Listing soll dann rechts zwischen den beiden {} ... {} beim newenvironment sein.

Ich verstehe beim besten Willen nicht, warum das nicht funktionieren soll - schließlich geht es mit "figure" und "table".
Ist LaTeX etwa nicht objektorientiert programmiert ???

Gruß Rolli

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Hat niemand eine Idee?

Beitrag von Rolli »

Hat niemand eine Idee?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

\documentclass{scrartcl}

\usepackage{listings}

\lstnewenvironment{aListing}
 {\lstset{breaklines=true}%
  \begin{minipage}{0.3\textwidth}
   blabla
  \end{minipage}
  \hfill
  \minipage{0.6\textwidth}
 }
 {%
 \endminipage
 }

\begin{document}

\begin{lstlisting}
Dieses hier funktioniert
\end{lstlisting}

\begin{aListing}
Dieses hier funktioniert auch 
\end{aListing}

\end{document}

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Wow!

Beitrag von Rolli »

Wow Ulrike,

vielen Dank!

Jetzt nur noch eine Kleinigkeit (hoffe ich): Um das Ganze hätte ich gerne noch eine farbige Box. Und schon wieder kracht MikTEX übelst zusammen ... "Error Line 1: Emergency stop".

Hat noch jemand eine Idee?

Gruß Rolli
\documentclass{scrartcl} 

\usepackage{listings} 
\usepackage{tcolorbox}


\lstnewenvironment{aListing}[1] 
{\lstset{breaklines=true}% 
\begin{tcolorbox}[colback=green,colframe=red]%
\begin{minipage}{0.3\textwidth} 
#1 
\end{minipage} 
\hfill 
\minipage{0.6\textwidth} 
} 
{% 
\endminipage 
\end{tcolorbox}
} 

\begin{document} 

\begin{lstlisting} 
Dieses hier funktioniert 
\end{lstlisting} 

\begin{aListing}{Bla Bla}
Dieses hier funktioniert jetzt leider nicht mehr 
\end{aListing} 

\end{document} 

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Das würde ich direkt mit tcolorbox machen.
\documentclass{scrartcl}

\usepackage{listings}
\usepackage[many]{tcolorbox}
\tcbuselibrary{listings}

\newtcblisting{alisting}[1]{colback=green,colframe=red,enhanced,comment side listing,
lefthand width=0.3\textwidth,comment=#1}
\begin{document}

\begin{alisting}{blub}
Dieses hier funktioniert
\end{alisting}

\end{document} 

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Nochmals WOW - SUPERWOW

Beitrag von Rolli »

Liebe Ulrike,

Tausend Dank!!! Du hast mir wirklich sehr geholfen.
Alle Achtung, und mein voller Respekt!
Wie kommt man nur auf so etwas? 35 Jahre LaTEX-Freak?

LG, Rolli

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: Nochmals WOW - SUPERWOW

Beitrag von u_fischer »

Rolli hat geschrieben:Liebe Ulrike,

Tausend Dank!!! Du hast mir wirklich sehr geholfen.
Alle Achtung, und mein voller Respekt!
Wie kommt man nur auf so etwas? 35 Jahre LaTEX-Freak?
Man muss doch nur mal einen Blick in die tcolorbox-Doku werfen. Die hat doch haufenweise Bildchen und Beispiele.

Antworten