如何使用浮点来传输代码而不是材料?

如何使用浮点来传输代码而不是材料?

我的 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}

相关内容