绘制独立 tikz 时出现奇怪的空白

绘制独立 tikz 时出现奇怪的空白

我正在tikz使用standalone类绘制图片,但左侧有奇怪的空白。我的代码是

\documentclass{standalone}

\usepackage{kerkis}
\usepackage{tikz}

\begin{document}

\usetikzlibrary{positioning}

\tikzset{
  gold/.style = {
    top color=gray!60, 
    bottom color=gray!20, 
    minimum width=0.25cm, 
    minimum height=2cm, 
    anchor=west,
  },
  boron/.style = {
    top color=gray!80, 
    bottom color=gray!40,
    minimum width=1cm, 
    minimum height=2cm, 
    anchor=west,
  },
  telescope/.style = {
    right color=black!70, 
    left color=black!20,
    minimum width=1.2cm,
    minimum height=.4cm,
    sloped,
    pos=1,
    rotate=90,
  },
  E/.style = {
     top color=black!80, 
     bottom color=black!40,
     minimum width=1.2cm,
     minimum height=1.4cm, 
     sloped,
     pos=1,
     rotate=90,
   },
}

 \begin{tikzpicture}

  \coordinate (beam left) at (-5,0);
  \coordinate (beam right) at (2,0);

  % Incident Beam
  \draw[->, very thick] (beam left) -- (beam right);
  \node[above right] at (beam left) (proton) {$p^+$};

  % Target : Boron + Au
  \node[gold, label=95:$Au$] at (6,0) (gold) {};% Au
  \node[boron, right=0mm of gold, label=80:$^{nat}B$] (boron) {};

  \coordinate (hit) at (gold.west);

  % Telescopes
  \path (hit) -- +(170:8) 
        node[telescope, label=right:$6\mu m$] (telescope1) {$\Delta E$};
  \path (hit) -- +(-120:8)
        node[telescope, label=left:$22\mu m$] (telescope2) {$\Delta E$};
  \path (hit) -- +(170:9)
        node[E, label=20:$1000\mu m$] {$\mathbf{E}$};
  \path (hit) -- +(-120:9)
        node[E, label=left:$1000\mu m$]  {$\mathbf{E}$};

  % Angles
  \draw[dashed, gray, thick] (beam right) -- (hit);
  \draw[dashed, gray, thick] (hit) -- (telescope1);
  \draw[dashed, gray, thick] (hit) -- (telescope2);
  \draw[<->,thick] (hit)  +(180:2) arc (180:170:2);
  \path (hit) +(175:2) node[left] {$10^\circ$};
  \draw[<->,thick] (hit) +(180:2) arc (-180:-120:2);
  \path (hit) +(210:2) node[left] {$60^\circ$};
 \end{tikzpicture}

\end{document}

我的输出如下

在此处输入图片描述

知道为什么会发生这种情况以及如何解决吗?

答案1

这是一个简单的例子:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{} A
\end{document}

在此处输入图片描述

\tikzset{}这表明和之间的空格A不会被忽略。对于

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikzset{}
A
\end{document}

因此,你有几个这样的虚假空间,因为tikzlibrarypositioning.code.tex

\tikzset{above/.code=\tikz@lib@place@handle@{#1}{south}{0}{1}{north}{1}}
\tikzset{above left/.code=\tikz@lib@place@handle@{#1}{south east}{-1}{1}{north west}{0.707106781}}

以此类推几行。

事实是standalone将 TeX 置于 LR 模式(正确的 TeX 语言中的水平模式),因此不会忽略空格。

varwidth如果添加以下选项,则不会获得任何空间standalone

\usepackage[varwidth]{standalone}

(但由于图片大小,您会收到过满框警告)。

在之前加载库并执行\tikzset命令\begin{document}

答案2

如果你\fbox{}在你的周围放置一个tikzpicture,你会得到:

结果

这表明额外的空间不在 tikzpicture 内。因此它必须由它之前的代码生成。

如果你转到\usetikzlibrary{positioning}序言部分,正如 egreg 在评论中所建议的那样,你现在会得到:

结果2

左侧仍有一个(非常小的)间隙。这是由于设置所致\tikzset,我不确定为什么(即使删除所有空白行,这个间隙仍然存在)。

转到\tikzset序言部分也会产生所需的结果。

相关内容