atbegshi 的 \AtBeginShipoutInit 宏导致 tikz 和 xelatex 中的不透明度选项行为异常

atbegshi 的 \AtBeginShipoutInit 宏导致 tikz 和 xelatex 中的不透明度选项行为异常

使用\AtBeginShipoutInit会导致不透明度选项在第一页无法正常工作,否则代码就没有问题。

\documentclass{article}

\usepackage{lipsum}
\usepackage{tikz}
\usepackage{atbegshi}

\AtBeginShipoutInit
\AtBeginShipout{\AtBeginShipoutAddToBox{%
\begin{tikzpicture}[remember picture, overlay, ]
    \node [color=black, scale=\textwidth/1cm, rotate=45, opacity=.2] at (current page.center) {draft};
\end{tikzpicture}
}}

\begin{document}
\lipsum[1-20]
\end{document}

第一页将是: enter image description here

第二个: enter image description here

ps:正如 Heiko Oberdiek 所说,pdflatex 和 lualatex 没有这样的效果。

答案1

这个问题可以通过 重现xelatex。删除显式\AtBeginShipoutInit帮助:

\documentclass{article}

\usepackage{lipsum}
\usepackage{tikz}
\usepackage{atbegshi}

\AtBeginShipout{\AtBeginShipoutAddToBox{%
\begin{tikzpicture}[remember picture, overlay, ]
    \node [color=black, scale=\textwidth/1cm, rotate=45, opacity=.2]
    at (current page.center) {draft};
\end{tikzpicture}%
}}

\begin{document}
\lipsum[1-20]
\end{document}

其他选项是使用pdflatexlualatex

\AtBeginShipoutInit会在 处自动调用\begin{document},如果之前需要它,因为前导码包含一些需要它的未知代码,那么可以尝试一种折衷方案:

\documentclass{article}

\usepackage{lipsum}
\usepackage{tikz}
\usepackage{atbegshi}

\AtBeginDocument{\AtBeginShipoutInit}

\AtBeginShipout{\AtBeginShipoutAddToBox{%
\begin{tikzpicture}[remember picture, overlay, ]
    \node [color=black, scale=\textwidth/1cm, rotate=45, opacity=.2]
    at (current page.center) {draft};
\end{tikzpicture}%
}}

% <unknown code>

\begin{document}
\lipsum[1-20]
\end{document}

相关内容