使用 RequirePackage 更改 forest 包树

使用 RequirePackage 更改 forest 包树

我正在使用该forest包绘制一棵简单的树。forest与 Springer-Nature 模板一起使用时,必须在调用之前通过标注forest指定。不幸的是,这会改变树结构。为了简单起见,我提供了一个 MWE(在最后),其中使用复制了问题。\RequirePackage\documentclassarticle documentclass

预期输出:

观察分叉点与父节点分离

预期输出

交替输出

当在 MWE 中取消注释该命令时\RequirePackage[edges]{forest},我得到一个备用树,其中分叉点连接到父级(见下文)。

折叠分叉点格式

问题:我该如何修复\RequirePackageforest使第二幅图像看起来与第一幅图像一样?回想一下,我无法删除 ,\RequirePackage因为 Springer-Naturedocumentclass需要它。

article为简单起见,使用 MWE 基础

% \RequirePackage[edges]{forest}

\documentclass{article}

\usepackage[edges]{forest}


\begin{document}
    \scriptsize
    \begin{forest}
      for tree={
        draw=black!75,
        line width=1pt,
        if level=0{%
          forked edges,
          l sep+=0.35cm,
          s sep+=0.5in,
          align=center,
        }{%
          if level=1{%
            l sep+=0.35cm,
            s sep+=0.5in,
          }{
          },
        },%
      },
      [Node~A
        [Node~B
        ]
        [Node~C
           [Node~D
           ]
           [Node~E
           ]
        ]
     ]
    \end{forest}

\end{document}

答案1

类加载与或冲突的sn-jnl包。来自 CTAN:programforestedges

其主要提供的是程序环境;programbox 环境可用于不会破坏页面的片段。

如果您不需要这样的programbox环境,则可以避免加载该program包。

使用

\makeatletter%
\disable@package@load{program}{}
\makeatother

阻止该program包被加载。

% !TeX TS-program = pdflatex

\makeatletter% added <<<<<<<<<<<<<<<<
\disable@package@load{program}{}
\makeatother

\documentclass[pdflatex,sn-mathphys]{sn-jnl}

\usepackage[edges]{forest} % added <<<<<<<<<<<<<<,

\begin{document}        
        \scriptsize
        \begin{forest}
            for tree={
                draw=black!75,
                line width=1pt,
                if level=0{%
                    forked edges,
                    l sep+=0.35cm,
                    s sep+=0.5in,
                }{%
                    if level=1{%
                        l sep+=0.35cm,
                        s sep+=0.5in,
                    }{
                    },
                },%
            },
            [Node~A
            [Node~B
            ]
            [Node~C
            [Node~D
            ]
            [Node~E
            ]
            ]
            ]
        \end{forest}
    
\end{document}

b

另一个选择是使用大卫·卡莱尔的回答

% !TeX TS-program = pdflatex

\documentclass[pdflatex,sn-mathphys]{sn-jnl}

\catcode`\|=12\relax % added <<<<<<<<<<

\usepackage[edges]{forest} % added <<<<<<<<<<<<<<,

\begin{document}        
        \scriptsize
        \begin{forest}
            for tree={
                draw=black!75,
                line width=1pt,
                if level=0{%
                    forked edges,
                    l sep+=0.35cm,
                    s sep+=0.5in,
                }{%
                    if level=1{%
                        l sep+=0.35cm,
                        s sep+=0.5in,
                    }{
                    },
                },%
            },
            [Node~A
            [Node~B
            ]
            [Node~C
            [Node~D
            ]
            [Node~E
            ]
            ]
            ]
        \end{forest}
    
\end{document}

答案2

这似乎有效,不要问我为什么。

\RequirePackage{forest}
\documentclass{article}
\useforestlibrary{edges}

相关内容