2011-08-31 14 views
14

Estoy escribiendo el código MATLAB para publicarlo más tarde. Al publicar, me refiero a la herramienta incorporada MATLAB publish que permite al programador generar un informe completo generado a partir de su código MATLAB. Existe la opción de incluir el código en este informe, sección por sección, precediendo los resultados de este código. ¿Hay alguna manera de decirle a MATLAB que incluya parte de este código en el informe, pero no todo? Sé que hay bastantes etiquetas de código de marcado, pero no pude encontrar nada sobre este tema.¿Hay alguna forma de incluir código selectivamente al publicar en Matlab?

Editar: Solo para aclarar, quiero todos los resultados que se publicarán, pero sólo algunos del código. Así que simplemente eliminar este código no es una opción.

¡Salud! =)

Respuesta

2

Oculte el código que no desea que las personas vean en un script. Por ejemplo, en el ejemplo "sine_wave" de la página publish documentación, añadí una sola línea:

junk 

Aquí está el contenido de la basura:

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

Ahora ejecute el script principal, y la publicó el resultado tiene "basura" en la lista, pero los contenidos de basura no están incluidos, y obtienes la bonita versión de una onda sinusoidal, en lugar de la basura incluida en su ejemplo.

+0

Supongo que este es el mejor hack posible. – Phonon

+0

Lamentablemente, eso parece. :( – John

+0

¿por qué tristemente? Indirection es una gran herramienta de programador en muchas circunstancias. –

1

La única forma que conozco de hacerlo es eliminar el código que no desea que aparezca en la salida. Si solo desea mostrar el código y no la salida, puede simplemente configurar la propiedad evalCode en false en su llamada al publish.

Si desea que se evalúe el código y que se publique también la salida, entonces es un poco más complicado. Puede ejecutar manualmente las partes de la secuencia de comandos que no desea publicar y luego publicar el código que le interesa (colocándolo en su propio archivo .m). No debería importar si el código publicado depende de cualquier variable que se inicialice en el código omitido, ya que esas variables se agregaron a su espacio de trabajo cuando ejecutó manualmente los fragmentos de código omitidos.

Editar:

Puesto que usted ha aclarado su pregunta para indicar que usted está interesado en la publicación de algunos de los códigos, pero toda la producción, yo creo que lo mejor es que basta con modificar la secuencia de comandos "temporal" (que contiene el conjunto parcial de código que desea publicar) para incluir las llamadas a la función fprintf, disp, etc. que desee que aparezcan en la salida.

Es un poco hack-ish, pero como he dicho, no estoy al tanto de ninguna forma de obtener ese tipo de granularidad fina con "anotaciones" o utilizando el comando publish.

Espero que ayude!

0

cambio la expresión de Matlab en las opciones de publicación de

myFunction('PUBLISHING'); 

Y las primeras líneas del código de función para comprobar si hay esa entrada, por lo que puede modificar mi código para solamente hacer ciertas cosas cuando se publica, por lo general mostrando figuras, etc., pero no durante el funcionamiento normal. O viceversa :)

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 
0

Aquí es un script de ejemplo que puede guardar y publish que ilustrará una solución. Primero hay que establecer el Include code option a false, que se detiene todo código evaluado aparezcan, pero todavía se puede mostrar el código utilizando un 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! 

Y aquí está la salida publicado:

enter image description here

Cuestiones relacionadas