我如何将 MATLAB 代码放入框中或将它们当作数字来处理?有没有办法在 LaTeX 中做到这一点?我目前正在使用 verbatim 环境来呈现我的代码,说实话,我认为它们呈现得不是很好!
答案1
我会mcode
用Matlabcentral用于这个目的,因为它是为 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
最近的替代方案mcode
是matlab-prettifier
包,它建立在 Matlab 编辑器提供的语法高亮之上,listings
并且更紧密地模仿 Matlab 编辑器提供的语法高亮。
如果您的读者是该语言的学生,matlab-prettifier
还允许您非常轻松地在 Matlab 代码片段中排版占位符(参见下面的第二个清单)。
由于该软件包还兼容XeLaTeX
和LuaLaTeX
,因此如果您愿意,可以使用比打字机 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}