Tenho uma mesa grande (cerca de 300 entradas). Às vezes, tenho uma sequência de entradas com o mesmo valor (para uma determinada coluna). Nesse caso, preciso omitir o valor. Todos os meus valores são armazenados em variáveis usadas em outros lugares e, portanto, não posso simplesmente me livrar deles. Para superar isso, criei um comando temporário para manter meu valor. Testar minha solução em texto simples me dá o resultado desejado. Porém, quando aplico minha solução em uma tabela, os resultados estão errados.
MWE (coloquei um ponto para ver melhor onde estão os valores omitidos):
\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}
No exemplo acima, fora da tabela obtive:
a . b. . .
Dentro da mesa eu tenho:
uma uma. . .
Alguém pode explicar esse comportamento?
Responder1
As células de alinhamento formam grupos, portanto a redefinição de \myval
é esquecida assim que você vai para outra célula. Use \gdef\myval{.}
em vez de \renewcommand{\myval}{#1}
na definição de \setMyVal
. Com \renewcommand
você só obtém uma redefinição local.
\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}