我的 MWE:
\documentclass[twoside]{book}%
\usepackage{graphicx}%
\usepackage{tikzducks}%
\usepackage{lipsum}%
\usepackage{color}%
\begin{document}
\color{red}
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{A duck}
\end{figure}
\let\endfigureold\endfigure%
\renewcommand\endfigure{\textbf{Trying to change color here}\global\color{green}\endfigureold}%
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{Another duck}
% \textbf{Trying to change color here}\global\color{green}%
\end{figure}
\lipsum
\end{document}
我试图实现的目标:我在连续的页面上有两个图。我希望文本从头到第二个图都是红色的,第二个图之后应该是绿色的。
您可以看到我迄今为止的两次尝试:第一次我尝试在标题下方直接编写更改图形环境内颜色的命令。第二次尝试时,我修补了图形环境的末尾。在这两种情况下,文本都保持完全红色。
此外,我\textbf{Trying to change color here}
在尝试更改颜色的地方直接写下了文字。在这两种情况下,此文字都出现在标题下方。
看来,我可以轻松地用浮点数传输“材料”。但似乎不可能传输“信息”。我通过进一步尝试非最小文件(例如通过更改标志)所能达到的最好结果是,更改发生在源中出现图形的那一刻,即整个文本变成绿色,没有红色残留。
在我看来,图形的完整代码是在我编写它的源中评估的,如果“信息”可以逃离环境,它就会在这里进行,只有“材料”被传输。我说得对吗?
并且,在对我来说更重要的是,有没有机会实现我想要的——那不是第一行的颜色,在这里只是作为一个例子,而是一般的信息,在一个图形的那一刻开始起作用,例如,增加一个计数器?
答案1
更改浮动出现的页面上的颜色非常容易。唯一的问题是 LaTeX 会通过调用 再次在输出例程中恢复该颜色\normalcolor
。如果禁用该功能(不推荐!),您将获得一个绿色页面(但只有一个,因为您无法更改颜色堆栈)。
\documentclass[twoside]{book}%
\usepackage{graphicx}%
\usepackage{lipsum,color}%
\begin{document}
\let\normalcolor\relax %avoid that it interferes
before
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{A duck}
\end{figure}
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{Another duck}
\pdfliteral {0 1 0 RG 0 1 0 rg}
\end{figure}
\lipsum
\end{document}
还可以在带有浮动的页面上执行其他操作。例如,以下示例旋转页面。使用 lualatex,它可以\latelua
在一次编译中使用并工作。pdflatex 在辅助文件中记录要旋转的页面,然后在下一次编译中旋转它(它可能也可以在当前系统上使用新的 shipout 关键字在一次编译中完成此操作,但我还没有时间查看)。
\DocumentMetadata{}
\documentclass[twoside]{book}%
\usepackage{graphicx}%
\usepackage{lipsum,color}%
\begin{document}
before
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{A duck}
\end{figure}
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{Another duck}
\ExplSyntaxOn
\pdfmanagement_add:nnn{ThisPage}{Rotate}{90}
\ExplSyntaxOff
\end{figure}
\lipsum
\end{document}
您还可以在浮动页面上设置计数器。但请注意,这是在 shipout 中完成的,因此计数器也仅在 shipout 中可靠,例如在页脚或页眉中。如果您在其他地方需要它,请使用标签 + ref。
\documentclass[twoside]{book}%
\usepackage{graphicx}%
\usepackage{lipsum,color,zref-abspage,zref-user}%
\newcounter{myfloat}
\makeatletter
\AddToHook{shipout/before}
{\ifnum \numexpr\ReadonlyShipoutCounter+2\relax =\zref@extractdefault{blub}{abspage}{-1}
\stepcounter{myfloat}\fi}
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{myfloat counter: \themyfloat}
\makeatother
\begin{document}
\lipsum
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{A duck}
\end{figure}
\begin{figure}
\includegraphics[width=\textwidth]{example-image-duck}
\caption{Another duck}
\zlabel{blub}
\end{figure}
\lipsum
\end{document}