在 Matlab 的命令窗口中获取旧式帮助

2024-05-14

问题的简短版本

在最新版本的 Matlab 中(我在 Windows 上的 R2014b 和 R2015a 中看到过),当您键入help foo你得到一个简要描述;简介函数及其签名。例如,输入help bsxfun产生类似这样的东西(只有更好的格式):

此 MATLAB 函数应用函数句柄指定的逐元素二元运算fun到数组A and B,启用单例扩展。

C = bsxfun(fun,A,B)

参考页面bsxfun

也可以看看arrayfun, repmat

其他用途bsxfun distcomp/bsxfun

这当然只是实际文档的摘要。为了得到完整的文档你需要输入doc foo。这将打开 HTML 帮助浏览器,这需要相当长的时间(至少在某些计算机上)。

有没有办法在命令窗口中获得完整的帮助(从而避免使用帮助浏览器),就像旧版 Matlab 中那样?

问题的长版本

为了更详细地研究这一点,我将“旧”Matlab 版本定义为没有 HTML 帮助的版本,将“新”版本定义为有 HTML 帮助的版本。我还需要为每种类型的帮助命名,以便引用它们:

  • FP(Full, Plain):纯文本形式的完整帮助,显示在 Matlab 命令窗口中(旧样式)。

  • SH(Summarized, HTML):以 HTML 形式汇总的帮助,显示在 Matlab 命令窗口中。

  • FH(完整,HTML):HTML 形式的完整帮助,显示在帮助浏览器中。

众所周知,FP 帮助文本包含在第一条注释行在定义函数的文件中。在新的 Matlab 版本中,函数也可能具有关联的 HTML 文件。该文件包含 HTML 标记中的 SH 帮助和 HTML 代码中的 FH 帮助。

可能的行为是:

  • 在旧的 Matlab 版本中,help foo产生 FP 帮助。
  • 在新的 Matlab 版本中,help foo产生 SH 帮助,如果foo有关联的 HTML 帮助文件,如果没有,则提供 FP 帮助。
  • 在新的 Matlab 版本中,doc foo产生 FH 帮助,如果foo有一个关联的 HTML 帮助文件。如果没有,FP 帮助将显示在帮助浏览器中(无格式)。

所以这个问题更恰当地表述为:如何在新的 Matlab 版本中显示 FP 帮助foo有关联的 HTML 帮助文件。这个问题很有意义,因为

  • 大多数 Matlab 函数都有关联的 HTML 帮助文件。
  • 大多数 Matlab 函数,甚至内置函数(没有 m 代码),都有包含 FP 帮助的 m 文件。

另一个动机是,在某些情况下,FP 文档包含 FH 文档中未出现的功能(例如,参见here https://stackoverflow.com/a/29111291/2586922).


原始答案(Matlab 版本 R2014b、R2015a)

虽然文档没有说明,help这些 Matlab 版本中的函数支持零个、一个或两个输出参数。你可以检查这个打字open help并查看函数签名:

function [out, docTopic] = help(varargin)

在本质上,help内部工作原理如下:

  1. 它创建一个名为的对象process, 类helpUtils.helpProcess,通过将类构造函数调用为:

    process = helpUtils.helpProcess(nargout, nargin, varargin);
    

    where nargout, argin and varargin是那些与help被称为。

  2. 它运行该方法process.getHelpText,它调用未记录的内置函数helpfunc,结果设置了属性process.helpStr。该属性包含命令窗口中显示的帮助字符串。

事实证明,至少在 Windows 上,取决于的值nargout(它被传递给构造函数helpUtils.helpProcess) 生成的帮助字符串将为 FP 或 SH。也就是说,如果nargout>0, 和 SH 如果nargout==0。您可以通过键入以下代码(改编自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 帮助。

So, 要获得 FP 帮助,您需要致电help有一个或两个输出参数。例如,

str = help('foo')

将 FP 帮助文本分配给变量str并显示它。或者你可以使用

disp(help('foo'))

这也有调用的效果help带有(隐式)输出参数。

要通过标准命令获得此行为help foo,你可以定义一个help功能为覆盖Matlab的help,并将其放入您的 Matlab 文档文件夹中。该文件夹通常首先出现在路径中(或者您可以通过编辑来确保它出现)startup.m),因此具有优先权。新函数本质上会调用 Matlab 的help带有一个输出参数,然后显示生成的 (FP) 帮助文本。为了调用覆盖函数,需要临时更改到其文件夹:

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

在 Matlab R2015b 中,行为似乎有所改善。打字help foo不再产生 SH 帮助。它也不完全是 FP。事实上它比这更好:它生成 FH 帮助,但在命令窗口中,而不是在浏览器中。或者,等效地,它生成 FP 帮助,但带有链接和更好的格式。

所以不需要再调整了!

编辑 Matlab 版本 R2018a

Matlab R2018a再次为SH提供帮助。此答案中提供的解决方案有效(即产生 FP 帮助)。

所以回到调整!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Matlab 的命令窗口中获取旧式帮助 的相关文章

  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • 垂直子图的单一颜色条

    我想让下面的 MATLAB 图有一个沿着两个子图延伸的颜色条 像这样的事情 使用图形编辑器手动完成 Note 这与提出的问题不同here https stackoverflow com questions 39950229 matlab t
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 在 Matlab 的命令窗口中获取旧式帮助

    问题的简短版本 在最新版本的 Matlab 中 我在 Windows 上的 R2014b 和 R2015a 中看到过 当您键入help foo你得到一个简要描述 简介函数及其签名 例如 输入help bsxfun产生类似这样的东西 只有更好
  • 在Matlab中对字符进行分组并形成矩阵

    我有 26 个字符 A 到 Z 我将 4 个字符组合在一起 并用空格分隔以下 4 个字符 如下所示 abcd efgh ijkl mnop qrst uvwx yz 我的Matlab编码如下 str abcdefghijklmnopqrst
  • 如何在Matlab中绘制网络?

    我有一个矩阵AMatlab中的维数mx2每行包含两个节点的标签 显示网络中的直接链接 例如 如果网络有4矩阵的节点A可能A 1 2 1 3 2 1 2 4 3 2 4 1 4 2 其中第一行表示有一个链接来自1 to 2 第二行表示有一个链
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • 如何将数据传递给 MATLAB oncleanup 函数?

    我有一个编译好的 matlab 程序 可以自动调整机器参数 在调整周期结束时 我需要恢复一些原始设置 有时会发生意外错误 有时用户会发现调整算法未正常工作 因此应终止 使用 control C 如果发生可预测的错误 我可以使用 try ca
  • Matlab:2行10列的子图

    如何在 matlab 中绘制 20 幅图像 2 行 10 列 我知道我必须使用 子图 功能 但我对给出的参数感到困惑 我尝试给予 子图 2 10 行索引 列索引 但它似乎不起作用 请帮忙 的前两个参数subplot函数分别给出图中子图的总行
  • 如何从 matlab 调用 Qtproject?

    我在 matlab 中有一个函数可以写入一个 file txt 我在 qt 项目中使用它 So 当我使用 unix 获取要运行的 qt 编译可执行文件时 我有一个 Matlab 文件 但出现错误 代码 unix home matt Desk
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 在矩阵中找到叉的最快方法

    定义 A i j 1 是十字的中点 如果元素A i 1 j 1A i 1 j 1A i j 1 1A i j 1 1 这些元素和中点一起形成矩阵 A 中的十字 其中 A 至少是一个 3 3 矩阵 并且i j 0 假设上图是 8 8 矩阵 A
  • 在 Pari-GP 中嵌套特定递归

    每个人 我最初在 Stackexchange 上发布了类似的问题 它已移至此处 可以在链接中找到 在 Matlab 中声明函数递归序列 https stackoverflow com questions 67146061 declaring
  • 如何在Matlab中将图像从笛卡尔坐标更改为极坐标?

    我正在尝试将图像的像素从 x y 坐标转换为极坐标 但我遇到了问题 因为我想自己编写该函数 这是我到目前为止所做的代码 function newImage PolarCartRot read and show the image image
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 基本矩阵错误?

    我试图通过扫描从相机拍摄的两个图像 检测图像中的特征 匹配它们 创建基本矩阵 使用相机内在函数计算基本矩阵 然后分解它以找到旋转和翻译 这是matlab代码 I1 rgb2gray imread 1 png I2 rgb2gray imre
  • 计算给出数组中最小标准差的子集

    让我们有一个大小的向量N 例如 x rand N 1 我想计算长度子集的最小标准差K在向量中 When N and K很小 很容易找到最好的子集 因为我可以使用nchoosek N K 枚举所有可能的子集 但是当值N and K比我们说的要

随机推荐