想象一下,你想在某些大型文档的每一页上模拟手写印章。这肯定是不完美的印刷品,随机的每一页的墨水浓度、褪色、旋转和模糊度都会发生变化。想象一下,印章内容必须随着每份文件而变化。
传统的解决方案是为每份文件购买橡皮图章,然后进行盖章和扫描练习,但除了昂贵之外,还有什么乐趣呢?
更便宜的解决方案是在每页的某个位置插入 PNG 或 PDF 图像,但设计每个印章仍需要大量前期工作。此外,如果印章在每页的同一位置始终是相同的图像,即使原始印章非常逼真,也会显得太明显是计算机生成的。
在如何制作逼真的旧橡皮图章?图中显示了印章可以包含 LaTeX 文本,以及褪色效果如何部分模仿橡皮图章。除此之外,我还尝试使用 LaTeX 制作整个印章(除了一些内部图像太复杂而无法编码),借助 TikZ 库、透明度和文本层,轻松配置内容和墨水颜色,并在圆圈线中添加一些噪点decorations.pathmorphing
。结果是上面的图像和下面肮脏、迟钝的代码。
我发现这仍然是一个很差的结果。这不仅是因为专家可以做出更逼真的模糊和/或更干净的代码和/或更快的编译,更主要的是因为在思考什么是好的通用 LaTeX 压模时,我想到了一些最低要求:
- pdflatex 兼容
- 高度可配置由最终用户定义(用户定义的文本内容、墨水颜色、大小、中央徽章)
- 结果与常见的 PDF 查看器兼容(不仅仅是 Acrobat Reader)
- 随机页面印章旋转(最好限制在 +/- 30 度左右)
- 随机逐页褪色。可能只需对整个印章进行简单的随机方向(360 度)褪色就足够了,但它不能影响重叠的文本。
- 页面间墨水浓度随机(即整体透明度在0.5至0.8之间)
- 具体区域之间的随机页面位置(即页面 x,y 位置大约 +/- 2 厘米)
不幸的是,我的经验仍然很少,无法显著改进代码,主要是使用 TikZ。这一切都可能吗?
最后,对于假想的印章包装,您自己期望的里程碑是什么?例如,将替代印章制成椭圆形或矩形?
很抱歉问题太宽泛,但我认为在这种情况下,即使是部分答案也比针对孤立问题的完整答案更容易处理。
\documentclass{article}
\usepackage{lipsum}
\usepackage{xcolor,pgfplots}
\usepackage{tikz}
\usetikzlibrary{calc,patterns,fadings,positioning,decorations.pathmorphing,fit}
\usetikzlibrary{decorations.text}
\pgfplotsset{compat=1.7}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{rotating}
% STAMP CONFIGURABLE CONTENT
\definecolor{stampink}{RGB}{0 34 85} % Define color old stamp in RGB
\newcommand\textUp{TOWARD A STAMPER PACKAGE} % Top label
\newcommand\textDown{Open question} % Bottom label
\newcommand\textCap{\texttt{\bfseries\today}} % Center label
% PDF (name and path) for best result with same RGB that stampink
\newcommand\CoatOfArms{stampcoat.png}
% STAMP FIXED CODE
% free hand style of circles stolen from https://tex.stackexchange.com/a/49272/11604
\pgfdeclaredecoration{free hand}{start}
{
\state{start}[width = +1pt,
next state=step,
persistent precomputation = \pgfdecoratepathhascornersfalse]{}
\state{step}[auto end on length = 3pt, % 3
auto corner on length = 3pt, % 3
width=+1pt] % 1
{
\pgfpathlineto{
\pgfpointadd
{\pgfpoint{1pt}{1pt}}
{\pgfpoint{rand*.25pt}{rand*.2pt}} % good values .2pt aand .15pt
}
}
\state{final}
{}
}
\tikzset{free hand/.style={
decorate,
decoration={free hand}
}
}
\def\freedraw#1;{\draw[free hand] #1;}
%CENTRAL STAMP CONTENT
\newcommand\textCenter{
\begin{minipage}{2.2cm}{}
\vspace{-1em}
\centering
\includegraphics[width=1.8cm,height=1.8cm]{\CoatOfArms}\par
\resizebox{2cm}{.205cm}{\textcolor{stampink}{\textCap}}%
\end{minipage}
}
% STAMPER MACRO
\newcommand\Stamper{\resizebox{3cm}{3cm}{ % FINAL SIZE TAMP
\begin{tikzpicture}[opacity=.8,transparency group]
\normalsize\sffamily
% EXTERIOR CIRCLE
\freedraw[color=stampink,opacity=.3,line width=5pt,rotate=0] (0,0.02) circle (3.6cm);
\freedraw[color=stampink,opacity=.5,line width=3pt,rotate=30] (0,0.01) circle (3.6cm);
\freedraw[color=stampink,opacity=.7,very thick,rotate=20] (0,0) circle (3.6cm);
% TOP CIRCULAR LABEL
\path [opacity=.2,postaction={decorate,decoration={raise=-1.3ex,text along path,
reverse path,text align=center,
text={|\huge\bfseries\color{stampink}|\textUp}}}] (-31:3.055cm) arc (-31:210:3.055cm);
\path [opacity=.4,postaction={decorate,decoration={raise=-1.7ex,text along path,
reverse path,text align=center,
text={|\huge\bfseries\color{stampink}|\textUp}}}] (-30.7:3.055cm) arc (-30.7:210:3.055cm);
\path [opacity=.8,postaction={decorate,decoration={raise=-1.5ex,text along path,
reverse path,text align=center,
text={|\huge\bfseries\color{stampink}|\textUp}}}] (-30:3.05cm) arc (-30:210:3.05cm);
% BOTTOM CIRCULAR LABEL
\path [opacity=.2,postaction={decorate,decoration={raise=-1.2ex,text along path, text align=center,
text={|\huge\bfseries\color{stampink}|\textDown}}}] (210:3.05cm) arc (210:330:3.05cm);
\path [opacity=.4,postaction={decorate,decoration={raise=-.85ex,text along path, text align=center,
text={|\huge\bfseries\color{stampink}|\textDown}}}] (210:3.05cm) arc (210:330:3.05cm);
\path [opacity=.8,postaction={decorate,decoration={raise=-1ex,text along path, text align=center,
text={|\huge\bfseries\color{stampink}|\textDown}}}] (210:3.05cm) arc (210:330:3.05cm);
%INNER CIRCLE AND CENTRAL CONTENT
\freedraw[color=stampink,opacity=.3,line width=4pt,rotate=0] (0.015,0.02) circle (2.5cm) node[scale=1.54] (m) {\textCenter};
\freedraw[color=stampink,opacity=.5,line width=3pt,rotate=30] (-0.025,-0.01) circle (2.5cm) node[scale=1.5] (m) {\textCenter};
\freedraw[color=stampink,opacity=.7,very thick,rotate=20] (0,0) circle (2.5cm) node[scale=1.52] (m) {\textCenter};
\draw[draw=none]
[postaction={path fading=north,fill=white!99,opacity=0.6}]
(-5,-5) rectangle (5,5);%
\end{tikzpicture}}}
\begin{document}
% stamp under text
\vspace{5.5cm}\hspace{8cm}\rotatebox[origin=c]{-30}{\Stamper}\vspace{-5.5cm}
\lipsum[2]
% stamp over text
\vspace{-2cm}\Stamper
\end{document}
编辑:由于stampcoat.pdf
无法上传,MWE 更改为包含 PNG 版本:
这可以通过任何具有透明背景和与定义的颜色相同的 RGB 的 PDF 或 PNG 图像来改变stampink
。
答案1
您可以调整以下示例:
\documentclass{article}
\usepackage{background}
\usepackage{lipsum}
\backgroundsetup{%
color={rgb:red,\thepage;green,10},
opacity=0.1*\thepage,
scale=5,
position={0.1*\thepage,-0.1*\thepage},
angle=10*\thepage,
contents={\begin{tikzpicture}\draw(0,0)circle(1)node{A \thepage B};\end{tikzpicture}},
}
\begin{document}
\lipsum[1-100]
\end{document}
如果您希望随机化,则必须使用随机器将代码中的计算替换为适当的计算。最困难的方面是颜色,因为 tikz 无法解析颜色定义(或者说,我还没有完全理解该技术)。如果您需要更复杂的计算(例如颜色计算),您也可以使用包everypage
,无论如何包都会使用它background
。