1. 为什么需要tikz实现全页覆盖水印
在撰写技术报告、学术论文或商业文档时,我们经常需要为文档添加水印。传统的水印方案比如draftwatermark或background宏包,虽然使用简单,但存在一个致命缺陷:插入的图片会覆盖水印内容。这个问题在包含大量图表的文档中尤为明显,导致水印失去了应有的标识作用。
我曾在为公司制作技术白皮书时遇到过这个痛点。当时使用background宏包添加的"机密"水印,在插入产品架构图后完全被遮挡,不得不重新调整整个文档的排版。后来发现tikz宏包的shipout/foreground钩子可以完美解决这个问题,它能够将水印图层置于所有页面元素的最上层。
tikz的优势不仅在于图层控制,更在于它强大的自定义能力。通过tikz,我们可以:
- 精确控制水印文字的大小、颜色、透明度
- 实现任意角度的旋转效果
- 创建多行重复的复杂水印图案
- 支持文字和图片两种水印形式
- 灵活控制水印在页面上的分布密度
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础实现:单行文字水印
我们先从最简单的单行文字水印开始。以下代码展示了如何使用tikz在每页添加一个居中的水印:
latex复制\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum} % 用于生成示例文本
\AddToHook{shipout/foreground}{
\begin{tikzpicture}[remember picture,overlay]
\node[rotate=45,scale=3,opacity=0.2]
at (current page.center) {Confidential};
\end{tikzpicture}
}
\begin{document}
\lipsum[1-3]
\includegraphics[width=0.5\textwidth]{example-image}
\lipsum[4-6]
\end{document}
这段代码的关键点在于:
\AddToHook{shipout/foreground}确保水印出现在所有内容之上remember picture,overlay让tikz节点可以相对于页面定位
3
