水印随机位置

水印随机位置

我想在每页的随机位置添加艺术水印图像。我正在考虑该eso-pic软件包,但愿意听取任何建议。

有谁知道如何实现上述目标,如下所示......

  1. 随机放置不必按照严格的数学标准“严格”随机,可以基于系统时钟毫秒值等,只要足够随机以便对读者来说显得随机即可。
  2. 图像的尺寸可能会有所不同,而且纸张的尺寸也可能有所不同。
  3. 我已经处理了图像生成,出于本文的目的,只是假设它是一个.jpg.bmp等等......

我相信你们中的一些人可能已经看过财务报告或信息备忘录之类的文件,通常每页的水印都会略有不同......

更新:我可能应该说,图片是在编译时动态创建的。它们应该在每个页面上都不同。

在提供 MWA 方面,这是我迄今为止所做的示例。请注意,此工作示例使用 R 和 knitr (http://yihui.name/knitr/) 直接访问在 R 环境中创建的 ggpplot2 对象。通过使用 tikz 设备,可以应用 LaTeX 的优势(尽管在本例中没有利用),因为数学格式可以应用于轴标签和其他此类标签。就此查询而言,动力来自于绘制水印数学函数的愿望,可以想象一个波函数一次传播一页。

[注:顺便说一句,您可能会发现,在排版时,所包含的 knitr 代码块不会在每次调用时重新评估(它们指的是第一次评估的缓存副本),并且我已在 knitr 主页上发布了一个查询,以尽可能解决此问题]

为了编译这个,文件需要用 .Rnw 扩展名保存(而不是 .tex),并使用以下命令执行。

"C:/Program Files/R/R-2.15.2/bin/Rscript.exe" -e "knitr::knit2pdf('%.Rnw')"

[注意:上述命令可以作为 TexMaker 中的用户命令添加,或者无论您喜欢哪种编辑器,显然,更改目录以适合您自己的 R 安装。]

标准序言如下。没什么特别的。

\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{tikz}
\usepackage{eso-pic}

%opening
\title{The Quick Brown Fox}
\author{Joe Bloggs}

以下部分也在序言中,并根据 knitr 功能定义块。<<>>= 和 @ 标志内的代码指的是在 R 中执行的代码。有许多选项可以解析到每个块中。这里无法解释太多,但是,我鼓励人们参考上面列出的 knitr 网站。

%Load the Packages. 
<<setting_load_knitr,cache=TRUE,eval = TRUE,echo = TRUE,include=FALSE>>=
    ## Install latest version of tikzDevice (Installation Currently Disabled)
    ## install.packages("tikzDevice", repos="http://R-Forge.R-project.org")

    ## Default Message Suppression - Spam Sucks.
    suppressMessages( library(knitr))
    suppressMessages(library(tikzDevice))

    ##Stating Minimum Requirements.
    require(knitr,quietly=TRUE)
    require(tikzDevice,quietly=TRUE)
@

定义块来绘制对象。

%Define the Plot Block.
<<background_plot,dev='tikz',echo=FALSE,eval=TRUE,cache=TRUE,fig.keep='none'>>=
    suppressMessages( library(ggplot2))
    require(ggplot2,quietly=TRUE)   
    theme_new <- theme_set(theme_bw(0)) 
    x <- runif(1:250)  #250 random points.
    y <- runif(1:length(x)) #create corresponding y values
    z <- c(1:length(x)) #increasing point sizes
    zf <- as.factor(1:length(x))
    dat <- data.frame(x,y,z,zf)
    rm(x,y,z,zf)

    ##Plot the items.
    ggplot(dat,aes(x,y)) + 
        geom_point(aes(size = z,color=zf),alpha=0.33) +
        scale_x_continuous(element_blank()) +
        scale_y_continuous(element_blank()) +
        theme(legend.position="none",axis.ticks=element_blank(),
            panel.border=element_blank(),
            panel.grid.major=element_blank(),
            panel.grid.minor=element_blank())
@

序言的下一部分定义了在 LaTeX 环境中绘制图表的函数,调用上述块,并根据 eso-pic 包添加到每个 shipout 中。

%Define the command to call on each page.
\newcommand\drawPlot{
    <<ref.label='background_plot', dev='png', out.width='1.5\\paperheight',out.height='1.5\\paperheight',echo=FALSE,dpi=500>>=
    @
}
\EveryShipout{
    \AddToShipoutPicture*{
        \put(-100,-100){\drawPlot}
    }
}

现在创建 MWE 虚拟文档。

\begin{document}
    \maketitle
    \begin{abstract}
        \lipsum[1-3]
    \end{abstract}
    %Dummy Section 1
    \newpage
    \section{Lorem Ipsum}
        \lipsum[1-10]

    %Dummy Section 2
    \newpage
    \section{Lorem Ipsum}
        \lipsum[1-10]

    %Dummy Section 3
    \newpage
    \section{Lorem Ipsum}
        \lipsum[1-10]
\end{document}

所以就这个问题而言。上面的示例创建了一系列随机放置的漂亮圆圈。生成的图像尺寸比实际页面大得多,通过随机地左右上下移动,没有一页会相同,因此这是此查询的目标。

示例输出: 示例输出

作为另一个示例输出(这次用于信件模板),使用水印方程式按照以下代码:

<<wavepacket,dev='tikz',echo=FALSE,eval=TRUE,cache=TRUE,fig.keep='none'>>=
    suppressMessages( library(ggplot2))
    require(ggplot2,quietly=TRUE)   
    theme_new <- theme_set(theme_bw(0)) 
    suppressMessages(library(reshape))
    require(reshape,quietly=TRUE)
    x <- seq(-1.25,0.5,0.005) #define x data
    f1 <- function(x)sin(x) #define functions
    f2 <- function(x)((2*pi)^(-0.5))*exp(-(x*x)/2) #Gaussian function
    f3 <- function(x){f1(8*x)*f2(x)} ##Gaussian Wavepacket net function.

    ##Create the dataframe.
    df <- data.frame(x=x,GaussUpp=f2(pi*x),WavePacket=f3(pi*x))
    df.melt <- melt(df,id.vars = c('x'))
    colnames(df.melt) <- c('X','Function','Value')

    ##Now Plot, different colors for the different plots.
    ggplot(df.melt,aes(x=X,y=Value)) +
        geom_path(size=20,aes(color=Function),alpha=0.025)+ 
        geom_path(size=10,aes(color=Function),alpha=0.025)+ 
        geom_path(size= 8,aes(color=Function),alpha=0.025)+
        geom_path(size= 4,aes(color=Function),alpha=0.025)+ 
        geom_path(size= 2,aes(color=Function),alpha=0.025)+ 
        geom_path(size= 1,aes(color=Function),alpha=0.025)+ 
        scale_x_continuous(element_blank()) +
        scale_y_continuous(element_blank()) +
        theme(legend.position="none",axis.ticks=element_blank(),
            panel.border=element_blank(),
            panel.grid.major=element_blank(),
            panel.grid.minor=element_blank())
@

产生以下结果...

第二示例

调整绘图功能中的某些设置可以产生完全不同的外观和感觉

第三示例

答案1

可能是我没有完全理解。但这可能是一个(值得)尝试使用backgroundGonzalo Medina 的包:

\documentclass{article}
\usepackage{background,graphicx}
\usetikzlibrary{calc}
\usepackage{lipsum}
\usepackage[a4paper,margin=1in,showframe]{geometry}
\backgroundsetup{
scale=1,
angle=0,
opacity=.5,
contents={\begin{tikzpicture}[remember picture,overlay]
 \node[draw=none] at ($(current page.south west) + (2in+rnd*.8\textwidth,2in+rnd*.8\textheight)$) {
 \includegraphics[width=1in]{example-image-a}};  
\end{tikzpicture}}
}
\begin{document}
\lipsum[1-130]
\end{document}

相关内容