
У меня есть следующее определение среды:
\newif\ifrev
\newenvironment{revision}{%
\begingroup
\revtrue%
\color{blue}%
}{%
\revfalse%
\endgroup
}
Эта среда просто окрашивает весь текст внутри себя в синий цвет и устанавливает \ifrev
внутри него значение true.
В таблицах и рисунках внутри этой среды \ifrev
значение сохраняется должным образом (т. е. \ifrev
выражение оценивается как истинное, если рисунок/таблица находится в revision
среде, и ложное в противном случае). Однако цвет текста подписей и записей таблиц сбрасывается на черный. Например:
\begin{document}
\lipsum[42]
\begin{table}[h]
\centering
\begin{tabular}{cc}
\ifrev{A}\else{a}\fi & b \\
c & d
\end{tabular}
\caption{Caption}
\end{table}
\begin{figure}[h]
\centering
\includegraphics{example-image-a}
\caption{Caption}
\end{figure}
\end{document}
Добавление \begin{revision}
и \end{revision}
сразу после и перед \begin{document}
и \end{document}
правильно окрашивает абзац в синий цвет и изменяет строчную букву а в таблице на заглавную А, но сохраняет текст в таблице и подписи черными.
Как мне сохранить синий цвет внутри таблиц и рисунков в этой среде?
решение1
Приняв во внимание комментарии, я переписал определение среды следующим образом, и оно, похоже, функционирует так, как мне и было нужно:
\newenvironment{revision}{%
\revtrue%
\color{\revcolour}%
\captionsetup*{font={color=\revcolour}}%
\captionsetup*[sub]{font={color=\revcolour}}%
\makeatletter%
\let\oldtable\table%
\def\table{\@ifnextchar[\table@i \table@ii}%
\def\table@i[#1]{\oldtable[#1]\color{\revcolour}}%
\def\table@ii{\oldtable\color{\revcolour}}%
\makeatother%
}{}