使用当前页面坐标镜像 tikz 页面

使用当前页面坐标镜像 tikz 页面

我正在尝试布局两页,使得第二页是第一页的镜像。

查看此处关于此主题的先前答案,我认为我应该能够简单地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)上尝试它时,该版本xscale1页面的某个地方产生了虚假内容。这在我的发行版上没有发生TeXLive,所以我猜想我在 MikTeX 系统上安装的 TikZ/PGF 不是最新的。无论如何,如果您1在使用时在页面中间发现虚假内容xscale,请删除该行并取消注释行yscalerotation。或者更新您的 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创建背景图像。 语法结果为和,分别表示偶数页和奇数页。是模运算:tikzxscalexscale={2*Mod(\thepage,2)-1}-1+1Modhttps://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}

在此处输入图片描述

相关内容