在Matlab的最新版本中(我已在Windows上的R2014b和R2015a中看到它),当您键入时,您help foo将获得该函数及其签名的简要说明.例如,键入help bsxfun产生类似这样的东西(只有更好的格式):
此MATLAB函数应用由功能句柄中指定的元件逐个元件二进制运算
fun到数组A和B,并启用单扩张.Run Code Online (Sandbox Code Playgroud)C = bsxfun(fun,A,B)参考页面
bsxfun另见
arrayfun,repmat其他用途
bsxfundistcomp/bsxfun
这当然只是实际文档的摘要.要获取您需要输入的完整文档doc foo.这将打开HTML帮助浏览器,这需要相当长的时间(至少在某些计算机上).
有没有办法在命令窗口中获得完整的帮助(从而避免使用帮助浏览器),因为它曾经是旧的Matlab版本?
为了更详细地研究这个问题,我将"旧的"Matlab版本定义为没有HTML帮助的版本,将"新"版本定义为那些版本.我还需要为每种类型的帮助命名,以便引用它们:
FP(Full,Plain):纯文本形式的完整帮助,在Matlab命令窗口(旧样式)中显示.
SH(Summarized,HTML):以HTML形式汇总帮助,在Matlab命令窗口中显示.
FH(完整,HTML):HTML形式的完整帮助,显示在帮助浏览器中.
众所周知,FP帮助的文本包含在定义函数的文件的第一个注释行中.在新的Matlab版本中,函数也可能具有关联的HTML文件.此文件包含HTML标记中的SH帮助和HTML代码中的FH帮助.
可能的行为是:
help foo产生了FP帮助.help foo如果foo有关联的HTML帮助文件,则生成SH帮助,如果没有,则生成FP帮助.doc foo如果foo有相关的HTML帮助文件,则生成FH帮助.如果没有,FP帮助将显示在帮助浏览器中(无格式).所以这个问题更恰当地表达为:如果foo有一个关联的HTML帮助文件,如何在新的Matlab版本中显示FP帮助.这个问题很有意义,因为
虽然文档没有说明,但help这些Matlab版本中的函数支持零个,一个或两个输出参数.您可以检查此输入open help并查看功能签名:
function [out, docTopic] = help(varargin)
Run Code Online (Sandbox Code Playgroud)
从本质上讲,help内部工作如下:
它通过调用类构造函数创建一个名为processclass 的对象helpUtils.helpProcess:
process = helpUtils.helpProcess(nargout, nargin, varargin);
Run Code Online (Sandbox Code Playgroud)
在那里nargout,argin和varargin那些与help被调用.
它运行方法process.getHelpText,该方法调用未记录的内置函数helpfunc,并因此设置属性process.helpStr.此属性包含命令窗口中显示的帮助字符串.
事实证明,至少在Windows上,取决于nargout(传递给构造函数helpUtils.helpProcess)的值,生成的帮助字符串将是FP或SH.也就是说,它将是FP if nargout>0和SH if nargout==0.您可以通过help.m在命令窗口中直接键入以下代码(改编自)来检查:
process = helpUtils.helpProcess(1, 1, {'bsxfun'});
process.getHelpText
process.helpStr
Run Code Online (Sandbox Code Playgroud)
这将产生FP帮助.另一方面,将第一个1(对应nargout于实际调用中)改为a 0,
process = helpUtils.helpProcess(0, 1, {'bsxfun'});
process.getHelpText
process.helpStr
Run Code Online (Sandbox Code Playgroud)
会产生SH帮助.
我不知道为什么会这样,也就是说,它的工作方式比这更深层次.我所知道的是该getHelp方法调用了未记录的helpfunc,至少涉及生成FP帮助.
因此,要获得FP帮助,您需要help使用一个或两个输出参数进行调用.例如,
str = help('foo')
Run Code Online (Sandbox Code Playgroud)
将FP帮助文本分配给变量str并显示它.或者你可以使用
disp(help('foo'))
Run Code Online (Sandbox Code Playgroud)
它还具有help使用(隐式)输出参数调用的效果.
要从标准命令中获得此行为help foo,您可以定义一个help函数来覆盖Matlabhelp,并将其放在Matlab文档文件夹中.此文件夹通常首先出现在路径中(或者您可以通过编辑确保它完成startup.m),因此具有优先权.新函数实际上将help使用一个输出参数调用Matlab ,然后显示生成的(FP)帮助文本.要调用overriden函数,必须暂时更改为其文件夹:
function help(varargin)
if isempty(varargin)
varargin = {'help'}; %// `help` should be equivalent to `help help`
end
d = pwd; %// take note of current folder
cd(fullfile(matlabroot, 'toolbox', 'matlab', 'helptools')) %// folder where the
%// standard `help` function is
disp(help(varargin{1}));
cd(d) %// restore folder
Run Code Online (Sandbox Code Playgroud)
所以现在,最后,help foo产生旧式(FP)帮助.
在Matlab R2015b中,行为似乎已经改善了.打字help foo不再产生SH帮助.它也不完全是FP.实际上它比这更好:它产生FH帮助但是在命令窗口中,而不是在浏览器中.或者,等效地,它产生FP帮助,但链接和更好的格式化.
所以不用再调整了!
Matlab R2018a再次给SH帮忙.这个答案提供的解决方案有效(即产生FP帮助).
所以回到调整!