我正在尝试布局两页,使得第二页是第一页的镜像。
查看此处关于此主题的先前答案,我认为我应该能够简单地xscale=-1
将 tikz 命令放在第二页中\newcommand
,但这似乎对我不起作用。这可能是因为我使用了current page
坐标吗?
请问我该如何修复此问题?
\documentclass[a4paper,tikz]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}
\begin{document}
\pagestyle{empty}
\newcommand{\wholepage}{
\draw (current page.north east) -- (current page.south west);
}
\begin{tikzpicture}[remember picture,overlay]
\wholepage
\end{tikzpicture}
\newpage
\begin{tikzpicture}[remember picture,overlay, xscale=-1]
\wholepage
\end{tikzpicture}
\end{document}
答案1
这是一个pgfmorepages
解决方案。它定义了一个新的布局,1 on 2, 2nd mirrored
该布局在第二页上重复每个页面但镜像。这将适用于页面上的任何内容,无论它是否使用 TikZ。在下面,每个页面都保存到一个框中,然后可以在实际将其放到页面上之前对其进行操作。 pgf(more)pages
允许定义执行各种操作的布局。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/639519/86}
\usepackage{pgfmorepages}
\usepackage{lipsum}
\pgfpagesdeclarelayout{1 on 2, 2nd mirrored}
{
\edef\pgfpageoptionheight{\the\paperheight}
\edef\pgfpageoptionwidth{\the\paperwidth}
\def\pgfpageoptionborder{0pt}
\def\pgfpageoptionbordercode{}
\def\pgfpageoptionfirstshipout{1}
}
{
\pgfpagesphysicalpageoptions
{%
logical pages=1,%
physical pages=2,%
physical height=\pgfpageoptionheight,%
physical width=\pgfpageoptionwidth,%
current logical shipout=\pgfpageoptionfirstshipout%
}
\pgfpagessetdefaults{%
border code=\pgfpageoptionbordercode
}
\pgfpagesphysicalpage{1}{}
\pgfpageslogicalpageoptions{1}
{%
border shrink=\pgfpageoptionborder,%
center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}%
}%
\pgfpagesphysicalpage{2}{}
\pgfpageslogicalpageoptions{1}
{%
border shrink=\pgfpageoptionborder,%
xscale=-1,%
% If the above produces a spurious `1` in the middle of the page, use the two lines below instead
% rotation=180,%
% yscale=-1,%
center=\pgfpoint{.5\pgfphysicalwidth}{.5\pgfphysicalheight}%
}%
}
\pgfpagesuselayout{1 on 2, 2nd mirrored}
\begin{document}
\lipsum
\newpage
\lipsum
\end{document}
lipsum
包含的软件包仅用于生成一些文本。当我在一个系统(MikTeX)上尝试它时,该版本xscale
在1
页面的某个地方产生了虚假内容。这在我的发行版上没有发生TeXLive
,所以我猜想我在 MikTeX 系统上安装的 TikZ/PGF 不是最新的。无论如何,如果您1
在使用时在页面中间发现虚假内容xscale
,请删除该行并取消注释行yscale
和rotation
。或者更新您的 TikZ 安装。
答案2
我建议为这两个页面使用两个单独的命令(避免使用一个命令xscale=-1
):
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{math}
\pagestyle{empty}
\begin{document}
\newcommand{\wholedown}{%
\draw[cyan!30,line width=3pt](current page.north west) -- (current page.south east);
}
\newcommand{\wholeup}{%
\draw[cyan!30,line width=3pt](current page.south west)--(current page.north east);
}
\begin{tikzpicture}[remember picture,overlay]
\wholeup
\end{tikzpicture}
\newpage
\begin{tikzpicture}[remember picture,overlay]
\wholedown
\end{tikzpicture}
\end{document}
输出:
如果您考虑对所有文档重复所有上述操作,您可以考虑background
对奇数页和偶数页使用该包。
答案3
这个答案基于以下两个:
这个 MWE 使用包通过和eso-pic
创建背景图像。 语法结果为和,分别表示偶数页和奇数页。是模运算:tikz
xscale
xscale={2*Mod(\thepage,2)-1}
-1
+1
Mod
https://en.wikipedia.org/wiki/Modulo_operation。
套餐background
仍然是另一个值得考虑的选择。
\documentclass[11pt]{article}
\usepackage{fullpage, lipsum, tikz}
\usepackage{eso-pic}
\usetikzlibrary{calc}
\AddToShipoutPictureBG{%
\begin{tikzpicture}[remember picture, overlay]
\node[opacity=.5, inner sep=0pt, xscale={2*Mod(\thepage,2)-1}]
at(current page.center)
{\includegraphics[width=14cm, angle=45]{example-image-duck}}; %*(\thepage-1)
\end{tikzpicture}%
}
\begin{document}
\lipsum[1-20]
\end{document}
答案4
这是一个使用background
和的解决方案tikz
。
以下 MWE 展示了偶数页和奇数页上的交叉线。这只是一个额外的例子,\includegraphics
用来说明哪些是翻转的,哪些不是。第一个tikzpicture
绘制了边框,可以删除。第二个tikzpicture
使用\pgfmathparse
这个答案以根据偶数页和奇数页相应地改变行为。两者\path[fill=<color>]
都是从链接答案中得出的概念证明。该命令\draw
绘制交叉的蓝线。我使用了(+/-<measure>,+/-<measure>)
一种偷懒的快捷方式,以在边框的同一坐标处显示线条。这些点可以用其他命令替换。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage[pages=all]{background}
\backgroundsetup{
scale=1,
color=black,
opacity=0.4,
angle=0,
position = current page.south west,
nodeanchor = south west,
hshift = 1.5cm, % horizontal margin
vshift = 1.5cm, % vertical margin
contents={%
\includegraphics[
height=\dimexpr\paperheight-3cm\relax, % double the vert. margin
width=\dimexpr\paperwidth-3cm\relax % double the horiz. margin
]{example-image-duck}
\begin{tikzpicture}[overlay,remember picture]
\draw [opacity=1,line width=2pt]
($ (current page.north west) + (1.5cm,-1.5cm) $)
rectangle
($ (current page.south east) + (-1.5cm,1.5cm) $);
\end{tikzpicture}
\begin{tikzpicture}[overlay,remember picture, blue]
\pgfmathparse{int(Mod(\thepage,2))}
\let\r\pgfmathresult
\ifnum\r=1
\path[fill=red] (current page.north west) circle (1cm);
\draw [opacity=1,line width=2pt]
($ (current page.north west) + (1.5cm,-1.5cm) $)
--
($ (current page.south east) + (-1.5cm,1.5cm) $);
\else
\path[fill=blue] (current page.south east) circle (1cm);
\draw [opacity=1,line width=2pt]
($ (current page.north east) + (-1.5cm,-1.5cm) $)
--
($ (current page.south west) + (1.5cm,1.5cm) $);
\fi
\end{tikzpicture}
}
}
\begin{document}
\BgThispage
\lipsum[1-20]
\end{document}