将 MATLAB 代码作为图形放在框中?

将 MATLAB 代码作为图形放在框中?

我如何将 MATLAB 代码放入框中或将它们当作数字来处理?有没有办法在 LaTeX 中做到这一点?我目前正在使用 verbatim 环境来呈现我的代码,说实话,我认为它们呈现得不是很好!

答案1

我会mcodeMatlabcentral用于这个目的,因为它是为 matlab 定制的。

说的内容 ff16.m是这样的:

%%
%Initialization
clear all   
clc
for f=1:20
p=2;                         % dimension of search space 
s=26;                        % The number of bacteria 
Nc=36;                       % Number of chemotactic steps 
Ns=20;                        % Limits the length of a swim 
Nre=4;                       % The number of reproduction steps 
Ned=2;                       % The number of elimination-dispersal events 
Sr=s/2;                      % The number of bacteria reproductions (splits) per generation 
Ped=0.25;                    % The probabilty that each bacteria will be eliminated/dispersed 
c(:,1)=0.005*ones(s,1);       % the run length  
for m=1:s                    % the initital posistions 
    P(1,:,1,1,1)=0+rand(1,s)*(1-(0))';
    P(2,:,1,1,1)=0+rand(1,s)*(1-(0))';
   %P(3,:,1,1,1)= .2*rand(s,1)';
end  

现在我想将此代码插入我的 tex 文件中,但又不想再次键入或复制/粘贴它。只要ff16.m我的main.tex文件和mcode.sty都在同一个文件夹中,就可以这样做:

\documentclass{article}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}
\begin{document}
\begin{figure}
\caption{My program}
\lstinputlisting{ff16.m}
\end{figure}
\end{document}

其结果将是:

在此处输入图片描述

如果没有图形环境,代码将有一个框。由于您想让此代码像图形一样浮动,我刚刚使用了figure环境,并且所有内容(应该适用于图形的标题)都应该按预期工作。

呈现代码的更好方式是:

\documentclass{article}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}
\begin{document}
%\begin{figure}
%\caption{My program}
\lstinputlisting[caption=My code here]{ff16.m} % note the caption here.
%\end{figure}
\end{document}

这里的优点是标题将显示Listing 1: My code here而不是Figure 1:...。(您可以Listing 1:通过更改\renewcommand{\lstlistingname}{My program}My program 1:

在此处输入图片描述

另请注意,长注释会在行末自动换行。

有关详细信息,请参阅mcode.sty上述链接(matlab central)中的文件本身。

答案2

您可以使用该listings包来获取代码片段

texdoc listings

以下是简单的 MWE

在此处输入图片描述

\documentclass{article}
\usepackage{listings}

\begin{document}

\lstset{language=matlab,frame=single}

\begin{lstlisting}[float,caption=My caption here]
function [] = wordsearch( words, N )

if nargin<1
    words{1} = 'monkey';
    words{2} = 'hippo';
    words{3} = 'girraffe';
    words{4} = 'crocodile';
    words{5} = 'kangaroo';

    N = 20;
end
\end{lstlisting}

\end{document}

答案3

最近的替代方案mcodematlab-prettifier包,它建立在 Matlab 编辑器提供的语法高亮之上,listings并且更紧密地模仿 Matlab 编辑器提供的语法高亮。

如果您的读者是该语言的学生,matlab-prettifier还允许您非常轻松地在 Matlab 代码片段中排版占位符(参见下面的第二个清单)。

由于该软件包还兼容XeLaTeXLuaLaTeX,因此如果您愿意,可以使用比打字机 Computer Modern 更奇特的字体。

在此处输入图片描述

\documentclass{article}

\usepackage{lipsum}
\usepackage[T1]{fontenc}

\usepackage{filecontents}
\begin{filecontents*}{sample.m}
% create a file for output
!touch testFile.txt
fid = fopen('testFile.text', 'w')
for i=1:10
  fprintf(fid,'%6.2f \n', i);
end
\end{filecontents*}

\usepackage[framed,numbered]{matlab-prettifier}
\let\ph\snippetPlaceholder
\lstset
{
  style = Matlab-editor,
  escapechar      = ",
}

\begin{document}

\lstlistoflistings

\lstinputlisting[caption=Sample code from Matlab]{sample.m}

\begin{lstlisting}[caption = {Simple syntax example}]
% syntax of the while loop using a placeholder
while "\ph{condition}"
  % do something useful
  if "\ph{something\_bad}"
    break
  end
end
\end{lstlisting}

\end{document}

相关内容