在下面的 MWE 中,我monfading
使用命令定义了衰落\tikzfading
,然后在命令中使用该衰落\fill
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{patterns,fadings}
\begin{document}
\tikzfading[name=monfading,left color=transparent!100,right color=transparent!0]
\begin{tikzpicture}
\node[anchor=south west] at (0,0) {HALLO} ;
\fill[draw=black,path fading=monfading,fill=white] (0,0) rectangle (1.5,1);
\end{tikzpicture}
\end{document}
现在,我遇到了一些困难,因为我的 tikz 图片实际上位于页面的标题中(我使用\RequirePackage[pagestyles]{titlesec}
),并且在那里,似乎不记得的定义\tikzfading
。因此,我想将的定义monfading
直接放在\fill
命令中。因此,类似于:
%Pseudocode :
\begin{tikzpicture}
\node[anchor=south west] at (0,0) {HALLO} ;
\fill[draw=black,path fading={left color=transparent!100,right
color=transparent!0},fill=white] (0,0) rectangle (1.5,1);
\end{tikzpicture}
我怎样才能使这个伪代码成为真正的代码?
答案1
这里的问题是,当 TikZ/PGF 使用淡入淡出时,它必须将淡入淡出所需的代码放入 PDF 的开头附近。因此,它将所有这些都存储在一个令牌寄存器中,该寄存器在文档末尾使用进行处理\AtEndDocument
。但这个钩子被执行前最后一个\clearpage
。如果淡入淡出在页眉或页脚中,则会出现问题,因为这些仅在 时处理\clearpage
。因此,进行淡入淡出所需的代码处理得太晚,无法将其放入 PDF 中。解决方案是确保在最后一页完成后完成淡入淡出操作充分处理(即发货)。有多种方法可以实现此目的:
- 提交错误报告并更改 TikZ/PGF。
- 编辑
pgfutil-latex.def
并更改\AtEndDocument{\the\pgfutil@everybye}
为\AtEndDocument{\clearpage\the\pgfutil@everybye}
。 \clearpage
在文档结束前发出,手动或自动均可。如果是自动发出,即通过\AtEndDocument
,则将此前加载中tikz
。使用包
atveryend
并输入:\usepackage{atveryend} \let\OrigAtEndDocument=\AtEndDocument \let\AtEndDocument=\AfterLastShipout \usepackage{tikz} \let\AtEndDocument=\OrigAtEndDocument
在文档的开头。请注意,在主要的TikZ/PGF 代码,那么这是 的唯一用途
\AtEndDocument
。几个库也使用它,特别是external
库,我还没有试验它们是否可以在 之后\clearpage
。试验一下。- 使用该
atveryend
包并编辑pgfutil-latex.def
并更改\AtEndDocument
为\AfterLastShipout
(最好\RequirePackage{atveryend}
也添加到此文件中)。 - 使用其他解决方案之一我可以挂接到文档末尾但在`\clearpage`*之后吗?
以下是一些无需修改任何 TikZ 代码即可运行的代码:
\documentclass[12pt]{article}
\usepackage{atveryend}
\let\OrigAtEndDocument=\AtEndDocument
\let\AtEndDocument=\AfterLastShipout
\usepackage{tikz}
\let\AtEndDocument=\OrigAtEndDocument
\usepackage{lipsum}
\usetikzlibrary{fadings}
\usepackage[pagestyles]{titlesec}
\newpagestyle{teststyle}{
\renewcommand{\makeheadrule}{%
\color{blue}%
\rule[-.3\baselineskip]{\linewidth}{1pt}}
%% HEADER - depends on option
\sethead{}%
{}%
{%
\FadingSection
}%
}
\newcommand{\FadingSection}{%
\begin{tikzpicture}[baseline=(mabox.base)]
\node[rectangle,baseline=current bounding
box.base,anchor=south east,inner ysep =0cm,inner xsep =0cm](mabox) at
(0,0) {\sectiontitle};
\fill[path fading=west,fill=white] (-5,0) rectangle (0,1em);
\end{tikzpicture}
}
\begin{document}
\pagestyle{teststyle}
\section{ ABCD EFGH IJKLM NOPQR 1111 2222 3333 4444}
\FadingSection
\newpage
\lipsum
\end{document}