页面背景 (eso-pic)

本页讲的是页面背景:铺在正文下方的整页颜色或图片、斜向的 “DRAFT” 水印、角落里的日期印章。基础是 eso-pic 包,它提供在每一页固定位置放置图形的底层机制。在它之上,还有用声明式方式制作水印的 background 包、专门做文字水印的 draftwatermark,以及用于整页纯色背景的 \pagecolor

eso-pic:背景的基础

eso-pic 的思路很简单。LaTeX 在输出(ship out)一页之前,会叠加一个与整页同大的透明 picture 环境,然后你用 \put 把任意图形放进去;这一过程会在每一页重复。用于背景的核心命令是 \AddToShipoutPictureBG{...}:参数里的内容会画在 从这里开始的所有页面 的正文下方。只想作用于当前页时,使用带星号的 \AddToShipoutPictureBG*{...}

如果要叠在正文 上方(前景),使用 \AddToShipoutPictureFG{...}(以及只作用于当前页的 \AddToShipoutPictureFG*)。这适合把印章压在正文上、刻意遮住部分内容的场景。为了兼容,还存在 \AddToShipoutPicture\AddToShipoutPicture* 这两个别名,它们与背景版(BG)作用相同。要在中途清除先前设置的背景,调用 \ClearShipoutPictureBG;前景侧则调用 \ClearShipoutPictureFG

定位的关键是 坐标原点默认在页面左下角\put(x,y){...} 中的坐标从那里量起,长度单位由 \unitlength 决定(默认 1 pt)。每次从角落数坐标很麻烦,所以 eso-pic 提供了辅助命令:\AtPageCenter{...}(页面中心)、\AtPageLowerLeft{...}(左下)、\AtPageUpperLeft(左上),以及以正文区域为基准的 \AtTextCenter / \AtTextLowerLeft / \AtTextUpperLeft 等。加上 texcoord 选项时,原点会改到左上角。

实际的背景通常是在 \put 里面放入 \includegraphicstikzpicture 来制作。下面是把照片铺满整页(全幅、出血)的最小示例。

document.tex
\documentclass{article}
\usepackage{eso-pic}
\usepackage{graphicx}

% 全ページの背景に画像を全面表示
\AddToShipoutPictureBG{%
  \AtPageLowerLeft{%
    \includegraphics[width=\paperwidth,height=\paperheight]{background.jpg}}%
}

\begin{document}
Text sits on top of the full-page background.
\end{document}

与 TikZ 结合时,即使没有图片也能画出底纹或图形背景。把 tikzpicture 放进 \AtPageCenter,就可以用页面中心作为原点自由绘图。为了辅助定位,可以用 grid 选项加载 eso-pic\usepackage[grid]{eso-pic});它会在整页上画出坐标网格(单位由 gridunit 决定,默认 mm)。

document.tex
\documentclass{article}
\usepackage{eso-pic}
\usepackage{tikz}

% TikZ でページ中央に淡い円の背景を描く
\AddToShipoutPictureBG{%
  \AtPageCenter{%
    \begin{tikzpicture}
      \fill[blue!8] (0,0) circle (6cm);
    \end{tikzpicture}}%
}

\begin{document}
A soft tinted disc sits behind the text on every page.
\end{document}

background:声明式水印

如果不想计算 \put 坐标,只想轻松放一个斜向水印,background 包很方便。它用 TikZ 处理背景素材,所有设置都集中到 \backgroundsetup{key=value, ...}。只写 \usepackage{background} 而不指定任何选项时,默认会在每一页中央以 60° 斜向放置一个大型红色系(red!45)“Draft”。

主要键包括:contents=(显示内容,可以是文字、\includegraphics 或绘图)、scale=(缩放)、opacity=(不透明度,0–1)、angle=(角度,逆时针,−360 到 360)、color=(颜色,xcolor 的全部范围)、position=(TikZ 节点定位语法,例如 current page.center;传裸坐标时不要加括号)、placement=center/top/bottom)、pages=all/some)和 firstpage=(只在第一页)。\backgroundsetup 可以在导言区或正文中调用任意多次,因此可以在文档中途切换设计。

下面是典型示例:在每一页铺上半透明的斜向 “DRAFT”。

document.tex
\documentclass{article}
\usepackage{background}

\backgroundsetup{
  contents={DRAFT},
  scale=8,
  opacity=0.3,
  angle=45,
  color=red,
  position=current page.center,
}

\begin{document}
Every page carries a diagonal DRAFT watermark.
\end{document}

只想在部分页面显示时,设置 pages=some,并在需要显示的页面调用 \BgThispage;反过来,\NoBgThispage 可以只在某一页关闭背景。注意两点。要让位置正确稳定,需要编译两次。另外,如果 contents= 的素材包含 LaTeX 命令,应通过 \backgroundsetup 指定,而不要作为包选项写入(这是选项解析方式造成的)。还要注意,background 与双栏模式配合不好,\BgThispage 一类命令会失效。

更简单的水印:draftwatermark 等

如果只需要文字水印,专用的 draftwatermark 更简单。只要 \usepackage{draftwatermark},每一页中央就会出现一个大的灰色 “DRAFT”。它完全不使用 PostScript special,因此在 pdfLaTeX、XeLaTeX、LuaLaTeX 下都以同样方式工作。设置集中在 \DraftwatermarkOptions{key=value},可用键包括 text=(文字)、color=(颜色)、scale=(倍率)、angle=(角度,默认 45°)、fontsize=firstpageonly(只在第一页)。

document.tex
\documentclass{article}
\usepackage{draftwatermark}

\DraftwatermarkOptions{text=CONFIDENTIAL, color={[gray]{0.85}}, angle=45}

\begin{document}
A light gray CONFIDENTIAL watermark appears behind the text.
\end{document}

为兼容起见,旧命令 \SetWatermarkText{...}\SetWatermarkScale{...}\SetWatermarkColor{...}\SetWatermarkAngle{...}\SetWatermarkLightness{...}(0–1,从黑到白)仍然可用,但新文档建议使用 \DraftwatermarkOptions 的键值形式。一个设计上的注意点是:draftwatermark 只能把文字铺在正文 下面(背景),不能像前景印章那样压在正文上。若要叠在前景,或精细控制层叠顺序,请使用 eso-pic\AddToShipoutPictureFG,或依靠 scrlayer / LaTeX 的 shipout hooks。

当背景只是普通的颜色图片时,朴素工具有时比专用包更合适。\pagecolor{color} 会从当前位置开始把整页背景填成指定颜色(颜色写法见颜色页面);\nopagecolor 可恢复。对于图片,基于 eso-picwallpaper 包提供 \CenterWallPaper{scale}{file} 居中放图、\TileWallPaper{width}{height}{file} 平铺图片,以及 \ULCornerWallPaper 等四角放置命令。下面的表整理了选择方式。

工具适合用途可放前景?
eso-pic把任意图形放在固定位置;最灵活的基础工具BG 和 FG 都支持
background声明式斜向水印;角度和不透明度易设可用 placement 调整
draftwatermark最快制作文字水印(DRAFT 等);所有引擎可用仅背景(不可)
\pagecolor整页纯色背景不适用
wallpaper居中或平铺的图片背景仅背景

如何选择,以及常见卡点

  • 只是斜向文字水印draftwatermark(最省事)或 background(可细调角度/不透明度)。
  • 整页图片、底纹或复杂绘图eso-pic(需要时在 \put 中放 tikzpicture\includegraphics)。
  • 要叠在正文上方(印章)eso-pic\AddToShipoutPictureFGdraftwatermark 只做背景,不能做到。
  • 普通背景色\pagecolor;不需要额外包。
  • 位置偏移或不显示background 编译两次;水印太淡或太重时调 opacityscale
  • 日文环境(pLaTeX/upLaTeX + dvipdfmx) → 这些都能用,但颜色、不透明度和图片载入依赖驱动;eso-pic 也有 dvips 选项。

拿不准时,从最朴素的工具开始最快:背景色用 \pagecolor,文字水印用 draftwatermark,想用声明式方式整理就用 background;只有这些都达不到要求时,再下探到 eso-pic,用 \put 直接放置。这个顺序几乎能覆盖所有场景。