Reihenfolge der Makroerweiterung in Tabellen

Reihenfolge der Makroerweiterung in Tabellen

Ich habe eine große Tabelle (ca. 300 Einträge). Manchmal habe ich eine Folge von Einträgen mit demselben Wert (für eine bestimmte Spalte). In einem solchen Fall muss ich den Wert weglassen. Alle meine Werte sind in Variablen gespeichert, die anderswo verwendet werden, und daher kann ich sie nicht einfach löschen. Um das zu umgehen, habe ich einen temporären Befehl erstellt, um meinen Wert beizubehalten. Wenn ich meine Lösung im Klartext teste, erhalte ich das gewünschte Ergebnis. Wenn ich meine Lösung jedoch in einer Tabelle anwende, sind die Ergebnisse falsch.

MWE (ich habe einen Punkt gesetzt, damit man besser erkennt, wo die ausgelassenen Werte sind):

\documentclass{article}
\usepackage{ifthen}

\begin{document}

\newcommand{\myval}{}

\newcommand{\setMyVal}[1]{\renewcommand{\myval}{#1}}

\newcommand{\printOnlyFirstOccurence}[1]{
    \ifthenelse{\equal{\myval}{#1}}
        {.}
        {\setMyVal{#1}\myval}%else
}

Outside table:

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}



Behaviour inside table:

\begin{table}[h!]
\centering
\begin{tabular}{c|c} \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
\end{tabular}

\end{table}

\end{document}

Im obigen Beispiel habe ich außerhalb der Tabelle Folgendes erhalten:

ein . b . . .

In der Tabelle habe ich:

ein ein ...

Kann jemand dieses Verhalten erklären?

Antwort1

Ausrichtungszellen bilden Gruppen, daher \myvalwird die Neudefinition von vergessen, sobald Sie zu einer anderen Zelle wechseln. Verwenden Sie \gdef\myval{.}anstelle von \renewcommand{\myval}{#1}in der Definition von \setMyVal. Mit \renewcommanderhalten Sie nur eine lokale Neudefinition.

\documentclass{article}
\usepackage{ifthen}

\begin{document}

\newcommand{\myval}{}

\newcommand{\setMyVal}[1]{\gdef\myval{#1}}

\newcommand{\printOnlyFirstOccurence}[1]{
    \ifthenelse{\equal{\myval}{#1}}
        {.}
        {\setMyVal{#1}\myval}%else
}

Outside table:

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{a}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}

\printOnlyFirstOccurence{b}



Behaviour inside table:

\begin{table}[h!]
\centering
\begin{tabular}{c|c} \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{a} & a \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
    \printOnlyFirstOccurence{b} & b \\ \hline
\end{tabular}

\end{table}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen