将宏执行延迟到容器浮动被放置时

将宏执行延迟到容器浮动被放置时

我需要一个绝对定位textblock*和一个浮动元素同时出现在同一个页面上。当textblock*在里面写入时figure,它会立即执行,因此在代码中出现的页面上可以看到figure,但浮动元素最终放置的位置则不会显示。以下 MWE 导致以下输出。

我如何才能延迟执行宏(在本例中为 ),\mytextblock直到浮动实际布置完毕?我能否以某种方式存储它并将其挂接到浮动的发货处?

\documentclass[a7paper]{scrbook}
\usepackage[absolute]{textpos}

\newcommand{\mytextblock}[1]{%
    \begin{textblock*}{\textwidth}(0pt,0pt)
        #1
    \end{textblock*}%
}

\begin{document}

Some text.

\begin{figure}[p]
    Figure content
    \mytextblock{textblock content} % should appear on the same page as the figure
\end{figure}
    
\end{document}

输出:

文本块出现在第一页而不是浮动页上

相反,应该textblock*位于 LaTeX 决定放置浮动的页面上:

文本块应位于浮动元素所在的页面上

答案1

这需要一个当前的 LaTeX(使用较旧的 LaTeX,你可以做类似的事情,例如使用 zref)和两个编译

\documentclass[a7paper]{scrbook}
\usepackage[absolute]{textpos}
\ExplSyntaxOn
\newcommand{\mytextblock}[2]
 {
  \RecordProperties{#2}{abspage}
  \AddToHook{shipout/foreground}
   {     
     \int_compare:nNnT{\RefProperty{#2}{abspage}}={\g_shipout_readonly_int}
      {
        \begin{textblock*}{\textwidth}(0pt,0pt)
         #1
        \end{textblock*}
      }%
   }   
 }
\ExplSyntaxOff
\usepackage{lipsum}
\begin{document}

Some text.

\begin{figure}[p]
    Figure content
    \rule{1cm}{0.6\textheight}
    \mytextblock{textblock content1}{myfloat1} % 
\end{figure}

\lipsum*[1-3]

\begin{figure}[p]
    Figure content
    \rule{1cm}{0.6\textheight}
    \mytextblock{textblock content2}{myfloat2} % 
\end{figure}

    
\end{document}

相关内容