我见过一些示例,用于\BgThisPage
为单个页面指定背景图像(或使用另一个命令同时为所有页面设置背景图像)。我发现只有这两个极端选项。总的来说,这意味着您只能在编写文档时设置背景图像,否则它可以更改每个页面的位置(如果您不希望每个页面上都有背景图像)。
有没有什么方法可以使背景图像显示在属于特定部分(或章节)的所有页面上,而不必等到文档完成才定义它(因此不是在每个页面上定义特定页面具有背景图像)?
\documentclass{article}
\usepackage{graphicx}
\usepackage[pages=some]{background}
\backgroundsetup{
scale=1,
angle=0,
opacity=0.7,
contents={
\includegraphics[width=\textwidth,height=4cm]{example-image-a}}
}
\begin{document}
\section{mysection}
\BgThispage
Mypage
\结束{文档}
答案1
在以下设置中,我利用 LaTeX 标记机制来判断某个部分是否在特定页面上开始/结束。在此基础上,借助eso-pic
。
\documentclass[twoside]{article}
\usepackage{graphicx}
\usepackage{eso-pic,titleps}
\usepackage{lipsum}
\newif\ifmysection
\newcommand{\placeimage}[2]{%
\mysectionfalse
\toptitlemarks% See if "my section" is at top of THIS page
\expandafter\ifnum\expandafter\pdfstrcmp\expandafter{\thesection}{#1}=0
\mysectiontrue
\fi
\bottitlemarks% See if "my section" is at bottom of THIS page
\expandafter\ifnum\expandafter\pdfstrcmp\expandafter{\thesection}{#1}=0
\mysectiontrue
\fi
\ifmysection
\AddToShipoutPictureBG*{% Add picture to background of THIS page
\AtPageCenter{% Picture is centred on page
\makebox[0pt]{% Horizontally centred
\raisebox{-.5\height}{% Vertically centred
\includegraphics[width=.7\pdfpagewidth]{#2}}}}}% Actual image
\fi
}
\newpagestyle{main}{%
\sethead[\thepage]% even-left
[\placeimage{2}{example-image-b}]% even-centre
[\thesection\quad\sectiontitle]% even-right
{\thesection\quad\sectiontitle}% odd-left
{\placeimage{2}{example-image-a}}% odd-centre
{\thepage}% odd-right
\setfoot[]% even-left
[\thepage]% even-centre
[]% even-right
{}% odd-left
{\thepage}% odd-centre
{}% odd-right
}
\pagestyle{main}
\begin{document}
\section{First test section}
\lipsum[1-15]
\section{Second test section}
\lipsum[1-15]
\section{Third test section}
\lipsum[1-15]
\end{document}
使用titleps
。它仍然允许您使用常规的标题式标记,但也允许您在字典式标记之间切换(通过\toptitlemarks
和/或\bottitlemarks
)。使用标记是一种很好的检测页面上哪些部分可见的方法,其方式与哪些更适合检测与页面相关的引用非常相似\label
。所有这些都源于异步发货程序,这需要一些技巧……
在上面的例子中,将在页面背景中\placeimage{<num>}{<image>}
放置一个,其中是 的扩展。因此,如果您有 的不同表示形式(例如),请务必将其指定为 。<image>
<num>
<num>
\thesection
\thesection
\thechapter.\arabic{section}
可以扩展该示例以手动覆盖是否放置内容,或许是为了适应包含图像的章节末尾。
以下添加允许执行将\excludethispagebg
页面从打印的背景图像中排除的任何操作:
\documentclass[twoside]{article}
\usepackage{graphicx,refcount,multido}
\usepackage{eso-pic,titleps}
\usepackage{lipsum}
\AtEndDocument{%
\addtocounter{excludepgbg}{-1}\refstepcounter{excludepgbg}%
\label{excludepgbg-total}%
}
\newif\ifmysection
\newcounter{excludepgbg}
\newcommand{\excludethispagebg}{\stepcounter{excludepgbg}\label{excludepgbg-\theexcludepgbg}}
\newcommand{\placeimage}[2]{%
\mysectionfalse
\toptitlemarks% See if "my section" is at top of THIS page
\expandafter\ifnum\expandafter\pdfstrcmp\expandafter{\thesection}{#1}=0
\mysectiontrue
\fi
\bottitlemarks% See if "my section" is at bottom of THIS page
\expandafter\ifnum\expandafter\pdfstrcmp\expandafter{\thesection}{#1}=0
\mysectiontrue
\fi%
\ifnum\getrefnumber{excludepgbg-total}>0
\multido{\i=1+1}{\getrefnumber{excludepgbg-total}}{%
\ifnum\value{page}=\getpagerefnumber{excludepgbg-\i}
\global\mysectionfalse
\fi%
}%
\fi%
\ifmysection
\AddToShipoutPictureBG*{% Add picture to background of THIS page
\AtPageCenter{% Picture is centred on page
\makebox[0pt]{% Horizontally centred
\raisebox{-.5\height}{% Vertically centred
\includegraphics[width=.7\pdfpagewidth]{#2}}}}}% Actual image
\fi%
}
\newpagestyle{main}{%
\sethead[\thepage]% even-left
[\placeimage{2}{example-image-b}]% even-centre
[\thesection\quad\sectiontitle]% even-right
{\thesection\quad\sectiontitle}% odd-left
{\placeimage{2}{example-image-a}}% odd-centre
{\thepage}% odd-right
\setfoot[]% even-left
[\thepage]% even-centre
[]% even-right
{}% odd-left
{\thepage}% odd-centre
{}% odd-right
}
\pagestyle{main}
\begin{document}
\section{First test section}
\lipsum[1-15]
\section{Second test section}
\lipsum[1-7]
\begin{center}
\includegraphics[width=.3\linewidth]{example-image}
\excludethispagebg
\end{center}
\lipsum[8-15]
\begin{center}
\includegraphics[width=.3\linewidth]{example-image}
\excludethispagebg
\end{center}
\lipsum[16-21]
\section{Third test section}
\lipsum[1-14]
\end{document}
每次调用时\excludethispagebg
都会\label
设置。这些标签在页面输出时循环显示,并用于匹配当前输出的页面。如果匹配,则排除图像,如果不匹配,则将图像添加到输出页面的背景中。
答案2
这取决于您的实际意图,但您可以使用其编号条件为部分单元中的所有页面添加背景,例如仅在第二部分中使用材料:
\documentclass{article}
\usepackage{graphicx}
\usepackage[contents={}]{background}
\usepackage{lipsum}
\AddEverypageHook{%
\ifnum\value{section}=2\relax
\backgroundsetup{
scale=1,
angle=0,
opacity=0.7,
contents={
\includegraphics[width=\textwidth,height=4cm]{example-image-a}}
}
\fi
\BgMaterial
}
\begin{document}
\section{First test section}
\lipsum[1-15]
\section{Second test section}
\lipsum[1-15]
\section{Third test section}
\lipsum[1-15]
\end{document}
并且只包含第一部分和第三部分的材料:
\documentclass{article}
\usepackage{graphicx}
\usepackage[contents={}]{background}
\usepackage{lipsum}
\AddEverypageHook{%
\ifnum\value{section}=1\relax
\backgroundsetup{
scale=1,
angle=0,
opacity=0.7,
contents={
\includegraphics[width=\textwidth,height=4cm]{example-image-a}}
}
\else
\ifnum\value{section}=3\relax
\backgroundsetup{
scale=1,
angle=0,
opacity=0.7,
contents={
\includegraphics[width=\textwidth,height=4cm]{example-image-a}}
}
\fi\fi
\BgMaterial
}
\begin{document}
\section{First test section}
\lipsum[1-15]
\section{Second test section}
\lipsum[1-15]
\section{Third test section}
\lipsum[1-15]
\end{document}
然而,理想的情况是对于从其自己的页面(章节)开始的部分单元执行此操作,以保证在第一页和最后一页正确放置或不放置背景材料;否则,可能需要对具有背景材料的组的第一页和最后一页进行一些手动调整。
对于页面范围,同样的想法适用,但不使用计数器值的条件测试page
,例如,要让材料从第 3 页出现到第 6 页,可以使用
\documentclass{article}
\usepackage{graphicx}
\usepackage[contents={}]{background}
\usepackage{lipsum}
\AddEverypageHook{%
\ifnum\value{page}<7\relax
\ifnum\value{page}>2\relax
\backgroundsetup{
scale=1,
angle=0,
opacity=0.7,
contents={
\includegraphics[width=\textwidth,height=4cm]{example-image-a}}
}
\fi
\fi
\BgMaterial
}
\begin{document}
\section{First test section}
\lipsum[1-15]
\section{Second test section}
\lipsum[1-15]
\section{Third test section}
\lipsum[1-15]
\end{document}