
次のような環境定義があります。
\newif\ifrev
\newenvironment{revision}{%
\begingroup
\revtrue%
\color{blue}%
}{%
\revfalse%
\endgroup
}
この環境では、環境内のすべてのテキストの色を青にし、\ifrev
環境内の を true に設定するだけです。
この環境内の表と図では、\ifrev
値は適切に保持されます (つまり、\ifrev
図/表がrevision
環境内にある場合はステートメントは true と評価され、そうでない場合は false と評価されます)。ただし、キャプションと表のエントリのテキストの色は黒にリセットされます。例:
\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}
を追加し、 の前に を追加すると、段落の色が青くなり、表内の小文字の a が大文字の A に変更されますが、表内のテキストとキャプションは黒のままになります。\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%
}{}