Seite 1 von 1

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

Verfasst: Sa 4. Jun 2016, 11:47
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?

Falsche Platzierung

Verfasst: Sa 4. Jun 2016, 12:02
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

Verfasst: Sa 4. Jun 2016, 12:58
von DADABBI
Außerdem solltest du bei Definitionen auf unerwünschte Leerzeichen achten!

Verfasst: So 5. Jun 2016, 10:54
von MoonKid
DADABBI hat geschrieben:unerwünschte Leerzeichen
Wäre ich nicht schon verheiratet, würd ich dem Kohm einen Antrag machen! :D