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