variable Anzahl von Werten zw.speichern und später ausgeben

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

variable Anzahl von Werten zw.speichern und später ausgeben

Beitrag von MoonKid »

Bin ganz neu auf dieser Ebene von *TeX. Daher ist es gut möglich, dass es für mein use-case auch eine ganz andere Lösung gibt.
\documentclass{article}
\usepackage{xltxtra}

\newcommand{\robItemsA}{%
}
\newcommand{\robItemsB}{%
}
\newcommand{\robItem}[2]{%
    % die zwei Werte „zwischenspeichern“
    \makeatletter
    \g@addto@macro\robItemsA{

        #1
    }
    \makeatother
    \makeatletter
    \g@addto@macro\robItemsB{

        #2
    }
   \makeatother
}

\newcommand{\robA}{%
    \section{A}
    \robItemsA
}

\newcommand{\robB}{%
    \section{B}
    \robItemsB
}

\begin{document}
% Werte übergeben
% Anzahl variabel!
\robItem{ItemA}{rot}
\robItem{ItemB}{rot}
\robItem{ItemC}{grün}
\robItem{ItemC}{gelb}

\robA

\robB
\end{document}
Schmeißt diese Fehler:
! Undefined control sequence.
\robItem #1#2->\makeatletter \g 
                                @addto@macro\robItemsA { \par #1 } \makeatot...
l.36 \robItem{ItemA}{rot}
Mal ein leicht praktischs Anwendungs-Beispiel:
Es geht um die Trennung von Content und Layout/Darstellung.
Ein bestimter Sachverhalt (\robItem) gehört logisch zusammen. Dieser soll aber auf zwei Arten (\robItemsA und \robItemsB) im Dokument dargestellt werden. Beispielseise soll es einmal in einer hübschen Grafik dargelegt werden und auf einer anderen Seite in einer trockenen Tabelle. Jeweils auch mit unterschiedlichen Teilinformationen.
\robItem hat in meinem realen Fall vier Werte/Parameter. In die Grafik gehören #1, #2 und die Tabelle gehören #1, #3, #4.

Das wäre genial, wenn ich das irendwie hinbekommen könnte.
Is das einigermaßen verständlich, was ich will?
XeLaTeX, TeX Live, vim-latexsuite

Stamm-

Falsche Platzierung

Beitrag von Stamm- »

Die Makros \makeatletter und \makeatother stehen an der falschen Stelle. Sie dürfen nicht innerhalb der Definition eines neuen Befehls platziert werden, sondern müssen diese umrahmen.
\makeatletter
\newcommand{\robItem}[2]{%
    % die zwei Werte „zwischenspeichern“
    \g@addto@macro\robItemsA{
        #1
    }
    \g@addto@macro\robItemsB{
        #2
    }
}
\makeatother

DADABBI

Beitrag von DADABBI »

Außerdem solltest du bei Definitionen auf unerwünschte Leerzeichen achten!

MoonKid
Forum-Meister
Forum-Meister
Beiträge: 689
Registriert: Sa 30. Jun 2012, 11:56

Beitrag von MoonKid »

DADABBI hat geschrieben:unerwünschte Leerzeichen
Wäre ich nicht schon verheiratet, würd ich dem Kohm einen Antrag machen! :D
XeLaTeX, TeX Live, vim-latexsuite

Antworten