独立的 Tikz:将 tikz 坐标固定到页面 cm

独立的 Tikz:将 tikz 坐标固定到页面 cm

我有类似以下内容的内容:

\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} {

裁剪 tikz

\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}

在此处输入图片描述

相关内容