mcode 和 scrbook 之间发生冲突

mcode 和 scrbook 之间发生冲突

我想在我的文档中包含 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会让你陷入悬崖。

您可以恢复scrbooks 定义:

\documentclass{scrbook}
\let\zz\ifnumbered
\usepackage{mcode}
\let\ifnumbered\zz

\begin{document}

%\tracingall
\chapter{matlab code}





\end{document} 

相关内容