居中整页 tikz 图像 - 中间文档纸张尺寸发生变化

居中整页 tikz 图像 - 中间文档纸张尺寸发生变化

我刚刚得到了这个问题的答案:

xetex - 使用 xelatex 将整页 Tikz 图像居中放置在没有边距的页面上? - TeX - LaTeX

... 一切工作都在那里。

 

但是,我的问题在于 - 我有一个文档,其正常页面是 A4,而这些 SVG->tikz 图像应该是 A5。因此,我尝试:

...但是,这似乎搞乱了 Tikz 使用的页面计算。

这是一个 MWE(与第一个链接相同,但已更改,因此它包含 tikz 图像):

测试.tex

\documentclass[12pt,a4paper]{article}

\usepackage[pass]{geometry}
%   %\usepackage{hyperref}
\usepackage{tikz}


\begin{document}

% \thispagestyle{empty}
\pdfpagewidth=148mm \pdfpageheight=210mm

\input{testin.tex}

\end{document}

测试文件

\definecolor{cff0000}{RGB}{255,0,0}

\begin{tikzpicture}[overlay,remember picture,anchor=north west,inner sep=0pt, outer sep=0pt]

\node at (current page.north west) {%

  \begin{tikzpicture}[overlay,remember picture,y=0.80pt,x=0.80pt,yscale=-1, inner sep=0pt, outer sep=0pt,anchor=north west]

    \begin{scope}[shift={(0,0.34461553)}]% layer1

      % rect3016
      \path[color=black,fill=cff0000,line width=0.800pt,rounded corners=0.0000cm]
        (0.0000,-0.3446) rectangle (524.4094,743.7499);

    \end{scope}

  \end{tikzpicture}

};

\end{tikzpicture}

 

这是我对这些文件进行的一个小实验;当它说(清除状态)时,意味着我已经删除了.aux之前的内容:

  1. \documentclass[12pt,a5paper]{article};无\pdfpagewidth/height设置
    1. xelatex 第一遍(清晰状态),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{5924114}{69025514}
      \pgfsyspdfmark {pgfid1}{5891346}{29900006}
    2. xelatex 第二遍,(页面 OK),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{32768}{39125508}
      \pgfsyspdfmark {pgfid1}{5891346}{29900006}
  2. \documentclass[12pt,a4paper]{article};无\pdfpagewidth/height设置
    1. xelatex 第一遍(清晰状态),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{7955730}{101470942}
      \pgfsyspdfmark {pgfid1}{7922962}{46122720}
    2. xelatex 第二遍,(图像对齐,但页面更大;正如预期的那样),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{32768}{55348222}
      \pgfsyspdfmark {pgfid1}{7922962}{46122720}
  3. 带有\documentclass[12pt,a4paper]{article};带\pdfpagewidth/height设置;无明确状态
    1. xelatex 第一遍(接上一篇 a4paper - 页面正常!),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{32768}{39125508}
      \pgfsyspdfmark {pgfid1}{7922962}{29900006}
    2. xelatex 第二遍(图像超出页面),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{32768}{55348222}
      \pgfsyspdfmark {pgfid1}{7922962}{29900006}
  4. \documentclass[12pt,a4paper]{article};带\pdfpagewidth/height设置
    1. xelatex 第一遍(清晰状态;第一遍图像甚至不可见),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{7955730}{85248228}
      \pgfsyspdfmark {pgfid1}{7922962}{29900006}
    2. xelatex 第二遍(图像超出页面),.aux:
      \放松
      \pgfsyspdfmark {pgfid2}{32768}{55348222}
      \pgfsyspdfmark {pgfid1}{7922962}{29900006}

 

我从这个实验中得出的唯一结论是,当 .aux 文件(xelatex 运行后)包含以下内容时,页面正常:

\relax
\pgfsyspdfmark {pgfid2}{32768}{39125508}
\pgfsyspdfmark {pgfid1}{7922962}{29900006}

...显然,可以正确定位图像,甚至\pdfpagewidth如果 documentclass 是 A4 页,并且我使用/ “手动”切换到 A5 height;只是不知道如何正确地做到这一点:)

那么,有没有办法写入.tex,以便我可以将 A5 tikz 框定位到整个页面上,然后手动切换到 A5?

(注意:我想将所有这些保留为 tikz/latex 代码,我不太热衷于导出单独的 PDF 并将它们包含在内pdfpages)。

非常感谢您的任何回答,
干杯!

答案1

可以定位图像没有重新定义页面几何形状。重新定义页面几何形状通常会给您带来问题。

首先让我们使用一些 TikZ 代码将一个块定位在页面顶部。该块将是 A4 大小的一半,即 A5 纸张大小。当我们使用覆盖时,如下图所示:

enter image description here

MWE 如下所示:

\documentclass[a4paper]{article}
\usepackage{tikz,lipsum}
\usepackage{hyperref}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[overlay,remember picture,anchor=north west,inner sep=0pt, outer sep=0pt]
\node at (current page.north west) {%
 \begin{tikzpicture}[overlay,remember picture, inner sep=0pt, outer sep=0pt,anchor=north west]
      \path[color=black,fill=purple]
        (0,0) rectangle ++(\the\paperwidth,-0.5\paperheight);
  \end{tikzpicture}
};
\end{tikzpicture}
\lipsum
\end{document}

当然,这还不能令人满意,因为您想将文本放置在图像或 TikZ 图片之后。为了实现这一点,您需要将 tikz 图片放在\vbox半页高度的集合中。

enter image description here

\documentclass[a4paper]{article}
\usepackage{tikz,lipsum}
\usepackage{hyperref}
\begin{document}
\vbox to 0.5\paperheight{\begin{tikzpicture}[overlay,remember picture,anchor=north west,inner sep=0pt, outer sep=0pt]
\node at (current page.north west) {%
 \begin{tikzpicture}[overlay,remember picture, inner sep=0pt, outer sep=0pt,anchor=north west]
      \path[color=black,fill=purple]
        (0,0) rectangle ++(\the\paperwidth,-0.5\paperheight);
  \end{tikzpicture}%
};%
\end{tikzpicture}}
\section{Test}
\lipsum
\end{document}

如果您用命令替换节点中的代码includegraphics,则您的图像应该可以毫无问题地导入到页面顶部。

无需任何 tikZ 代码即可完成相同操作。如果您需要,我稍后会发布此内容。

paperheight由于 pdf 对和使用了不同的参数paperwidth,我通常使用该包hyperref来确保它们得到更正。如果您不想加载它,您可以使用:

\newcommand*{\fixpdflayout}{%
 \pdfpageheight=\the\paperheight
 \pdfpagewidth=\the\paperwidth
 \ifxetex\else
 \ifdim\pdfvorigin=0pt\pdfvorigin=1in\fi
 \ifdim\pdfhorigin=0pt\pdfhorigin=1in\fi
\fi}

答案2

TikZ 需要知道纸张尺寸,显然它使用\paperwidth\paperheight

{\clearpage
\thispagestyle{empty}
\pdfpagewidth=148mm \pdfpageheight=210mm % for PDF output
\paperwidth=148mm \paperheight=210mm     % for TikZ
\input{testin.tex}
\clearpage}

相关内容