我为独立图片创建了一些样式文件。但是,我得到了不需要的水平空间。
这是我的第一个 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}
结果是:
但是,我想更改透明背景。这是 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,所以不是很多。但是,随着树的增大,空间会变得更大:
有人知道如何摆脱这种情况吗?
答案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{}%
表明罪犯就在这里
但是,我不确定如何进一步调试它,因此发布此信息,希望其他人可以从这里跟踪。
答案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}
生成:
我找不到对此的引用,并且在forest
CTAN 文档对于“空间”和“评论”没有出现这个建议,所以也许它会对其他人有帮助。