老实说,我不知道 tex.stackexchange.com 是否已经存在与此问题类似或完全相同的答案,但我会将其留在这里,如果已经发布了任何解决方案,我将等待通知,不胜感激。我找到了一个解决方案,对我来说,我会将其归类为替代方案,因为我无法理解它为什么有效。所以我在下面发布了这个问题,这样我甚至可以回复那些也需要能够轻松找到它的人。因此,我下面的解决方案将已经作为这个问题的 MWE。
答案1
我不知道究竟是什么原因导致我得到它,但我做了以下路径:
尝试寻找解决方案:
虽然没有起到作用“但它有助于解决问题”,也感谢他们:https://tex.stackexchange.com/a/446763/178949和https://tex.stackexchange.com/a/446853/178949。
它起作用了(我很感谢@Alexey Malistov)我需要删除或不使用以下命令:“ \ vbox
”,“ \ vsize to
”:https://tex.stackexchange.com/a/62493/178949。
我曾尝试使用\ begin {center} \ end {center}
,或将 和 与 一起使用\ vfill
,或\ vspace * {\ fill}
仅与一起使用并且仍然同时或不与 结合使用,但网格线总是会超出框线。使用整个解决方案(不做任何更改)来自@Alexey Malistov(如上所述),我得到了水平和垂直精确居中的近似值,但继续将网格(或 tikz 环境)放在很低的位置。然后我猜想这个位于小页面垂直和水平中心下方的额外偏移是由于使用了 而发生的。因此我删除了,并得到了精确的垂直居中。因此我将之前的所有内容与 结合起来并封装起来。\ hfill
\ hspace * {\ fil}
\ vfill
\ hfill
\ centering
\ fbox
\ vbox
\ vbox
\ hfil
如果我做
{\ hfil {{\ vfil {
\ begin {tikzpicture}
... command to draw the grid ...
\ end {tikzpicture}
} \ vfill} \ hfil}}
我不知道为什么,但它不起作用。但按照下面代码的顺序使用\ vfil
和可以工作。我很感谢那些帮助我理解它为什么有效的评论。\ hfil
我截取了 Zathura PDF 并很快感知到了相对于整个文档页面的位置的准确性,同时感知到了由命令框边缘表示的小页面内网格绘制的集中性\fbox
。
\documentclass{article}
\usepackage{fancybox,tikz}
\usepackage[paperwidth=35cm,paperheight=35cm,bottom=2cm,left=2cm]{geometry}
\thispagestyle{empty}
\begin{document}
\fbox{
\begin{minipage}[t][25cm][t]{\linewidth}%
{\vfil{
{\hfil{\begin{tikzpicture}
\draw [draw, black,help lines] (-4,-1.5) grid (5,9.6);
\end{tikzpicture}
}\hfil}\vfil}}
\end{minipage}
}
\end{document}
答案2
\mygrid
此答案使用制作网格并将其保存在一个盒子( )中\savebox
。
\savebox{\mygrid}{\tikz{\draw[step=2.5mm] (-4,-1.5) grid (5,9.6);}}
将网格保存在一个盒子里,相当于 OP 使用minipage
将网格放入一个盒子里。
mygrid
位于页面中间,其位置由一对正交坐标定义:(current page text area.north)
和(current page text area.east)
。这些页面坐标是通过加载包创建的tikzpagenodes
。
这些坐标的交点使用 来定义|-
。请参阅此处的非常好的解释:TikZ:箭头的 |- 符号到底起什么作用?
用于语法的使用|-
。
\node (center) at (current page text area.north |- current page text area.east) {\usebox{\mygrid}};
我们可以通过添加一些页面坐标和参考线的标记来显示此位置。首先,使用ctpaN
以下位置放置一个标记(坐标)(current page text area.north)
:
\node[circle,fill=blue,radius=4pt,label=above:{\Large current page text area.north}] (ctpaN) at (current page text area.north) {};
并使用第二个标记(坐标ctpaE
)放置在(current page text area.east)
\node[circle,fill=blue,radius=4pt,label=above left:{\Large current page text area.east}] (ctpaE) at (current page text area.east) {};
然后我们画一条线连接标记为(ctpaN)
和 的坐标(ctpaE)
。我们再次利用|-
语法来画线。
\draw[blue,thick] (ctpaN) |- (ctpaE);
页面坐标的使用可以适应于将内容放置在页面的任何位置。第二个示例使用部分计算 ( TikZ manual section 4.2.1
) 将内容放置example-image-a
在页面的左下部分。
与使用\hfil
和相比,这是一种更通用的内容放置方式\vfil
。相反,我们可以精确地将内容放置在页面的任何位置,包括页眉、页脚和边距。
另一个特定放置内容的选项是使用textpos
包。
\documentclass{article}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[showframe,paperwidth=35cm,paperheight=35cm,bottom=2cm,left=2cm]{geometry} % added showframe to show the margins
\usepackage{tikzpagenodes}
\thispagestyle{empty}
\newsavebox{\mygrid}
\savebox{\mygrid}{\tikz{\draw[step=2.5mm] (-4,-1.5) grid (5,9.6);}}
\begin{document}
\begin{tikzpicture}[remember picture,overlay]
% Place the grid
\node[circle,fill=blue,radius=4pt,label=above:{\Large current page text area.north}] (ctpaN) at (current page text area.north) {};
\node[circle,fill=blue,radius=4pt,label=above left:{\Large current page text area.east}] (ctpaE) at (current page text area.east) {};
\draw[blue,thick] (ctpaN) |- (ctpaE);
\node (center) at (current page text area.north |- current page text area.east) {\usebox{\mygrid}};
% Place example-image-a uisng partway calculations. Load usetikzlibrary{calc}
\node[circle,fill=red,radius=4pt] (ul) at ($(current page text area.north west)!0.25!(current page text area.north)$) {};
\node[circle,fill=red,radius=4pt] (ll) at ($(current page text area.west)!0.75!(current page text area.south west)$) {};
\draw[red,thick] (ul) |- (ll);
\node (ull) at (ll -| ul) {\includegraphics[width=1.5cm]{example-image-a}};
\end{tikzpicture}
\end{document}