我在使用 qtree 软件包与 Springer Nature 模板结合使用时遇到了问题。将论文放入此模板后,树会呈现出奇怪的形状:节点看起来是分开的,树图像与文本重叠。有人知道这个问题的解决方案吗?
\documentclass[referee,sn-basic]{sn-jnl}
\usepackage{graphicx}
\usepackage{stmaryrd}
\usepackage{graphicx}
\usepackage{qtree,tree-dvips}
\usepackage{linguex}
\begin{document}
\ex. \Tree [.A \qroof{something here}.DP [.B C ]]
\end{document}
在 qtree 的文档中,它说:
Qtree 无法与期刊样式 X 配合使用 当然,很多事情都可能出错,但首先要检查期刊样式是否重新定义了表格环境。Qtree 会对表格进行内部调用,因此这经常是问题的根源。样式的编写者通常会以不同的名称保存 \tabular 的原始定义,因此您需要做的就是安排在调用 \Tree 期间恢复原始定义。您可以定义 \qtreeinithook 来执行必要的重新定义。它在每次调用 \Tree 时都会被调用,具有本地范围(因此它所做的任何重新定义都会在调用 \Tree 时自动取消)。例如,JNLE 样式 (nle.sty) 将开始和结束表格的标准命令分别保存为 \oldtabular 和 \endoldtabular,替换宏会产生真正宽的树。
下面将仅恢复对 \Tree 调用的原始定义。\def\qtreeinithook{\let\tabular=\oldtabular \let\endtabular=\endoldtabular}
但是,我不知道如何在日志的样式文件中找到定义 qtreeinithook 的命令。
答案1
这里有两件事。如注释中所述,[referee]
类的选项加载setspace
并将间距设置为\doublespacing
。但该类还重新定义,\raggedright
这会导致在节点标签上方插入额外的空间,因为qtree
标签是使用{flushleft}
环境创建的(使用定义为列表\raggedright
)。
该类绝对不应该破坏内核定义,\raggedright
但由于几乎不可能让发布者更改其类文件,因此这里有一个通用解决方案,它通过修复环境{flushleft}
本身至少解决了部分底层问题。这也会解决您的注释问题,因为使用的clgoss4e
注释宏linguex
也使用{flushleft}
环境。它还将解决使用该环境的任何包的任何类似问题{flushleft}
。
恢复定义后,{flushleft}
我们只需要添加\singlespacing
到宏中\qtreeinithook
以确保树的其余部分是单倍行距。我还在树后添加了一些额外的空间;如果不需要,您可以将其删除。
\documentclass[referee,sn-basic]{sn-jnl}
\usepackage{qtree}
\usepackage{linguex}
\usepackage{lipsum}
\providecommand{\singlespacing}{}
\makeatletter
% We first create a version of the kernel \raggedright command
\DeclareRobustCommand\oldrr{%
\let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip
\finalhyphendemerits=\z@
\leftskip\z@skip
\parindent\z@}
\makeatother
% Now redefine \flushleft to use the original version
\renewcommand\flushleft{\trivlist\oldrr\item\relax}
% Add \singlespacing to trees
\newcommand\qtreeinithook{\singlespacing}
% Add some extra space after the tree
\newcommand\qtreefinalhook{\vspace{\baselineskip}}
\begin{document}
\lipsum[1]
\ex.\Tree [.A \qroof{something here}.DP [.B C ]]
\lipsum[2]
\end{document}