TikZ:预定义形状时出现难以解释的空白

TikZ:预定义形状时出现难以解释的空白

假设我们想要预定义一些形状以供稍后在TikZ图片中使用。


最小工作示例(MWE):

\documentclass{standalone}
\usepackage{tikz}

\begin{document}

    \def\testone#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testtwo#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testthree#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testfour#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testfive#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \begin{tikzpicture}
        \testone{(0,0)}{0};
    \end{tikzpicture}
\end{document}

结果截图:

结果截图


问题说明:

如您所见,绘图左侧有大量空白。似乎每个空白\def\figure都会导致向右移动一点,最终导致出现这个大空白。

这些不需要的空间从何而来?我该如何避免它?

答案1

它不是来自 TiZ 环境本身。例如,此代码运行良好:

\documentclass{standalone}
\usepackage{tikz}

    \def\testone#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testtwo#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testthree#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testfour#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

    \def\testfive#1#2{
        \begin{scope}[shift={#1}, rotate=#2]
            \draw(0,0) rectangle (2,1);
        \end{scope}}

\begin{document}
    \begin{tikzpicture}
        \testone{(0,0)}{0};
    \end{tikzpicture}
\end{document}

换句话说,空白行产生换行符或空格,包含在standalonePDF 输出中。

我在这里建议不要定义命令,而是定义 TiZ。pic

\documentclass[tikz]{standalone}
\tikzset{
    myrectangle/.pic={
        \begin{scope}[rotate=#1]
            \draw (0,0) rectangle (2,1);
        \end{scope}
    }
}
\begin{document}
\begin{tikzpicture}
\pic at (0,0) {myrectangle=0};
\end{tikzpicture}
\end{document}

相关内容