我想包含一些来自 MATLAB 的代码,我正在使用该mcode
包。但我遇到的问题是它不会自动中断长行,因为我加载的是文件而不是代码。如果我...
在长行的末尾添加,问题就会解决,但我想知道这个包中是否有任何选项可以自动中断长行?
修订:这里是代码:
\documentclass{book}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{caption}
\usepackage{color,xecolor}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}
\begin{document}
\begin{figure}
\caption{My program for plotting the above formula in 2 different conditions}
\lstinputlisting{technique.m}
\end{figure}
\end{document}
其中 technique.m 是一个 matlab 文件,我从中获得的内容是:
并且超出了框架范围。实际上,我收到了警告,说自动换行是一个未知选项,但我不知道该怎么做才能解决这个问题。
答案1
使用\usepackage[autolinebreaks]{mcode}
。其他可能令您感兴趣的选项是[framed,numbered,autolinebreaks,useliterate.....]
。有关更多详细信息,请查看 的源代码mcode
。
编辑对于修改后的问题。
如果autolinbreaks
给出了选项,则mcode.sty
定义lstset
为(2.7.0.0 版本 mcode.sty 中的第 231 行)
\lstset{breaklines=true,breakatwhitespace=true,prebreak=\usebox{\lbreakdots}}
这里的罪魁祸首是breakatwhitespace=true
。您的公式没有空格,因此它永远不会在行末中断。
解决方案
添加
breakatwhitespace=false
加载后mcode
。
MWE 将
\documentclass{book}
\usepackage{graphicx}
\usepackage{amsmath,amssymb}
\usepackage{caption}
% \usepackage{color,xcolor}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}
\lstset{breakatwhitespace=false} %%<---this line added
\begin{document}
\begin{figure}
\caption{My program for plotting the above formula in 2 different conditions}
\lstinputlisting{technique.m}
\end{figure}
\lstinputlisting[caption={My program for plotting the above formula in 2 different
conditions}]{technique.m}
\end{document}
figure
注意:你可以使用我在代码中展示的第二个实例,而不是将代码放在环境中。我希望区别很明显。
答案2
另一个选择是包Listings
(文档在这里)。它非常可定制,但例如,我认为这就足够了:
\usepackage{listings}
\lstset{
language=Matlab,
breaklines=true
}
然后,您可以使用 嵌入文件。使用附加样式参数,可以生成类似以下内容的内容(这些是编译成 .pdf\lstinputlisting{test.m}
的内容):test.m