![居中整页 tikz 图像 - 中间文档纸张尺寸发生变化](https://linux22.com/image/249568/%E5%B1%85%E4%B8%AD%E6%95%B4%E9%A1%B5%20tikz%20%E5%9B%BE%E5%83%8F%20-%20%E4%B8%AD%E9%97%B4%E6%96%87%E6%A1%A3%E7%BA%B8%E5%BC%A0%E5%B0%BA%E5%AF%B8%E5%8F%91%E7%94%9F%E5%8F%98%E5%8C%96.png)
我刚刚得到了这个问题的答案:
xetex - 使用 xelatex 将整页 Tikz 图像居中放置在没有边距的页面上? - TeX - LaTeX
... 一切工作都在那里。
但是,我的问题在于 - 我有一个文档,其正常页面是 A4,而这些 SVG->tikz 图像应该是 A5。因此,我尝试:
- 将文档定义为A4;
- 使用技巧在文档中间更改纸张尺寸通过设置
\pdfpagewidth
/height
; 将必要的页面切换为 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
之前的内容:
- 有
\documentclass[12pt,a5paper]{article}
;无\pdfpagewidth
/height
设置- xelatex 第一遍(清晰状态),.aux:
\放松 \pgfsyspdfmark {pgfid2}{5924114}{69025514} \pgfsyspdfmark {pgfid1}{5891346}{29900006}
- xelatex 第二遍,(页面 OK),.aux:
\放松 \pgfsyspdfmark {pgfid2}{32768}{39125508} \pgfsyspdfmark {pgfid1}{5891346}{29900006}
- xelatex 第一遍(清晰状态),.aux:
- 有
\documentclass[12pt,a4paper]{article}
;无\pdfpagewidth
/height
设置- xelatex 第一遍(清晰状态),.aux:
\放松 \pgfsyspdfmark {pgfid2}{7955730}{101470942} \pgfsyspdfmark {pgfid1}{7922962}{46122720}
- xelatex 第二遍,(图像对齐,但页面更大;正如预期的那样),.aux:
\放松 \pgfsyspdfmark {pgfid2}{32768}{55348222} \pgfsyspdfmark {pgfid1}{7922962}{46122720}
- xelatex 第一遍(清晰状态),.aux:
- 带有
\documentclass[12pt,a4paper]{article}
;带\pdfpagewidth
/height
设置;无明确状态- xelatex 第一遍(接上一篇 a4paper - 页面正常!),.aux:
\放松 \pgfsyspdfmark {pgfid2}{32768}{39125508} \pgfsyspdfmark {pgfid1}{7922962}{29900006}
- xelatex 第二遍(图像超出页面),.aux:
\放松 \pgfsyspdfmark {pgfid2}{32768}{55348222} \pgfsyspdfmark {pgfid1}{7922962}{29900006}
- xelatex 第一遍(接上一篇 a4paper - 页面正常!),.aux:
- 带
\documentclass[12pt,a4paper]{article}
;带\pdfpagewidth
/height
设置- xelatex 第一遍(清晰状态;第一遍图像甚至不可见),.aux:
\放松 \pgfsyspdfmark {pgfid2}{7955730}{85248228} \pgfsyspdfmark {pgfid1}{7922962}{29900006}
- xelatex 第二遍(图像超出页面),.aux:
\放松 \pgfsyspdfmark {pgfid2}{32768}{55348222} \pgfsyspdfmark {pgfid1}{7922962}{29900006}
- xelatex 第一遍(清晰状态;第一遍图像甚至不可见),.aux:
我从这个实验中得出的唯一结论是,当 .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 纸张大小。当我们使用覆盖时,如下图所示:
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
半页高度的集合中。
\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}