通过包 mcode 包含 MATLAB 代码

通过包 mcode 包含 MATLAB 代码

我正在尝试使用一个非常方便的包 mcode.sty 将 MATLAB 代码包含到我的论文中,http://www.mathworks.com/matlabcentral/fileexchange/8015-m-code-latex-package

这个包本身运行得很好,但我无法让它与我的论文一起工作。我怀疑我加载的包一定存在某种冲突。我得到的错误是:

./chapter1/source/section1-4.tex:8: LaTeX Error: \begin{document} ended by \end{figure}.

请使用我创建的 MWE 进行尝试,您可以从我的 Dropbox 下载它:http://dl.dropbox.com/u/6275106/MWE.zip

在 dissertation-bec-mwe.sty 文件中,有一个部分我已确定与问题相关。只需对第 783-819 行的这一部分进行注释即可使文档通过编译,尽管我的图标题间距会加倍。

编辑:我发现 xcolor 包与 sty 文件中对 xfloat 的定义相冲突是根本原因。mcode 需要 Xcolor,如果只启用此包而不启用 mcode 包,则会导致上述行为。这就是为什么普通列表包可以工作而 mcode 不行的原因。仍在尝试弄清楚如何让两者(xfloat 和 xcolor)很好地配合。

论文中的任何图都会发生这种情况,只要它是第一个图即可。如果我注释掉 mcode usepackage 和 mcode content 部分,文档就可以正常编译。

答案1

因此我解决了这个问题并想记录下来以防其他人遇到同样的问题。

关键的启示来自于这个有类似问题的论坛帖子:http://www.latex-community.org/forum/viewtopic.php?f=45&t=4766&start=10

问题源于我的dissertation.sty工作表xcolorxfloat。工作.sty表在浮动和脚注中定义了自定义行距,单倍,而不是使用 的 2 基线。它以一种特别糟糕的方式做到了这一点,据我所知,xfloat它在全球范围内进行了重新定义。xfloat

解决方案是保留内核xfloat,并创建一个新的xfloat调用myxfloat以供在图中使用。这允许间距命令按预期工作,同时保留与的兼容性xcolor这里是原始xfloat定义,

\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
   \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
      \@parmoderr\@floatpenalty\z@
    \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
       \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
       \@tfor \@tempa :=#2\do
                        {\if\@tempa h\advance\@tempcnta \@ne\fi
                         \if\@tempa t\advance\@tempcnta \tw@\fi
                         \if\@tempa b\advance\@tempcnta 4\relax\fi
                         \if\@tempa p\advance\@tempcnta 8\relax\fi
         }\global\count\@currbox\@tempcnta}\@fltovf\fi
    \global\setbox\@currbox\vbox\bgroup
    \def\baselinestretch{1}
    \ifx\undefined\selectfont
    \small\normalsize
    \else
    \@newbaseline
    \fi
    \boxmaxdepth\z@
    \hsize\columnwidth \@parboxrestore}
\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
   \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
    {\rule{\z@}{\footnotesep}\ignorespaces
      #1\strut}}}

这里是新的定义:

% Save LaTeX kernel version of \@xfloat
\makeatletter
\let\my@xfloat\@xfloat
\makeatother
% Create a modified copy of \@xfloat using the kernel definition
\makeatletter
\def\@xfloat#1[#2]{
   \my@xfloat#1[#2]%
   \def\baselinestretch{1}%
   % I COMMENTED THIS PART BELOW.  
%   \@normalsize \normalsize
%}
%\makeatother
%
%%%
%%% Reset baselinestretch within footnotes and floats. Originally stolen
%%% from Stanford thesis style.
%%%
%\def\@xfloat#1[#2]{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
%   \@floatpenalty-\@Miii\fi\def\@captype{#1}\ifinner
%      \@parmoderr\@floatpenalty\z@
%    \else\@next\@currbox\@freelist{\@tempcnta\csname ftype@#1\endcsname
%       \multiply\@tempcnta\@xxxii\advance\@tempcnta\sixt@@n
%       \@tfor \@tempa :=#2\do
%                        {\if\@tempa h\advance\@tempcnta \@ne\fi
%                         \if\@tempa t\advance\@tempcnta \tw@\fi
%                         \if\@tempa b\advance\@tempcnta 4\relax\fi
%                         \if\@tempa p\advance\@tempcnta 8\relax\fi
%         }\global\count\@currbox\@tempcnta}\@fltovf\fi
%    \global\setbox\@currbox\vbox\bgroup
%    \def\baselinestretch{1}
%       OLD SPACING TWEAK CONTINUES BELOW
    \ifx\undefined\selectfont
    \small\normalsize
    \else
    \@newbaseline
    \fi
    \boxmaxdepth\z@
    \hsize\columnwidth \@parboxrestore}
\long\def\@footnotetext#1{\insert\footins{\def\baselinestretch{1}\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
   \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}\@makefntext
    {\rule{\z@}{\footnotesep}\ignorespaces
      #1\strut}}}

希望这能帮助到其他人,我知道这确实让我困惑了好几天。感谢上帝保佑我本科物理专业学习的所有编程,我甚至看不懂 TeX,但我肯定能把互联网上的一些随机样本拼凑起来!

相关内容