我每个情节都有一个.m
个文件,想在我的草稿打印输出中看到用来创建它的文件。
这应该通过一个可以放在我的.m文件中的函数来完成 注释掉了,为最终版本。
% addWatermarkFilename() %
到目前为止,我找到了mfilename()
,但它无法获取调用函数的名称。我正在寻找一种在不改变大小的情况下将文本放入图片的好方法。
解决方案: 我将Luis Mendo和NKN的建议结合起来:
function [ output_args ] = watermarkfilename( )
% WATERMARKFILENAME prints the filename of the calling script in the
% current plot
s = dbstack;
fnames = s(2).name;
TH = text(0,0,fnames,'Interpreter','none');
TH.Color = [0.7 0.7 0.7];
TH.FontSize = 14;
TH.Rotation = 45;
uistack(TH,'bottom');
end
答案 0 :(得分:4)
我建议不要在代码中注释掉函数,而是使用正确的标志。例如,代码可以是这样的:
clc,clear,close all
addWaterMark = true; % if true you will get the filename in the title
fname = mfilename; % get file name mfilename('fullpath') for the full-path
t=-2*pi:0.1:2*pi;
y = sin(t);
plot(t,y); grid on;
xlabel('t');ylabel('y');
if addWaterMark
title(['filename: ' fname '.m']);
else
title('plot no.1');
end
稍微使用text
功能,你可以制作一个合适的水印。像这样的东西:
clc,clear,close all
addWaterMark = true;
fname = mfilename;
fnames = [fname '.m'];
t=-2*pi:0.1:2*pi;
y = sin(t);
plot(t,y); grid on;
xlabel('t');ylabel('y');
if addWaterMark
title(['filename: ' fnames]);
t = text(-3,-0.4,fnames);
t.Color = [0.7 0.7 0.7];
t.FontSize = 40;
t.Rotation = 45;
else
title('plot no.1');
end
注意:显然,if
和else
之间的代码可以存储为从fnames
变量接收字符串(char)的函数,这个数字的句柄。
答案 1 :(得分:1)
如果要获取调用当前函数或脚本的函数或脚本的名称,请使用dbstack
,如下所示:
s = dbstack; % get struct with function call stack information
callerName = s(2).name; % get name of second function in the stack
s
中的第一个条目是指当前函数;第二个是指那个叫它的人。