summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/magicwatermark/magicwatermark.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-06-17 03:01:24 +0000
committerNorbert Preining <norbert@preining.info>2022-06-17 03:01:24 +0000
commitf9418ac1e9385653cfa09da311bb2d405a936334 (patch)
tree764fc072c0bea51901ba3ef3a6dd915400df47c5 /macros/latex/contrib/magicwatermark/magicwatermark.dtx
parentb83d15e1ff2e551eb7391d45becd87dce59d39b8 (diff)
CTAN sync 202206170301
Diffstat (limited to 'macros/latex/contrib/magicwatermark/magicwatermark.dtx')
-rw-r--r--macros/latex/contrib/magicwatermark/magicwatermark.dtx598
1 files changed, 598 insertions, 0 deletions
diff --git a/macros/latex/contrib/magicwatermark/magicwatermark.dtx b/macros/latex/contrib/magicwatermark/magicwatermark.dtx
new file mode 100644
index 0000000000..35115c1cca
--- /dev/null
+++ b/macros/latex/contrib/magicwatermark/magicwatermark.dtx
@@ -0,0 +1,598 @@
+% \iffalse meta-comment
+% !TEX program = XeLaTeX
+%<*internal>
+\iffalse
+%</internal>
+%<*internal>
+\fi
+\begingroup
+ \def\temp{LaTeX2e}
+\expandafter\endgroup\ifx\temp\fmtname\else
+\csname fi\endcsname
+%</internal>
+%<*install>
+
+\input ctxdocstrip %
+
+\let\MetaPrefix\relax
+
+\declarepostamble\emptypostamble
+\endpostamble
+
+\def\MetaPrefix{-- }
+
+
+\let\MetaPrefix\DoubleperCent
+
+\generate
+ {
+%</install>
+%<*internal>
+ \usedir{source/xelatex/magicwatermark}
+ \file{magicwatermark.ins} {\from{\jobname.dtx}{install}}
+%</internal>
+%<*install>
+ \usedir{xetex/xelatex/magicwatermark}
+ \file{magicwatermark.sty} {\from{\jobname.dtx}{package}}
+ \nopreamble\nopostamble
+ \usedir{doc/xelatex/magicwatermark}
+ \file{README.md} {\from{\jobname.dtx}{readme}}
+ }
+
+\endbatchfile
+%</install>
+%<*internal>
+\fi
+%</internal>
+%<package>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
+%<package>\ProvidesPackage{magicwatermark}[2021/12/22 v1.0.1 watermark for ljguo ]
+%<*driver>
+\documentclass{ctxdoc}
+\usepackage{graphicx}
+\usepackage{enumitem}
+\usepackage{listings}
+\lstset{
+frame=tb,framerule=2pt,language={[LaTeX]TeX},basicstyle={\ttfamily},
+language={[LaTeX]TeX},
+keywordstyle=\color{red!70!black}\bfseries,
+keywordstyle={[2]\color{blue!70!black}\bfseries},
+morekeywords={PageSetup,Watermark,NewWatermark,MyPageSetup,MyWatermark,EvenPageSetup,OddPageSetup,EvenWatermark,OddWatermark,ClearWatermark}}
+\usepackage{fontspec}
+\IfFontExistsTF{calibri.ttf}
+{
+ \setmainfont{calibri.ttf}[
+ BoldFont = calibrib.ttf,
+ ItalicFont = calibrii.ttf,
+ BoldItalicFont = calibriz.ttf
+ ]
+}
+{}
+\setCJKmainfont[AutoFakeBold,AutoFakeSlant]{simfang.ttf}
+\usepackage{magicwatermark}
+\renewcommand*\marg[1]{\{\meta{#1}\}}
+\renewcommand*\oarg[1]{[\meta{#1}]}
+\renewcommand*\parg[1]{(\meta{#1})}
+\begin{document}
+%<!--CODEDOC--> \DisableImplementation
+ \EnableImplementation
+ \DocInput{\jobname.dtx}
+ \IndexLayout
+ \PrintChanges
+ \PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+
+% \GetFileId{magicwatermark.sty}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+%\title{\pkg{magicwatermark}: 魔法水印宏包}
+%\author{郭李军 \\ liguo1020@gmail.com}
+%\def\version{v1.0.1}
+%\date{\today\quad\version}
+%\pagestyle{empty}
+%\PageSetup*
+%{
+% \begin{tikzpicture}[remember picture,overlay]
+% \node[cyan,scale = 2,shift={(-1,-1)}] at (current page.north east){--~\thepage~--};
+% \end{tikzpicture}
+%}
+%\Watermark
+%\maketitle
+%\thispagestyle{empty}
+%\tableofcontents
+%\begin{documentation}
+%\changes{v1.0.1}{2021/12/21}{实现了一些基本功能}
+%\begin{abstract}
+%\pkg{magicwatermark} 是一个基于 \pkg{everypage} 和 \pkg{tikz} 宏包,并经过 \LaTeX3 \ 进行封装的宏包,它可以很灵活的设置和清除水印,所有水印内容都放在 \verb|tikz| 的一个 \verb|node| 里面,并处于页面中心。
+%\end{abstract}
+%\section{介绍}
+%目前 \pkg{magicwatermark} 宏包只能实现如下功能
+%\begin{itemize}
+% \item 设置所有页面的水印
+% \item 设置奇数页的水印
+% \item 设置偶数页的水印
+% \item 新建水印,同页面设置多个水印
+% \item 清除水印
+%\end{itemize}
+%\section{用户接口}
+%\subsection{提供命令}
+% \begin{function}[added=2021-12-21,updated=2021-12-21]{\PageSetup}
+% \begin{syntax}
+% \tn{PageSetup} \oarg{水印参数} \marg{水印内容}
+% \end{syntax}
+% 此命令用于设置所有页面的水印内容,接受两个参数,第一个参数用于设置一些属性,以 \verb|key=value| 的形式给出, 第二个参数用于设置水印内容,可以是文字、图片、等.
+% \end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\Watermark}
+%\begin{syntax}
+% \tn{Watermark}
+%\end{syntax}
+% 该命令用于显示上面设置的水印
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenPageSetup}
+%\begin{syntax}
+% \tn{EvenPageSetup}\oarg{水印参数}\marg{水印内容}
+%\end{syntax}
+% 该命令用于设置偶数页的水印内容
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\EvenWatermark}
+%\begin{syntax}
+% \tn{EvenWatermark}
+%\end{syntax}
+% 该命令用于显示上面设置的偶数页水印
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddPageSetup}
+%\begin{syntax}
+% \tn{OddPageSetup}\oarg{水印参数}\marg{水印内容}
+%\end{syntax}
+% 该命令用于设置奇数页的水印内容
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\OddWatermark}
+%\begin{syntax}
+% \tn{OddWatermark}
+%\end{syntax}
+% 该命令用于显示上面设置的奇数页水印
+%\end{function}
+%\subsection{扩展命令}
+%以下带星号命令用法和上面的类似,与其说是扩展,不如说是取消了限制,以上的命令都将水印内容写在一个\verb|node|中,对于对 TikZ 不太熟练的用户来说,前者更加方
+%便快捷,而后者则更加灵活
+%\begin{function}[added=2022-01-07,updated=2022-01-07]{\PageSetup*}
+%\begin{syntax}
+% \tn{PageSetup*}\marg{水印内容}
+%\end{syntax}
+%\end{function}
+%\begin{function}[added=2022-01-07,updated=2022-01-07]{\EvenPageSetup*}
+%\begin{syntax}
+% \tn{EvenPageSetup*}\marg{水印内容}
+%\end{syntax}
+%\end{function}
+%\begin{function}[added=2022-01-07,updated=2022-01-07]{\OddPageSetup*}
+%\begin{syntax}
+% \tn{OddPageSetup*}\marg{水印内容}
+%\end{syntax}
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\NewWatermark}
+%\begin{syntax}
+% \tn{NewWatermark}\marg{水印名称}
+%\end{syntax}
+%该命令用于新建一个水印,注意水印名称不能是 \verb|main|, \verb|even|, \verb|odd|.
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyPageSetup}
+%\begin{syntax}
+% \tn{MyPageSetup}\oarg{水印参数}\marg{水印名称}\marg{水印内容}
+%\end{syntax}
+%用于设置新建的水印内容
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\MyWatermark}
+%\begin{syntax}
+% \tn{MyWatermark}\marg{水印名称}
+%\end{syntax}
+% 该命令用于显示上面设置的水印
+%\end{function}
+%\begin{function}[added=2021-12-21,updated=2021-12-21]{\ClearWatermark}
+%\begin{syntax}
+% \tn{ClearWatermark}\marg{水印列表}
+%该命令用于清除设置的水印,接受一个逗号列表作为参数,例如:
+%\begin{itemize}
+% \item \verb|\ClearWatermark{main}| 清除由 \verb|\Watermark| 设置的水印
+% \item \verb|\ClearWatermark{even,odd}| 清除奇数和偶数页的水印
+% \item \verb|\ClearWatermark{all}| 清除所有的水印
+% \item \verb|\ClearWatermark{name1,name2,name3,...}|
+%\end{itemize}
+%\end{syntax}
+%\end{function}
+%\subsection{参数列表}
+%以上设置命令中的\textbf{水印参数}如下
+%\begin{itemize}
+% \item \verb|scale = <number>| 用于设置缩放比例
+% \item \verb|opacity = <number>| 用于设置不透明度
+% \item \verb|shift = {(x,y)}| 用于按向量 (x,y) 平移
+% \item \verb|color = <color expression>| 用于设置文本颜色
+% \item \verb|rotate = <angle>| 用于设置旋转角度
+% \item \verb+align = <center|left|right>+ 用于设置多行文本对齐方式,默认为 center
+% \item \verb+showframe = <true|false>+ 用于设置是否显示文本框,默认为 false
+%\end{itemize}
+%\subsection{一些说明}
+%所有的显示命令和清除命令都仅对该命令后面的文本生效。
+
+%\section{Examples}
+%\subsection{不带星号}
+%\begin{lstlisting}
+\documentclass{ctexart}
+\usepackage{magicwatermark}
+\PageSetup[
+ rotate = 30, % 设置旋转角度
+ color = red!80, % 设置水印内容颜色
+ scale = 6 % 设置比例
+]{
+ 水印内容
+}
+\Watermark % 全文生效
+\begin{document}
+...
+\end{document}
+\end{lstlisting}
+%\subsection{奇偶页}
+%\begin{lstlisting}
+\documentclass{ctexart}
+\usepackage{magicwatermark}
+\EvenPageSetup[color=cyan,showframe,scale=4]{偶数页} % 设置奇数页
+\OddPageSetup[color=purple,showframe,scale=4]{奇数页} % 设置偶数页
+\EvenWatermark % 显示水印
+\OddWatermark
+\begin{document}
+...
+\end{document}
+\end{lstlisting}
+%\subsection{带星号}
+%\begin{lstlisting}
+\documentclass{ctexart}
+\usepackage{magicwatermark}
+\PageSetup*{
+ \begin{tikzpicture}[remember picture,overlay]
+ \node[cyan,scale = 2,shift={(-1,-1)}] at
+ (current page.north east){--~\thepage~--};
+ \end{tikzpicture}
+}
+\begin{document}
+...
+\Watermark % 该命令之前不生效
+\end{document}
+\end{lstlisting}
+%\subsection{新建水印}
+%\begin{lstlisting}
+\documentclass{ctexart}
+\usepackage{magicwatermark}
+\NewWatermark{one} % 新建两个水印
+\NewWatermark{two}
+\MyPageSetup[scale=5,color=blue]{one}{水印内容一} % 设置水印
+\MyPageSetup[scale=5,color=red]{two}{水印内容二}
+\begin{document}
+\MyWatermark{one} % 使用第一个水印
+...
+\newpage
+\ClearWatermark{one} % 清除第一个水印
+\MyWatermark{two} % 使用第二个水印
+...
+\end{document}
+\end{lstlisting}
+%\end{documentation}
+%
+% \StopEventually{}
+% \section{代码实现}
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+% 加载必要的宏包
+% \begin{macrocode}
+\RequirePackage{everypage-1x,tikz,xparse,expl3}
+% \end{macrocode}
+% 打开\LaTeX3 编程环境
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+% 声明一些变量
+% \begin{macrocode}
+\tl_new:N \l_mainpage_tl
+\tl_new:N \l_evenpage_tl
+\tl_new:N \l_oddpage_tl
+\tl_new:N \g_case_tl
+\tl_new:N \g_clear_all_tl
+% \end{macrocode}
+% 定义警告
+% \begin{macrocode}
+\msg_new:nnn{clear}{not~have}{I~can~not~find~the~"\clear"~watermark~!}
+% \end{macrocode}
+% \begin{macro}{\PageSetup}
+% 对所有页面设置水印
+% \begin{macrocode}
+\NewDocumentCommand{\PageSetup}{sO{}+m}
+{
+ \IfBooleanTF{#1}
+ {
+ \tl_set:Nn \l_mainpage_tl{#3}
+ }
+ {
+ \tl_set:Nn \l_mainpage_tl
+ {
+ \group_begin:
+ \keys_set:nn{watermark}{#2}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \node
+ [
+ scale = \fp_use:N\l_scale_fp,
+ opacity = \fp_use:N\l_opacity_fp,
+ shift = \tl_use:N\l_shift_tl,
+ color = \tl_use:N \l_color_tl,
+ rotate = \fp_use:N \l_rotate_fp,
+ align = \tl_use:N \l_align_tl,
+ \bool_if:NTF \l_showframe_bool{draw}{},
+ ]
+ at(current~page.center){#3};
+ \end{tikzpicture}
+ \group_end:
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\Watermark}
+% 用于显示由 \verb|\PageSetup| 命令设置的水印
+% \begin{macrocode}
+\NewDocumentCommand{\Watermark}{}
+{
+ \AddEverypageHook{\tl_use:N \l_mainpage_tl}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\EvenPageSetup}
+% 对偶数页设置水印
+% \begin{macrocode}
+\NewDocumentCommand{\EvenPageSetup}{sO{}+m}
+{
+ \IfBooleanTF{#1}
+ {
+ \tl_set:Nn \l_evenpage_tl{#3}
+ }
+ {
+ \tl_set:Nn \l_evenpage_tl
+ {
+ \group_begin:
+ \keys_set:nn{watermark}{#2}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \node
+ [
+ scale = \fp_use:N\l_scale_fp,
+ opacity = \fp_use:N\l_opacity_fp,
+ shift = \tl_use:N\l_shift_tl,
+ color = \tl_use:N \l_color_tl,
+ rotate = \fp_use:N \l_rotate_fp,
+ align = \tl_use:N \l_align_tl,
+ \bool_if:NTF \l_showframe_bool{draw}{},
+ ]
+ at(current~page.center){#3};
+ \end{tikzpicture}
+ \group_end:
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\EvenWatermark}
+% 用于显示由 \verb|\EvenPageSetup| 命令设置的水印
+% \begin{macrocode}
+\NewDocumentCommand{\EvenWatermark}{}
+{
+ \AddEverypageHook
+ {
+ \int_if_even:nT{\int_use:N \value{page}}
+ {
+ \tl_use:N \l_evenpage_tl
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\OddPageSetup}
+% 对奇数页设置水印
+% \begin{macrocode}
+\NewDocumentCommand{\OddPageSetup}{sO{}+m}
+{
+ \IfBooleanTF{#1}
+ {
+ \tl_set:Nn \l_oddpage_tl{#3}
+ }
+ {
+ \tl_set:Nn \l_oddpage_tl
+ {
+ \group_begin:
+ \keys_set:nn{watermark}{#2}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \node
+ [
+ scale = \fp_use:N\l_scale_fp,
+ opacity = \fp_use:N\l_opacity_fp,
+ shift = \tl_use:N\l_shift_tl,
+ color = \tl_use:N \l_color_tl,
+ rotate = \fp_use:N \l_rotate_fp,
+ align = \tl_use:N \l_align_tl,
+ \bool_if:NTF \l_showframe_bool{draw}{},
+ ]
+ at(current~page.center){#3};
+ \end{tikzpicture}
+ \group_end:
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\OddWatermark}
+% 用于显示由 \verb|\OddPageSetup| 命令设置的水印
+% \begin{macrocode}
+\NewDocumentCommand{\OddWatermark}{}
+{
+ \AddEverypageHook
+ {
+ \int_if_odd:nT{\int_use:N \value{page}}
+ {
+ \tl_use:N \l_oddpage_tl
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\NewWatermark}
+% 用于新建一个水印
+% \begin{macrocode}
+\NewDocumentCommand{\NewWatermark}{m}
+{
+ \tl_new:c {l_#1_tl}
+ \tl_put_right:Nn \g_case_tl {{#1}{\tl_clear:c {l_#1_tl}}}
+ \tl_put_right:Nn \g_clear_all_tl {\tl_clear:c {l_#1_tl}}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MyPageSetup}
+% 用于设置新建的水印
+% \begin{macrocode}
+\NewDocumentCommand{\MyPageSetup}{O{} m +m}
+{
+ \tl_set:cn {l_#2_tl}
+ {
+ \group_begin:
+ \keys_set:nn{watermark}{#1}
+ \begin{tikzpicture}[remember~picture,overlay]
+ \node
+ [
+ scale = \fp_use:N\l_scale_fp,
+ opacity = \fp_use:N\l_opacity_fp,
+ shift = \tl_use:N\l_shift_tl,
+ color = \tl_use:N \l_color_tl,
+ rotate = \fp_use:N \l_rotate_fp,
+ align = \tl_use:N \l_align_tl,
+ \bool_if:NTF \l_showframe_bool{draw}{},
+ ]
+ at(current~page.center){#3};
+ \end{tikzpicture}
+ \group_end:
+ }
+}
+% \end{macrocode}
+% \end{macro}
+
+
+
+% \begin{macro}{\MyWatermark}
+% 用于显示由 \verb|\MyPageSetup| 命令设置的水印
+% \begin{macrocode}
+\NewDocumentCommand{\MyWatermark}{m}
+{
+ \AddEverypageHook{\tl_use:c {l_#1_tl}}
+}
+% \end{macrocode}
+% \end{macro}
+% 定义一些可选参数, 用于对水印进行设置
+% \begin{macrocode}
+\keys_define:nn{watermark}
+{
+ scale.fp_set:N = \l_scale_fp,
+ scale.initial:n = 1.0,
+ scale.default:n = 1.0,
+ opacity.fp_set:N = \l_opacity_fp,
+ opacity.initial:n = 0.8,
+ opacity.default:n = 0.8,
+ shift.tl_set:N = \l_shift_tl,
+ shift.initial:n = {(0,0)},
+ shift.default:n = {(0,0)},
+ color.tl_set:N = \l_color_tl,
+ color.initial:n = black,
+ color.default:n =black,
+ rotate.fp_set:N =\l_rotate_fp,
+ rotate.initial:n = 0.0,
+ rotate.default:n = 0.0,
+ align.tl_set:N = \l_align_tl,
+ align.initial:n = center,
+ align.default:n = center,
+ showframe.bool_set:N = \l_showframe_bool,
+ showframe.initial:n = false,
+ showframe.default:n = true,
+}
+% \end{macrocode}
+% \begin{macro}{\g_clear_all_tl}
+% 用于保存待清空的所有水印
+% \begin{macrocode}
+\tl_gset:Nn \g_clear_all_tl
+{
+ \tl_clear:N \l_mainpage_tl
+ \tl_clear:N \l_evenpage_tl
+ \tl_clear:N \l_oddpage_tl
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\g_case_tl}
+% 用于保存一些开关
+% \begin{macrocode}
+\tl_gset:Nn \g_case_tl{
+ {all}
+ {
+ \tl_use:N\g_clear_all_tl
+ }
+ {even}
+ {
+ \tl_clear:N \l_evenpage_tl
+ }
+ {odd}
+ {
+ \tl_clear:N \l_oddpage_tl
+ }
+ {main}
+ {
+ \tl_clear:N \l_mainpage_tl
+ }
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\ClearWatermark}
+% 用于清除设置的水印
+% \begin{macrocode}
+\NewDocumentCommand{\ClearWatermark}{m}
+{
+\clist_gset:Nn \g_clear_clist{#1}
+\clist_map_variable:NNn \g_clear_clist \clear
+{
+ \exp_args:NV \str_case:nVF \clear
+ \g_case_tl
+ {\msg_warning:nn{clear}{not~have}}
+}
+}
+% \end{macrocode}
+% \end{macro}
+% 关闭\LaTeX3 编程环境
+% \begin{macrocode}
+\ExplSyntaxOff
+% \end{macrocode}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+% \Finale
+%
+\endinput
+\endlinechar \ No newline at end of file