Hey Leute,

ich bastel jetzt schon Stunden rum und bekomme folgendes nicht hin. Ich habe mir ein Environment gebaut, in dem ich Inhalte zu einem Objekt (Haus) aufliste.

Nun möchte ich am Ende des Dokuments alle "Handlungsbedarf"-Texte zusammenfassen als Liste. Dafür nutze ich etoolbox und \appto um alle Texte zusammen in einer Variable nach und nach zusammenzufassen.

Mein Problem: Der Titel \haustitel der Auflistungen ist nicht richtig, es wird nur der letzte Titel überall ausgegeben. Also immer "Haus 2" im Beispiel:

\documentclass{article}
\usepackage{etoolbox}


% Variable um Alle Handlungsbedarfseinträge abzuspeichern
\global\def\handlungsbedarfsum{}

% Env für jede Baustelle
\newenvironment{Baustelle}[1]{
    \section{#1}
    \gdef\haustitel{#1}
    \begin{tabular}[H]{|l|l|}
    \hline
    Punkt & Information \\\hline
}{
    \end{tabular}
}

% Kommando zum formatierten Aufgeben vom Handlungsbedarf
\newcommand{\RowInfo}[2]{
    #1 & #2\\\hline
}
\newcommand{\RowHandlungsbedarf}[1]{
\ifstrempty{#1}{}{
    \gappto\handlungsbedarfsum{\haustitel & #1\\\hline}
    Handlungsbedarf & #1\\\hline}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

    \begin{Baustelle}{Haus 1}
    % Viele Kommandos und Auflistungen von Infos ...
    % Anschließend eine Zusammenfassung als ``handlungsbedarf''
    \RowInfo{Adresse}{MaxMustermann Weg 21}
    \RowInfo{...}{...}
    \RowHandlungsbedarf{Alles OK}
    \end{Baustelle}

    \begin{Baustelle}{Haus 2}
    \RowInfo{Adresse}{MaxMustermann Weg 23}
    \RowInfo{...}{...}
    \RowHandlungsbedarf{Dach durch Sabine weggepustet}
    \end{Baustelle}


    \vspace{1cm}
    \section{Auflistung aller Handlungsbedarf-Texte}
    % Hier soll eine Auflistung aller Handlungsbedarf-Einträge für alle Häuser ausgegeben werden
    \begin{tabular}{@{}|p{0.18\textwidth}|p{0.78\textwidth}|@{}} \hline
        \bf{Baustelle} & \bf{Handlungsbedarf} \\\hline
    \handlungsbedarfsum
    \end{tabular}

\end{document}

Ist es irgendwie möglich, \haustitel im Environment zu setzen, und dann in einem Kommando auszulesen zum aktuellen Zeitpunkt?

Mit \edef und \gdef hab ich es bisher auch nicht hingekommen.

Schöne Grüße: Jonas

gefragt 07 Apr '20, 14:18

Jonn3y's gravatar image

Jonn3y
2612
Akzeptiert-Rate: 0%

bearbeitet 07 Apr '20, 14:19


Du musst dafür sorgen, dass \haustitel genau einmal expandiert wird, wenn es zu \handlungsbedarfsum hinzugefügt wird. Gleichzeitig muss aber verhindert werden, das &, \\ und \hline expandiert werden. Eine Möglichkeit ist

 \xappto\handlungsbedarfsum{\expandonce{\haustitel}\unexpanded{& #1\\\hline}}

Beispiel:

\documentclass{article}
\usepackage{etoolbox}

% Variable um alle Handlungsbedarfseinträge abzuspeichern
\newcommand*\handlungsbedarfsum{}
\newcommand*\haustitel{}

% Env für jede Baustelle
\newenvironment{Baustelle}[1]{
  \section{#1}
  \def\haustitel{#1}
  \begin{tabular}{|l|l|}
  \hline
  Punkt & Information \\\hline
}{
  \end{tabular}
}

% Kommando zum formatierten Ausgeben vom Handlungsbedarf
\newcommand{\RowInfo}[2]{#1 & #2\\\hline}
\newcommand{\RowHandlungsbedarf}[1]{%
\ifstrempty{#1}{}{%
    \xappto\handlungsbedarfsum{\expandonce{\haustitel}\unexpanded{& #1\\\hline}}%
    Handlungsbedarf & #1\\\hline}%
}

\begin{document}

\begin{Baustelle}{Haus 1}
  % Viele Kommandos und Auflistungen von Infos ...
  % Anschließend eine Zusammenfassung als ``handlungsbedarf''
  \RowInfo{Adresse}{MaxMustermann Weg 21}
  \RowInfo{...}{...}
  \RowHandlungsbedarf{Alles OK}
\end{Baustelle}

\begin{Baustelle}{Haus 2}
  \RowInfo{Adresse}{MaxMustermann Weg 23}
  \RowInfo{...}{...}
  \RowHandlungsbedarf{Dach durch Sabine weggepustet}
\end{Baustelle}

\section{Auflistung aller Handlungsbedarf-Texte}
% Hier soll eine Auflistung aller Handlungsbedarf-Einträge für alle Häuser ausgegeben werden
\begin{tabular}{@{}|p{0.18\textwidth}|p{0.75\textwidth}|@{}} \hline
  \textbf{Baustelle} & \textbf{Handlungsbedarf} \\\hline
  \handlungsbedarfsum
\end{tabular}
\end{document}

alt text

Anmerkungen: Beachte bitte, dass ich etliche Zeilenenden auskommentiert habe, von denen einige sonst unerwünschte Leerzeichen eingefügt hätten. \bf ist schon sehr lange veraltet, ich habe es durch \textbf ersetzt. Das optionale Argument von tabular kennt keinen Wert H.

Permanenter link

beantwortet 07 Apr '20, 17:06

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 08 Apr '20, 11:47

Danke für den Hinweis, ich bin gerade auch drauf gestoßen dass \gappto nicht expandiert. Oh man was ein Tag. Vielen Dank für die Hilfe und die Hinweise! Ich werde es korrigieren.

(07 Apr '20, 17:14) Jonn3y
2

Zur Sicherheit könnte man \haustitel mit \expandonce nur genau einmal expandieren. Dann explodiert \begin{Baustelle}{Haus \emph{1}} nicht. In diesem Fall, bei dem das Marko, das expandiert werden soll, ganz vorne steht, geht natürlich auch eine \expandafter-Party: \expandafter\gappto\expandafter\handlungsbedarfsum\expandafter{\haustitel & #1\\\hline}, aber das lässt sich nicht so schön beliebig erweitern.

(08 Apr '20, 09:56) moewe

@moewe Danke! Habe ich geändert.

(08 Apr '20, 11:48) esdd
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×6
×2

gestellte Frage: 07 Apr '20, 14:18

Frage wurde gesehen: 3,024 Mal

zuletzt geändert: 10 Apr '20, 18:45