在Matlab中发布时是否有选择性地包含代码的方法?

问题描述 投票:15回答:4

我正在编写MATLAB代码以便稍后发布。通过发布,我的意思是内置的MATLAB publish工具,它允许程序员根据他们的MATLAB代码生成完整的报告。可以选择在此代码的结果之前逐节包含此报告的代码。有没有办法告诉MATLAB在报告中包含一些代码但不是全部?我知道有很多标记代码标记,但我无法找到关于此主题的任何内容。

编辑:只是为了澄清,我希望发布所有结果,但只发布一些代码。因此,简单地删除此代码不是一种选择。

干杯! =)

matlab
4个回答
4
投票

隐藏您不希望人们在脚本中看到的代码。例如,在publish文档页面的“sine_wave”示例中,我添加了一行:

junk

这是垃圾的内容:

figure()
plot(0:0.01:6,sin(0:0.01:6))

现在运行你的主脚本,发布的结果在列表中有“垃圾”,但是垃圾的内容不包括在内,你得到了正弦波的漂亮版本,而不是他们的例子中包含的糟糕版本。


1
投票

我知道这样做的唯一方法是删除您不希望出现在输出中的代码。如果您只想显示代码而不是输出,那么您可以在调用evalCode时将false属性设置为publish

如果你确实想要评估代码,并且还要发布输出,那么它只是稍微复杂一些。您可以手动执行您不想发布的脚本部分,然后发布您关心的代码(通过将其放在自己的.m文件中)。如果发布的代码依赖于在省略的代码中初始化的任何变量,则无关紧要,因为在手动执行省略的代码片段时,这些变量已添加到工作空间中。

编辑:

既然你已经澄清了你的问题,说你有兴趣发布一些代码,但是所有的输出,我认为你最好的办法就是修改“临时”脚本(其中包含部分集合)您希望发布的代码)包括您希望在输出中出现的任何fprintfdisp等函数调用。

这有点像hack-ish,但就像我说的那样,我不知道有什么方法可以通过“注释”或使用publish命令获得那种精细的粒度。

希望有所帮助!


1
投票

这是一个可以保存的示例脚本和publish,它将说明一种解决方法。首先必须将Include code option设置为false,这会阻止所有评估的代码出现,但您仍然可以使用syntax highlighted code sample显示代码:

%% Controlling what code gets published
% Here's how you can do it...

%% Showing results without code
% If you set the
% <https://www.mathworks.com/help/matlab/matlab_prog/specifying-output-preferences-for-publishing.html#bthbe__-3
% *Include code* option> to |false|, you will see the plot but not the code
% that made it:

surf(peaks);  % I'm John Cena!

%% But what if you want some of the code to show?
% The *Include code* setting affects the whole document, so all evaluated
% code will be hidden. If you want some code to show, you can use
% <https://www.mathworks.com/help/matlab/matlab_prog/marking-up-matlab-comments-for-publishing.html#bs_uwzr
% syntax highlighted sample code>. This does mean you have to have duplicate
% sections of code (one is evaluated, one is displayed), but it's the best
% option thus far:

%%
%
%   surf(peaks);
%

surf(peaks);  % You can't see me, but you see the above!

这是公布的输出:

enter image description here


0
投票

我将发布选项中的Matlab表达式更改为

myFunction('PUBLISHING');

并且函数代码的第一行用于检查该输入,因此我可以修改我的代码以仅在发布时执行某些操作,通常显示数字等,但在正常操作期间不会。或相反亦然 :)

function [outputs] = myFunction(input1, input2)

  isPublishing = (nargin == 1) && strcmp(input1, 'PUBLISHING');

  if (nargin == 0) || isPublishing

     % Set up default values
     input1 = 'Hello';
     input2 = 'World';

  end

  ...

end
© www.soinside.com 2019 - 2024. All rights reserved.