使用 xelatex 时,使用包“atbegshi”的第一页不存在不透明度

使用 xelatex 时,使用包“atbegshi”的第一页不存在不透明度

我正在使用 XeLaTeX 引擎上的包创建草稿标记tikz。为了将此标记放在每一页上,我使用了包atbegshi。请考虑以下示例:

\documentclass[a4paper]{article}
\usepackage{atbegshi}
\usepackage{tikz}

\AtBeginShipout{\AtBeginShipoutUpperLeft{
    \begin{tikzpicture}[remember picture,overlay]
    \node [rotate=54.85,scale=7,text opacity=0.1,black]
    at (current page.center) {Draftmark};
    \end{tikzpicture}
}}

\begin{document}
Page 1
\newpage
Page 2
\newpage
Page 3
\end{document}

使用 PDFLaTeX 引擎编译此示例时,生成的 PDF 会在每一页上创建一个标记(具有正确的不透明度)。在 XeLaTeX 上,此标记的不透明度在第一页上消失,但在不透明度保持不变的任何后续页面上不会消失。当使用其他软件包时,everypage生成的 PDF 会按要求创建,但我的发布者不支持此软件包。

有人可以重现这种行为并提供解决方案吗?

答案1


注意力!在 LaTeX 2020-10-01 及更新版本中,如果第一页使用了不透明度,则可能需要一条附加规则来对钩子中的代码进行排序。请参阅https://tex.stackexchange.com/a/581404/2388


问题在于您的命令“超出”了发货框,而且太早了。因此不透明度设置未添加到第一页。atbegshi 的文档展示了如何将特殊内容添加到发货框的示例,但我认为更简单的方法是在第一页的某个地方使用不透明度:

\documentclass[a4paper]{article}
\usepackage{atbegshi}
\usepackage{tikz,lipsum}


\AtBeginShipout{\AtBeginShipoutUpperLeft
{
    \begin{tikzpicture}[remember picture,overlay]
    \node [rotate=54.85,scale=7,text opacity=0.1,black]
    at (current page.center) {Draftmark};
    \end{tikzpicture}
}}

\begin{document}
Page 1\tikz[overlay]\path[opacity=0.1](0,0); 
\newpage
Page 2 
\newpage
Page 3
\end{document}

使用下一个 Latex 版本(您现在可以用 xelatex-dev 进行测试),您可以使用新的shipout/foreground钩子:

\documentclass[a4paper]{article}
\usepackage{tikz,lipsum}


\AddToHook{shipout/foreground}
{
 \put(0,0)
   {
    \begin{tikzpicture}[remember picture,overlay]
    \node [rotate=54.85,scale=7,text opacity=0.1,black]
    at (current page.center) {Draftmark};
    \end{tikzpicture}
   }
}


\begin{document}
Page 1
\newpage
Page 2 
\newpage
Page 3
\end{document}

相关内容