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

时间:2011-08-31 15:11:18

标签: matlab

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

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

干杯! =)

4 个答案:

答案 0 :(得分:4)

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

junk

这是垃圾的内容:

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

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

答案 1 :(得分:1)

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

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

修改

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

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

希望有所帮助!

答案 2 :(得分: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

答案 3 :(得分: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