マクロはフロートタイプセット時(定義時ではない)に展開されます。

マクロはフロートタイプセット時(定義時ではない)に展開されます。

私の知る限り、フロート環境の内容は、フロートが定義されるときにボックス内に配置されます。フロートが実際にタイプセットされるときに、ユーザー定義のコマンド/マクロを処理して、たとえば、特定のページ (必ずしもフロートが定義されているページではない) に透かしを入れることは可能ですか?

float 環境の定義に何かを追加する必要がありますか、それともその本体内で何らかのコマンドを使用できますか?

答え1

特定の種類のフロートが表示されるページに透かしだけが必要な場合は、次の方法でshipoutルーチンを利用できます。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}

floatcntr上記の MWE は、各 の終わりにステップ実行 (および参照) されるカウンターを作成しますfigure。次に、参照は出荷時のページ番号と比較され、一致する場合は背景コンテンツが表示されます。

注意: 上記の設定では、ページあたり 2 個以下の を想定していますfigure。それ以上の数が存在する場合 (可能性は低い)、何らかの変更が必要になる可能性があります。

関連情報