\documentclass{article}

\usepackage{lipsum}

\usepackage{../magicwatermark}

\usepackage[margin = 2.51828cm]{geometry}


\def\pkgname{\textcolor{teal}{\texttt{magicwatermark}}}
\usepackage{indentfirst}
\pagestyle{empty}

\usepackage[UTF8, scheme=plain, fontset=none, heading=true, zihao=-4]{ctex}
\setCJKmainfont[BoldFont={LXGWWenKai-Bold},ItalicFont={LXGWWenKai-Light}]{LXGWWenKai-Regular}
\setCJKsansfont[BoldFont={LXGWWenKai-Bold}]{LXGWWenKai-Regular}
\setCJKmonofont[BoldFont={LXGWWenKaiMono-Bold},ItalicFont={LXGWWenKaiMono-Light}]{LXGWWenKaiMono-Regular}

\ctexset{
%   chapter={
%     format+=\raggedright,
%     name = {第,部分},
%     afterskip = .5cm
%   },
  section={
    format+=\raggedright,
    afterskip = .5cm
  },
  contentsname = {目次}
}

\usepackage{fontspec}
\IfFontExistsTF{calibri.ttf}
{
  \setmainfont{calibri.ttf}[
    BoldFont = calibrib.ttf,
    ItalicFont = calibrii.ttf,
    BoldItalicFont = calibriz.ttf
  ]
}
{}

\usepackage[listings,breakable]{tcolorbox}

\ExplSyntaxOn
\clist_new:N \l_function_variant_list %fuction variant list
\NewDocumentCommand{\function}{svo} % #1:function name #2: variant list
{
  \IfBooleanTF{#1}
  {
    \IfNoValueTF{#3}
    {
      \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30]
        \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2}\hfill \examplelabel*
      \end{tcolorbox}
    }
    {
     \clist_gset:Nn \l_function_variant_list {#3}
      \begin{tcolorbox}[width=\textwidth,left=1mm,right=1mm,top=1mm,bottom=1mm,sharp~corners,colback=white,boxrule=.5pt,colback=lime!30]
        \texttt{Function}\hskip -2pt \Triangle\hskip -3pt \texttt{#2\textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})}} \hfill \examplelabel*
      \end{tcolorbox}
    }
  }
  {
      \IfNoValueTF{#3}
     {
       \def\functionn{
          \texttt{#2}
         }
     }
     {
        \clist_gset:Nn \l_function_variant_list {#3}
        \def\functionn{
          \texttt{
            #2
            \textcolor{gray}{(\clist_use:Nn \l_function_variant_list{|})} 
            }
          }
     }
  }

}
\NewDocumentCommand{\examplelabel}{s}
{
  \IfBooleanTF{#1}{
  \raisebox{-0.5ex}{
  \tikz{
  \node[ball~color=purple,circle,outer~sep=0pt,scale=0.5] {\phantom{2}};  
    }}
  }{
     \raisebox{-0.5ex}{
     \tikz{
    \node[ball~color=cyan,circle,outer~sep=0pt,scale=0.5,font=\bfseries] {\theexample};  
    }}
  }
}
\ExplSyntaxOff
\def\Triangle{ % triangle icon
  \raisebox{-0.3ex}{
  \tikz{
    \fill[scale=2,outer sep=0pt] (240:0.5ex) -- (0:0.5ex) -- (120:0.5ex);
  }
}}
\newcounter{example}
\tcbset{
    example style/.style={
        sharp corners,
        colback=white,
        boxrule=.5pt,
        breakable,
        left=1mm,right=1mm,top=1mm,bottom=1mm,
        fonttitle=\bfseries,
        colbacktitle=lime!30,
        coltitle=black,
        % title={MagicWatermark},
        listing only
    }
}

\newtcblisting[use counter=example]{example}[1][]{
  listing options={
    style=tcblatex,
    tabsize = 1,
    language={[LaTeX]TeX},
    classoffset=0,
    morekeywords = {MagicWatermark, foreach, includegraphics},
    keywordstyle={\color[RGB]{178,34,34}\bfseries},
    commentstyle={\color[RGB]{102,205,170}\itshape},
    classoffset=1,
    morekeywords = {setup, pages, content, is, append, style},
    keywordstyle=\color{cyan!50!green}\bfseries,
  },
  example style,
  #1
  }


\MagicWatermark{
    setup = {
        pages = {*},
        content = {P-\thepage},
        style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily}
    },
    setup = {
      pages = {even},
      style = {scale = 5, text = pink},
      content = {Watermark},
      is append
    },
    setup = {
      pages = {1},
      style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large\linespread{1}\selectfont, opacity = .1}, 
      content = {
          \foreach \x in {0, ..., 500} {Magic Watermark }
      },
      is append
    }
}


\def\opt#1{\textcolor{magenta}{\texttt{#1}}}
\def\para#1{\textcolor[rgb]{0.13, 0.67, 0.8}{\texttt{#1}}}

\usepackage[hidelinks]{hyperref}
\begin{document}


\vspace*{\fill}
\begin{center}
  {\Huge \textcolor{teal}{\texttt{magicwatermark}} 宏包\footnote{\url{https://github.com/ljguo1020/magicwatermark}}} \\[.5cm]
  {\Large 郭李军<ljguo1020@gmail.com>} \\[.5cm]
  {\Large V1.2A}\\[1cm]
\begin{example}[]
\MagicWatermark{
    setup = {
        pages = {*},
        content = {P-\thepage},
        style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily}
    },
    setup = {
      pages = {even},
      style = {scale = 5, text = pink},
      content = {Watermark},
      is append
    },
    setup = {
      pages = {1},
      style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, 
      content = {
          \foreach \x in {0, ..., 500} {Magic Watermark }
      },
      is append
    }
} 
\end{example}
\end{center}

\vspace*{\fill}

\newpage


\linespread{1.3}\selectfont
\tableofcontents

\section{介绍}

\pkgname{} 是一个全新的水印宏包, 在 2022 年 6 月 17 日发布了第一版, 本次更新并不是基于第一版, 而是进行了重构.

\pkgname{} 基于 \texttt{tikz} 和 \texttt{expl3}, 可以灵活的设置背景或水印.

\section{使用}
\pkgname{} 的使用, 相比于其它同类功能的包来说, 可以说是易用性最高的, 它只提供了一个命令 \verb|\MagicWatermark|, 命令参数由多个 \opt{setup} 规则组成.
\begin{example}[]
\MagicWatermark{
  setup = {},
  setup = {},
  ...
}
\end{example}

\opt{setup} 内部接受四个键值选项, 用于配置水印的表现形式.

\subsection{pages}
\opt{pages} 接受一个逗号分割列表, 用于配置水印作用范围, 例如 \verb|pages = {2, 4, 5, 8-10}|, 表示选中页码为第 2, 4, 5, 8, 9, 10 这些页面.

\opt{pages} 共接受 4 种配置规则, 
\begin{itemize}
  \item \para{*}, 表示所有页面;
  \item \para{odd} 和 \para{oven}, 表示奇偶页;
  \item 范围, 形如 \para{3-5}, \para{12-ii};
  \item 表达式, 形如 \para{2X+1}, \para{2X\^{}2+X+1}, 但是变量必须为 \para{X}.
\end{itemize}

这里假定页面总页数为 24 页, 
\begin{example}[title = pages 配置规则]
pages = {*}              =>     1, 2, 3, ..., 24
pages = {odd}            =>     1, 3, 5, ..., 23
pages = {1, 3, 5-10}     =>     1, 3, 5, 6, 7, ..., 10
pages = {1-5, 8, 20-ii}  =>     1, 2, ..., 5, 8, 20, 21, ..., 23
pages = {3X + 1}         =>     1, 4, 7, 10, ..., 22
\end{example}

\subsection{tikz}
\opt{tikz} 用于设置是否将水印内容放置在  \texttt{tikz} 的 \texttt{node} 中, 见下文, 可选值为 \para{true} 和 \para{false}, 默认为 \para{true}. 当你需要使用 \opt{tikz} 时, 需要手动加载 \texttt{tikz} 宏包.

\subsection{content}
\opt{content} 用来设置水印的内容, 当 \opt{tikz} 被启用时, 它被放在了 \texttt{tikz} 的 \texttt{node} 中, 为此, 想要灵活的设置它, 您需要对 \texttt{node} 有一些了解.

\subsection{style}
\opt{style} 用于设置容纳水印内容的 \texttt{node} 的样式, 默认为 \para{inner~sep = 0pt, outer~sep = 0pt, opacity = .5, align = left}, 当 \opt{tikz} 被禁用时, 它会被忽略.

\subsection{is append}
\opt{is append} 用于设置是否覆盖当前页已有的水印, 可选值为 \para{true} 和 \para{false}, 默认为 \para{false}.

\section{使用案例}
\begin{example}[title = 为所有页面右上角添加页码]
% \usepackage{tikz}
\MagicWatermark{
  setup = {
      pages = {*},
      content = {P-\thepage},
      style = {shift = {(.5\textwidth, .5\textheight + \headheight + \headsep)}, scale = 3, text = cyan, font = \ttfamily}
  }
}
\end{example}

\begin{example}[title = 为偶数页页面中心添加文字 Watermark]
% \usepackage{tikz}
\MagicWatermark{
  setup = {
    pages = {even},
    style = {scale = 5, text = pink},
    content = {Watermark},
    is append
  }
}
\end{example}

\begin{example}[title = 为第二页到最后一页设置铺满整个页面的文字]
% \usepackage{tikz}
\MagicWatermark{
  setup = {
      pages = {2-i},
      style = {text width = 1.7\paperwidth, rotate = 45, align = left, font = \Large, opacity = .1}, 
      content = {
          \foreach \x in {0, ..., 500} {Magic Watermark }
      },
      is append
  }
}
\end{example}

\begin{example}[title = 为奇偶页设置不同水印]
% \usepackage{tikz}
\MagicWatermark{
  setup = {
    pages = {even},
    style = {scale = 8, rotate = 45, text=red, align = center,font = \linespread{2}\selectfont},
    content = {
      Even MagicWatermark\\ 
      Even MagicWatermark\\
      Even MagicWatermark\\
      Even MagicWatermark 
    }
  },
  setup = {
    pages = {odd},
    style = {scale = 6, rotate = -45, text = cyan, text width = 1.7\paperwidth, font = \linespread{1.5}\selectfont, align = center},
    content = {
      \foreach \x in {0,...,5}{
          Odd MagicWatermark
      }
    }
  }
}
\end{example}

\begin{example}[title = 设置图片为水印]
% \usepackage{tikz}
\MagicWatermark{
  setup = {
    pages = {even},
    style = {opacity = 0.3},
    content = {
        \includegraphics{example-image-a}
    }
  },
  setup = {
    pages = {odd},
    style = {opacity = .3, rotate=45, text width = 3\paperwidth},
    content = {
      \foreach \x in {0, ..., 20}{
        \foreach \y in {1, 2, 3} {
          \includegraphics{example-image-b}
        } \\
      }
    }
  }
}  
\end{example}

\begin{example}[title = 禁用 tikz]
\def\addhead#1#2{%
  \expandafter\gdef\csname head@content@#1\endcsname{#2}%
}

\def\printhead#1{%
  \csname head@content@#1\endcsname%
}

\addhead{2}{The only way to do great work is to love what you do.}
\addhead{3}{Success is not final, failure is not fatal: It is the courage to continue that counts.}
\addhead{4}{In the end, we will remember not the words of our enemies, but the silence of our friends.}
\addhead{5}{It does not matter how slowly you go as long as you do not stop.}

\NewDocumentCommand{\mywatermark}{}{%
  \begin{tikzpicture}[remember picture, overlay]
    \node[yshift = -\headheight - \headsep, text = teal, font = \large] at (current page.north) {\printhead{\thepage}};
  \end{tikzpicture}
}

\MagicWatermark{
  setup = {
    pages = {2-5},
    tikz = false,
    content = \mywatermark
  }
}
\end{example}


\end{document}
