PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Definition mit zwei "Variablen" erstellen



namemein
02-03-2010, 19:43
Hallo,

ich bin wirklich nicht der LaTeX-Experte, eher ein bewundernder Anwender, und habe folgende Fage:
In einem Text habe ich sehr oft Ausdrücke der Form



\\\hspace*{-2mm}\begin{tabular}{ll}\begin{minipage}[t]{0.49\textwidth}\begin{lstlisting}
> ls()
\end{lstlisting}\end{minipage}&\begin{minipage}[t]{0.48\textwidth}\begin{lstlisting}
> objects()
\end{lstlisting}\end{minipage}\end{tabular}\\


, wobei die beiden Einträge > ls() und > objects() beliebig sind.
Ist es möglich diesen Wust durch ein



\Shortcut{> ls()}{> objects()}


zu ersetzen? Ich habe ehrlich gesagt schon ein wenig rumprobiert und haufenweise faszinierende Fehlermeldungen generiert (also nichts zustande gebracht). ;) Ist das Beschrieben überhaupt möglich? Über Hinweise und Tips wäre ich sehr dankbar.

mechanicus
02-03-2010, 21:15
Hi,


Über Hinweise und Tips wäre ich sehr dankbar.
Hinweis Nummer 1: Erstelle bitte vollständige Minimalbeispiele [2]
Hinweis Nummer 2: Dokumentation listings -> \lstnewenvironment

Gruß
Marco

namemein
03-03-2010, 07:42
\documentclass{report}

\usepackage{listings}
\usepackage[latin1]{inputenc}

% hier der Versuch des Shortcuts
\newcommand{\minipTwo}[2]{\begin{tabular}{ll}\begin{minipage}[t]{0.49\textwidth}\begin{lstlisting}
#1
\end{lstlisting}\end{minipage}&\begin{minipage}[t]{0.48\textwidth}\begin{lstlisting}
#2
\end{lstlisting}\end{minipage}\end{tabular}
}

\begin{document}

\lstset{% general command to set parameter(s)
basicstyle=\small\tt,
frame = single,
}

\hspace*{-2mm}\begin{tabular}{ll}\begin{minipage}[t]{0.49\textwidth}\begin{lstlisting}
> ls()
\end{lstlisting}\end{minipage}&\begin{minipage}[t]{0.48\textwidth}\begin{lstlisting}
> objects()
\end{lstlisting}\end{minipage}\end{tabular}\\

% dieser Aufruf verursacht dann einige Fehler, gelistet weiter unten.
\minipTwo{ls()}{object()}

\end{document}


Als Fehlermeldungen bekomme ich mehrere "Missing \endgroup inserted", "Paragraph ended before \lst@next was completed" und "Missing } inserted"

u_fischer
03-03-2010, 08:37
Damit hast du Hinweis 1 befolgt. Jetzt solltest du Hinweis 2 von Marco nachgehen. Eine weitere Möglichkeit wäre, das Listing in eine externe Datei auszulagern und \lstinputlisting zu benutzen. Dein \newcommand wird nie funktionieren, du kannst so ein Listing nicht in das Argument eines Befehls stecken.

namemein
03-03-2010, 10:25
Okay, ich habe es nun mit \lstnewenvironment aus dem listing-package versucht (Anleitungsseite 40). Aber ich kann die Beispiele nicht auf mein Problem übertragen.

Meine Umgebung besteht eben nicht nur aus Anfangs- und Endteil, sondern hat ja auch einen mittleren Abschnitt. Daher habe ich es mal so probiert:

1. Ansatz

\lstnewenvironment{slst}[]
{\begin{tabular}{ll}\begin{minipage}[t]{0.49\textwidth}\begin{lstlisting}}
{\end{lstlisting}\end{minipage}&}
\lstnewenvironment{elst}[]
{\begin{minipage}[t]{0.48\textwidth}\begin{lstlisting}}
{\end{lstlisting}\end{minipage}\end{tabular}}

mit dem Aufruf:

\begin{slst}
ls()
\end{slst}
\begin{elst}
objects()
\end{elst}

Allerdings funktioniert schon die neue Umgebung nicht, da die Zeile \end{lstlisting}\end{minipage}&} den Fehler "Missing number, treated as zero" verursacht. :confused: Was mache ich da falsch?

2. Ansatz
Zur zweiten Möglichkeit mit \lstinputlisting: Damit würde ich den beschriebenen Wust natürlich auf eine Zeile reduzieren können. Allerdings brauche ich dann auch immer eine neue Datei in der der Code steht. Da ein Abschnitt dieser Form bis jetzt schon über 40mal auftaucht, wären das schon 40 zusätzliche Dateien. Ich glaube, dass es dadurch nicht übersichtlicher bzw. simpler wird.

u_fischer
03-03-2010, 11:12
Lass doch einfach die tabular weg. Wozu soll die gut sein? Zwei minipage nebeneinander reicht doch.

namemein
03-03-2010, 11:31
Wenn ich die tabular-Umgebung weglasse, lässt es sich folgendermaßen kürzen:


\documentclass{report}

\usepackage{listings}
\usepackage[latin1]{inputenc}

% Versuch des Shortcuts
\lstnewenvironment{slst}
{\begin{minipage}[t]{0.45\textwidth}\begin{lstlisting}}
{\end{lstlisting}\end{minipage}}


\begin{document}

\lstset{% general command to set parameter(s)
basicstyle=\small\tt, % print whole listing small
frame = single,
}
\end{document}

So wird es auch ohne Fehler kompiliert, aber wenn ich ein

\begin{slst}ls()\end{slst}
in das Dokument einsetze werden wieder massig Fehler erzeugt. Fängt mit "\Missing endcsname inserted" an. :confused:

u_fischer
03-03-2010, 12:05
\documentclass{report}

\usepackage{listings}
\usepackage[latin1]{inputenc}

\lstnewenvironment{slst}
{\minipage{0.4\textwidth}}
{\endminipage}

\lstset{% general command to set parameter(s)
basicstyle=\small\tt, % print whole listing small
frame = single,
}

\begin{document}

\begin{slst}
\section{abc}
\end{slst}
\begin{slst}
\section{abc}
\end{slst}
\end{document}