У меня большая таблица (около 300 записей). Иногда у меня есть последовательность записей с одним и тем же значением (для заданного столбца). В таком случае мне нужно опустить значение. Все мои значения хранятся в переменных, используемых в другом месте, и поэтому я не могу просто избавиться от них. Чтобы преодолеть это, я создал временную команду для сохранения моего значения. Тестирование моего решения в виде простого текста дает мне желаемый результат. Однако, когда я применяю свое решение в таблице, результаты оказываются неверными.
MWE (я поставил точку, чтобы лучше видеть, где пропущены значения):
\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}
В приведенном выше примере за пределами таблицы я получил:
а . б . . .
Внутри таблицы я получил:
а а . . .
Может ли кто-нибудь объяснить такое поведение?
решение1
Ячейки выравнивания образуют группы, поэтому переопределение \myval
забывается, как только вы переходите к другой ячейке. Используйте \gdef\myval{.}
вместо \renewcommand{\myval}{#1}
в определении \setMyVal
. С \renewcommand
вы получите только локальное переопределение.
\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}