通用解决方案

通用解决方案

我为独立图片创建了一些样式文件。但是,我得到了不需要的水平空间。

这是我的第一个 MWE1:

\documentclass[convert={true,convertexe={magick.exe},
   command=\unexpanded{{\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space \outfile}}}]{standalone}

\RequirePackage{forest}

\begin{document}

\begin{forest}
[ 2 [1] [3]]
\end{forest}

\end{document}

结果是:

1型

但是,我想更改透明背景。这是 MWE2:

\documentclass[convert={true,convertexe={magick.exe},
   command=\unexpanded{{\convertexe\space -density \density\space \infile\space \ifx\size\empty\else -resize \size\fi\space -transparent white'rgb(100,200,100)' \outfile}}}]{standalone}

\RequirePackage{forest}
\RequirePackage{xcolor}

\begin{document}

\definecolor{tr}{RGB}{100,200,100}
\pagecolor{tr}

\begin{forest}
[ 2 [1] [3]]
\end{forest}

\end{document}

结果是:

微波辐射计

注意树前面的额外水平空间。这只是一个 MWE,所以不是很多。但是,随着树的增大,空间会变得更大:

3型

有人知道如何摆脱这种情况吗?

答案1

您只需在之前进行设置\begin{document}

\documentclass{standalone}

\usepackage{forest}
\usepackage{xcolor}

\definecolor{tr}{RGB}{100,200,100}
\pagecolor{tr}

\begin{document}

\begin{forest}
[ 2 [1] [3]]
\end{forest}

\end{document}

在此处输入图片描述

然而,forest有增加空间的趋势;一个简单的解决方法是standalone使用该varwidth选项进行呼叫。

\documentclass[varwidth]{standalone}

\usepackage{forest}
\usepackage{xcolor}

\definecolor{tr}{RGB}{100,200,100}
\pagecolor{tr}

\begin{document}

\begin{forest}
  [A[B[D][E]][C[F][G]]]
\end{forest}

\end{document}

在此处输入图片描述

与没有 时的输出进行比较varwidth

在此处输入图片描述

通用解决方案

\pgfutilsolvetwotwoleqfloat这些空格是由于in定义中的行尾未受保护而添加的pgfutil-common.tex,恰好位于第 712 行的末尾

712                 \edef\pgf@marshal{
713                     \noexpand\pgfmathfloatdivide@
714                         {\csname r\Pb\endcsname}
715                         {\csname m\Pb b\endcsname}%
716                 }%

确实,如果我这么做

\documentclass{standalone}

\usepackage{forest}
\usepackage{etoolbox}

\makeatletter
% remove the stray space
\patchcmd{\pgfutilsolvetwotwoleqfloat}
  { \noexpand\pgfmathfloatdivide@}
  {\noexpand\pgfmathfloatdivide@}
  {}{}
\makeatother

\begin{document}

\begin{forest}
  [A[B[D][E]][C[F][G]]]
\end{forest}

\end{document}

结果与预期一致

在此处输入图片描述

感谢 cfr 能够限制问题。请参阅问题报告https://github.com/pgf-tikz/pgf/issues/764

答案2

这不是一个答案,而是一个指向问题的尝试。 forest 添加空格,如下例所示:

\documentclass[border=12pt]{standalone}
\usepackage[]{forest}
\forestset{
  pack stage/.style={TeX=a,for root'=pack,TeX=b}
}
\begin{document}
\fbox{\begin{forest}
  [A[B[D][E]][C[F][G]]]
\end{forest}}
\end{document}

带有森林的虚假空间

该问题可以追溯到以下几行forest.sty

  \pgfintersectionofpaths{\pgfsetpath\forest@all@edges}{\pgfsetpath\forest@node@edge}%
  \def\forest@edgenode@intersections{}%

添加标记如下

  X\pgfintersectionofpaths{\pgfsetpath\forest@all@edges}{\pgfsetpath\forest@node@edge}%
  Y\def\forest@edgenode@intersections{}%

表明罪犯就在这里

X 和 Y 之间的罪魁祸首

但是,我不确定如何进一步调试它,因此发布此信息,希望其他人可以从这里跟踪。

答案3

我想为最近使用 TeXlive(我的情况是 2022)并遇到此问题且仍然获得水平空间的任何人添加答案。用例用于定义该文件的命令,这些命令在被“编辑”到的standalone主文档中是不需要的。无论在普通 LaTeX 中是否有必要,每行末尾都需要注释。例如:standalone\includestandalone{}\begin{document}

\documentclass{standalone}

\usepackage{forest}
\usepackage{xcolor}

\begin{document}
\definecolor{tr}{RGB}{100,200,100}
\pagecolor{tr}
\tikzset{%
    dotted_block/.style={draw=red!70!white, line width=0.5pt, dash pattern=on 2pt off 2pt,
            inner ysep=0pt,inner xsep=-2pt, rectangle, rounded corners}%
}
\begin{forest}
[ 2 [1] [3]]
\end{forest}
\end{document}

生成:

在此处输入图片描述

而在之后的每一行末尾都有注释\begin{document}

\documentclass{standalone}

\usepackage{forest}
\usepackage{xcolor}

\begin{document}
\definecolor{tr}{RGB}{100,200,100}%
\pagecolor{tr}%
\tikzset{%
    dotted_block/.style={draw=red!70!white, line width=0.5pt, dash pattern=on 2pt off 2pt,%
            inner ysep=0pt,inner xsep=-2pt, rectangle, rounded corners}%
}%
\begin{forest}
[ 2 [1] [3]]
\end{forest}
\end{document}

生成:

在此处输入图片描述

我找不到对此的引用,并且在forestCTAN 文档对于“空间”和“评论”没有出现这个建议,所以也许它会对其他人有帮助。

相关内容