在浮動排版時(而非定義時)展開宏

在浮動排版時(而非定義時)展開宏

據我所知,當定義浮動時,浮動環境的內容被放入一個盒子中。當浮動實際排版時,是否可以處理使用者定義的命令/宏,例如在該特定頁面上放置浮水印(不一定是定義浮動的頁面)?

是否有必要在浮動環境的定義中添加一些內容,或者我可以在其主體中使用某些命令嗎?

答案1

如果您只是在頁面上出現某種類型的浮動的水印之後,那麼您可以使用以下命令進入發貨例程atbegshi以及帶有浮動計數器追蹤機制的一些計數器魔法的條件:

在此輸入影像描述

\documentclass{article}
\usepackage{atbegshi,refcount,etoolbox,graphicx,xcolor}
\usepackage{lipsum,afterpage}

\newcounter{floatcntr}
\AtEndEnvironment{figure}{\refstepcounter{floatcntr}\label{floatcntr@\roman{floatcntr}}}
\newcounter{floatsearch}\setcounter{floatsearch}{1}

\AtBeginShipout{%
  \ifnum\value{page}>\getpagerefnumber{floatcntr@\roman{floatsearch}}
    \stepcounter{floatsearch}% In case there are multiple (2) floats on the same page
  \fi
  \ifnum\value{page}=\getpagerefnumber{floatcntr@\roman{floatsearch}}
    \AtBeginShipoutUpperLeft{%
      \parbox[t]{\pdfpagewidth}{\centering\bfseries\sffamily%
        \vspace{.4\pdfpageheight}%
        \resizebox{.7\pdfpagewidth}{!}{\textcolor{red!80}{DRAFT}}}
    }%
    \stepcounter{floatsearch}
  \fi
}

\begin{document}

\lipsum[1-3]

\begin{figure}[ht]
  \centering\includegraphics[width=.6\linewidth]{example-image}
  \caption{A figure}
\end{figure}

\lipsum[4-12]

\afterpage{\clearpage}% Just to flush the float
\begin{figure}[p]
  \centering\includegraphics[width=.6\linewidth]{example-image}
  \caption{A figure}
\end{figure}

\lipsum[13-25]

\end{document}

上面的 MWE 創建了一個計數器floatcntr,該計數器在每個 的末尾步進(並引用)figure。然後將該參考與發貨時的頁碼進行比較,如果匹配則顯示一些背景內容。

注意:上述設定假設figure每頁不超過兩個。如果存在更多(極不可能),則可能需要進行一些修改。

相關內容