![独立的 Tikz:将 tikz 坐标固定到页面 cm](https://linux22.com/image/386518/%E7%8B%AC%E7%AB%8B%E7%9A%84%20Tikz%EF%BC%9A%E5%B0%86%20tikz%20%E5%9D%90%E6%A0%87%E5%9B%BA%E5%AE%9A%E5%88%B0%E9%A1%B5%E9%9D%A2%20cm.png)
我有类似以下内容的内容:
\documentclass[tikz]{standalone}% Does not support leap years.
\usepackage{tikz}
\usepackage[paperwidth=12cm, paperheight=25cm, margin=0cm]{geometry}
\newcommand{\printdots}[1]{
\begin{tikzpicture}[
x=1cm,
y=1cm,
xscale = 1,
yscale=1,
]
%Draw dots
\foreach \y in {1, 1.5, ..., 24} {
\foreach \x in {1, 1.5, ..., 11} {
\fill[color=black] (\x,\y) circle (0.05);
}
}
\end{tikzpicture}%
}
\begin{document}
\foreach \n in {1,...,2}{%
\printdots
}
\end{document}
即,我想制作一个 12x15cm 的独立版,有 2 页。在每页上,我想打印相距 0.5cm 的点,从边缘 1cm 开始。
(最终,我想做更复杂的事情,所以如果有更简单的方法来打印点,那可能无法解决我的问题)。
但是,当我编译它时,右侧和底部会出现很大的空白,顶部和左侧缺少点。换句话说,tikz 坐标与页面坐标不匹配。
有什么方法可以让我的 Tikz 坐标与页面坐标(以厘米为单位)完全匹配?基本上,我想告诉 tikz 不要根据图片中的内容自动缩放图片。
我见过很多关于附加特定节点到页面位置,但不知道如何将坐标与页面位置对齐。
答案1
standalone
只需使用允许您在此处添加预定义边距的类的本机选项即可1cm
。 并且不要使用geometry
包。
\documentclass[tikz,border=1cm]{standalone}
此外,不需要tikz
两次加载包。通过将其加载到独立类的选项中,tikz
会自动裁剪创建的每个图形。我引用手册版本 v1.3a 第 8 页:
TikZ
对于使用专用选项绘制的图片,tikz
提供了加载tikz
包并配置tikzpicture
环境以创建单张裁剪页面。
因此可以删除这两行注释:
%\usepackage{tikz}
%\usepackage[paperwidth=12cm, paperheight=25cm, margin=0cm]{geometry}
另外,的默认单位tikz
是厘米,所以不需要指定。
为了进行 2 次迭代,虚线是无用的,只需编写:
\foreach \n in {1,2}{%
如果我没算错的话,如果每边的边距为1cm
,那么这些点就一定画在一个尺寸为的图形上10x13cm
。
这很容易做到,只要从 0 而不是 1 开始计数即可:
\foreach \y in {0,.5,...,13} {
\foreach \x in {0,.5,...,10} {
\documentclass[tikz,border=1cm]{standalone}% Does not support leap years.
\newcommand{\printdots}[1]{
\begin{tikzpicture}
%Draw dots
\foreach \y in {0,.5,...,13} {
\foreach \x in {0,.5,...,10} {
\fill[color=black] (\x,\y) circle (0.05);
}
}
\end{tikzpicture}%
}
\begin{document}
\foreach \n in {1,2}{%
\printdots
}
\end{document}
答案2
现在我已经写好了答案,我看到了@Zarko的评论。我同意他的观点,最好使用article
(或类似的东西)来创建多页文档。
\documentclass{article}% Does not support leap years.
\usepackage{tikz}
\usepackage{eso-pic}
\usepackage[paperwidth=12cm, paperheight=25cm, margin=0cm]{geometry}
\AddToShipoutPictureBG{%
\begin{tikzpicture}[overlay,remember picture,
x=1cm,
y=1cm,
xscale = 1,
yscale=1,
]
%Draw dots
\foreach \y in {1, 1.5, ..., 24} {
\foreach \x in {1, 1.5, ..., 11} {
\fill[color=black] ([xshift=\x*1cm,yshift=\y*1cm]current page.south
west) circle (0.05);
}
}
\end{tikzpicture}}
\begin{document}
~
\clearpage
~
\end{document}
答案3
使用除类之外的其他方法standalone
可以让你摆脱许多限制。你可以使用article
具有强大pic
构造的普通类tikz
。你可以使用@Zarko 指出的选项将点图放置在你想要的任何页面上,而不会干扰页面内容[overlay, remember picture]
。下面定义的新宏\drawdots
可以方便地将点添加到任何页面。
\documentclass{article}
\usepackage{tikz}
\usepackage[paperwidth=12cm, paperheight=25cm, margin=0cm]{geometry}
\tikzset{
mydots/.pic = {
\foreach \y in {0, .5, ..., 23}
\foreach \x in {0, .5, ..., 10}
\fill[color=black] (\x,\y) circle (0.05);
}
}
\newcommand{\drawdots}{%
\begin{tikzpicture}[overlay, remember picture]
\pic at ([shift={(1,1)}]current page.south west) {mydots};
\end{tikzpicture}
}
\begin{document}
\drawdots
\clearpage
\drawdots
\end{document}