我想在我的文档中包含 Matlab 代码。代码包曾经与我的 scrbook 文档类结合使用,效果很好。但是,我最近将我的 KOMAscript 系列更新到版本 3.12,现在代码包导致错误(不完整 \iffalse)。只有当我\include
使用时才会发生错误\chapter
;当我阻止使用 时不会发生\include
错误。下面的 MWE 重现了错误;当我更改scrbook
为时,错误消失book
。有人能帮我解决这个问题吗?
\begin{filecontents}{testchap.tex}
\chapter{matlab code}
\mcode{function}
\end{filecontents}
\documentclass{scrbook}
\usepackage{mcode}
\usepackage{filecontents}
\begin{document}
\include{testchap}
\end{document}
答案1
类和 都komascript
以不兼容的方式mcode
定义\ifnumbered
。这肯定是问题的原因。其中一个(理想情况下是两个)应该更改此开关的名称,特别是如果它仅用于内部目的。我编辑了mcode.sty
,将“numbered”的实例(在\ifnumbered
和中\numberedtrue
)更改为“mcode@numbered”,并且 MWE 编译正常。
\ifnumbered
用于scrbook.cls
区分编号和未编号的章节。用于mcode
区分编号和未编号的代码行。在这两种情况下,它似乎都是内部命令,应该小心选择一个不太可能引起这种冲突的名称。
一种解决方法是执行 中描述的编辑mcode.sty
。以下是不同之处:
100,101c100,101
< \newif\ifnumbered
< \DeclareOption{numbered}{\numberedtrue}
---
> \newif\ifmcode@numbered
> \DeclareOption{numbered}{\mcode@numberedtrue}
118c118
< \ifnumbered\typeout{ - line numbering enabled}\else\fi
---
> \ifmcode@numbered\typeout{ - line numbering enabled}\else\fi
141c141
< \ifx\textquotesingle\undefined%
---
> \ifx\textquotesingle\undefined%
202c202
< \ifnumbered% numbered option
---
> \ifmcode@numbered% numbered option
212c212
< \ifnumbered%
---
> \ifmcode@numbered%
答案2
scrbook
定义一个\ifnumbered
非 TeX 的宏if
,这不一定是错误的,但有点危险,可能mcode
会让你陷入悬崖。
您可以恢复scrbook
s 定义:
\documentclass{scrbook}
\let\zz\ifnumbered
\usepackage{mcode}
\let\ifnumbered\zz
\begin{document}
%\tracingall
\chapter{matlab code}
\end{document}