LaTeX宏包forest加载失败问题排查:与underscore宏包冲突导致forest.sty报错
解决
underscore与forest宏包的兼容性冲突问题 你遇到的报错根源是**underscore宏包的strings选项与forest宏包不兼容**。当underscore启用strings选项时,它会修改LaTeX对下划线_的处理逻辑,把文本中的下划线当作普通字符,但这同时会干扰forest内部大量使用下划线命名的命令(比如你日志里的forestmath@convert@from@d@to@_),导致LaTeX无法正确解析这些命令名称,从而抛出Missing \endcsname inserted和Missing \begin{document}这类错误。
解决方案
根据你的需求,有两种可行的解决方式:
1. 移除underscore的strings选项(如果不需要该功能)
如果你不需要让文本中的下划线直接显示为普通字符,可以去掉strings选项,这样两个宏包就能和平共处:
\documentclass[a4paper]{article} \usepackage{underscore} % 去掉[strings]选项 \usepackage{forest} \begin{document} This compiles successfully! \end{document}
2. 临时关闭strings功能后加载forest
如果你必须使用underscore的strings选项,可以在加载forest之前临时关闭该功能,加载完成后再恢复:
\documentclass[a4paper]{article} \usepackage[strings]{underscore} % 临时关闭underscore的strings处理 \stringsoff \usepackage{forest} % 恢复strings功能 \stringson \begin{document} This works too! \end{document}
原理说明
underscore的strings选项会重新定义_的行为,让它在文本模式下不再是数学模式的下标标记,而是直接输出下划线。但这个修改会影响所有包含下划线的命令名称——LaTeX会把命令里的下划线当成文本字符,而非命令名称的一部分,导致\csname和\endcsname之间出现非法字符,触发你看到的报错。通过\stringsoff临时关闭这个功能,就能让forest正常加载内部命令,之后再用\stringson恢复下划线的文本处理功能。
内容的提问来源于stack exchange,提问作者Chris Wright
相关产品推荐
相关产品推荐

