Есть ли способ выборочного включения кода при публикации в Matlab? - PullRequest
15 голосов
/ 31 августа 2011

Я пишу код MATLAB, чтобы опубликовать его позже.Под публикацией я подразумеваю встроенный инструмент MATLAB publish, который позволяет программисту создавать полный отчет, сгенерированный из их кода MATLAB.Существует возможность включить код с этим отчетом, раздел за разделом, перед результатами этого кода.Есть ли способ указать MATLAB включить часть этого кода в отчет, но не все?Я знаю, что существует довольно много тегов кода разметки, но я не смог ничего найти по этой теме.

Редактировать: Просто чтобы уточнить, я хочу все результаты будут опубликованы, но только некоторые кода.Так что просто удалить этот код не вариант.

Ура!=)

Ответы [ 4 ]

4 голосов
/ 01 сентября 2011

Скрыть ваш код, который вы не хотите, чтобы люди видели в сценарии.Например, в примере "sine_wave" со страницы документации publish я добавил одну строку:

junk

Вот содержимое мусора:

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

Теперь запуститеОсновной сценарий и опубликованный результат содержат «мусор» в списке, но содержимое мусора не включено, и вы получите хорошую версию синусоиды вместо дрянной, включенной в их пример.

1 голос
/ 02 марта 2018

Вот пример сценария, который вы можете сохранить и опубликовать , который проиллюстрирует один обходной путь. Сначала вы должны установить параметр Включить код на false, который останавливает отображение всего оцененного кода, но вы все равно можете отобразить код, используя Синтаксис выделенного примера кода :

%% 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

1 голос
/ 31 августа 2011

Единственный известный мне способ сделать это - удалить код, который вы не хотите отображать в выходных данных.Если вы просто хотите отобразить код, а не вывод, то вы можете просто установить для свойства evalCode значение false при вызове publish.

Если вы хотите, чтобы код был оценени вывод будет опубликован, тогда это будет немного сложнее.Вы можете вручную выполнить те части сценария, которые вы не хотите публиковать, а затем опубликовать код, который вам нужен (поместив его в собственный файл .m).Не должно иметь значения, зависит ли опубликованный код от каких-либо переменных, которые инициализируются в пропущенном коде, поскольку эти переменные были добавлены в ваше рабочее пространство при ручном выполнении пропущенных фрагментов кода.

Редактировать:

Поскольку вы уточнили свой вопрос, заявив, что вы заинтересованы в публикации некоторого кода, но всего вывода, я думаю, что вам лучше всего просто изменить «временный»скрипт (который содержит частичный набор кода, который вы хотите опубликовать) для включения любых вызовов функций fprintf, disp и т. д., которые вы хотите, чтобы они появлялись в выводе.

Это немного взломатьДа, но, как я уже сказал, я не знаю ни одного способа получить такую ​​мелкую гранулярность с помощью «аннотаций» или с помощью команды publish.

Надеюсь, это поможет!

0 голосов
/ 01 марта 2018

Я изменяю выражение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...