第1部分

第1部分

我有两个问题(以及它们的答案)。我可以将它们分成两个单独的问题和答案,但我不会这样做,因为第二个问题与第一个问题相同,但略有不同。我在下面发布的答案的两个部分解决了问题的两个部分。所以我选择将其保留为一个问答。

第1部分

更改默认 MATLAB 布局

默认的 MATLAB 布局(首次启动时)是恕我直言相当不方便用户使用。对于初学者来说,这可能没问题,但超级用户(比如你和我)不想永久看到 MATLAB 窗口(称为桌面)的某些元素。这是 MATLAB R2014a(以及大多数较新版本)的默认外观:

在此处输入图片描述

让我们看看它有什么问题,恕我直言:

  1. 窗口位置不太好:它没有使用全屏,也没有使用屏幕的实际部分(例如左半部分、上半部分、下半部分或右半部分)。让我们修复这个问题。
  2. 功能区(MATLAB 窗口的上部,包含主页、绘图和应用程序选项卡)已展开,但大多数时候我都不需要它。所以我想将其折叠起来以节省一些银幕庄园
  3. 左侧的“当前文件夹”窗格是展开的,大多数时候我不需要它,但如果展开,它大多数时候都会在那里。因此,大多数时候它都会占用宝贵的屏幕空间,如功能区。
  4. 如果您直接在命令窗口(中间窗格)中进行计算,并且需要跟踪变量等,则右侧窗格(工作区)非常有用。但是,在使用编辑器(在默认窗口中不可见)编写脚本或函数时。您不需要太多工作区,因为您的变量可能非常抽象。虽然调试工作区可能很方便,但我通常会折叠它以节省更多屏幕空间。我使用命令窗口whos中的命令而不是工作区来列出我的所有变量。专业提示:要列出以“x”开头的所有变量,请使用whos x*
  5. 命令窗口顶部的“MATLAB 新手?...”提示让我很烦,因为我对 MATLAB 一点也不陌生。打开其他窗格或窗口时,会出现更多类似的黄色提示。
  6. 当前文件夹(每个人的默认 MATLAB 都不同)不是实用文件夹。我希望它默认为我实际存储工作的文件夹。

可能还有更多您或我不喜欢或想要更改的东西,但让我们解决这六个问题,请参阅下面我的答案的第 1 部分以了解我的解决方案。


第2部分

使自定义设置在重置后的计算机上保留下来

我在上述问题中遇到的另一个问题并没有被我的答案的第 1 部分解决。我想,这个问题发生在更多在他们不是管理员的计算机上使用 MATLAB 的人身上,即他们可能没有提升的权限。这意味着他们无法编辑系统设置,也可能无法编辑 MATLAB 的设置,就像我的情况一样。我在一个非常大的工作场所的办公电脑上使用 MATLAB。每台计算机都有一个用户登录的虚拟工作区。大多数驱动器都是虚拟的:MATLAB 的安装目录就在其中一个驱动器上。通过 Windows 资源管理器,我甚至看不到该驱动器!此外,MATLAB 的快捷方式指向我的工作场所用来调用用户被授权使用的任何软件的另一个程序,而不是直接指向 MATLAB 安装文件夹中的 MATLAB.exe。但是,存在一个显示 MATLAB 根文件夹的 MATLAB 命令matlabroot

我按照自己喜欢的方式设置 MATLAB 桌面后遇到的问题是(见下面我的答案中的屏幕截图),每次重启后布局都会恢复为不友好的默认布局。我每天至少重启一次,这意味着我的 MATLAB 设置和布局每次都会重置。这对您来说可能不是问题,但对于使用一些自定义设置、布局等的超级用户来说,这是一个问题。我已经在我的答案的第 2 部分中解决了这个问题,见下文。

答案1

第1部分

更改默认 MATLAB 布局

我们通过将桌面布局更改为我们更喜欢的布局来解决列出的六个问题。我默认使用如下所示的布局:

首次启动时的默认 MATLAB 窗口

让我们重现一下这个情况。

  1. 只需将 MATLAB 主窗口拖到您想要的位置,例如将其最大化。解决了!
  2. ×单击MATLAB 窗口右上角红色出口正下方的箭头图标可折叠功能区。已解决!
  3. 将当前文件夹窗格的标题(显示当前文件夹的部分)拖到您想要的任何位置。您几乎可以把它放在任何地方。拖动时,您会看到释放鼠标按钮时窗格的阴影。您可以将窗格放置在其他位置,也可以将其拖到左上角、左上角、右上角、顶部、底部或任何其他窗格的标题,以创建默认关闭的选项卡式当前文件夹窗格。MATLAB 称之为最小化。当窗格最小化时,它占用的空间要小得多,可以通过单击选项卡或将鼠标悬停在选项卡上来打开。另一种解决方案是完全关闭窗格,将其从 MATLAB 桌面上移除。这可以通过首先右键单击标题 → 单击取消停靠(或按Ctrl+ Shift+ U)来取消停靠窗格来完成。这将在单独的窗口中打开窗格。关闭窗口,它就会消失。如果您不小心丢失了这样的窗口,您可以通过主功能区的主页选项卡 → 单击布局 → 再次启用当前文件夹来恢复它。要再次停靠窗口,请单击窗格窗口右上角的小箭头 → 单击 Dock(或按Ctrl+ Shift+ D)。我将当前文件夹放在左上角的选项卡中。
  4. 我把工作区放在了当前文件夹选项卡旁边。解决了!
  5. 只需单击×黄色提示栏右侧的即可。
  6. 选择您想要默认使用的文件夹,然后使用当前文件夹窗格或地址栏浏览到该文件夹​​(在上面的屏幕截图中,它是功能区正下方的下拉列表,上面写着► C: ►)。要将其设置为默认路径,请先复制地址。我相信在 R2014b 之后的 MATLAB 版本中,您可以在 MATLAB 的首选项中设置默认当前文件夹(通过功能区主页选项卡 → 首选项 → 常规首选项 → 初始工作文件夹找到它)。如果您使用的是旧版本,则可以使用userpath(newpath)命令,其中 newpath 是您复制的路径。请注意,newpath应该是字符串,即用 括起来'single straight apostrophes',因此不是您可能复制的“双撇号”。解决了!

命令历史记录(通过在命令窗口中按下来访问)和编辑器(在命令窗口中按下Ctrl+N来打开它)也被重新定位。

保存此布局是个好主意,这样如果某些东西或某些人更改了某些东西,您可以轻松切换到它(例如,当多个用户使用具有不同布局的同一 MATLAB 时)。通过功能区主页选项卡 → 布局 → 保存布局 → 为您的布局命名。它将保存为<your layout name>MATLABLayout.xmlMATLAB 首选项目录中的 .xml 文件,您可以使用命令找到它prefdir。MATLAB 的所有首选项、命令历史记录、默认布局等都存储在此目录中。这对于本答案的第二部分非常有用!

大多数(如果不是全部)其他偏好设置也存储在那里。


现在,我的答案的第二部分,回答了我的问题的第二部分。

第2部分

使自定义设置在重置后的计算机上保留下来

首先:应用所有自定义设置并保存所需 MATLAB 桌面的布局,如本答案第 1 部分所述。

现在,我们将巧妙地使用startup.mfinish.m和一些.bat 文件。

startup.m是一个文件,如果存在于 MATLAB 路径中,则在您获得对 MATLAB 窗口的控制权之前,它会在启动时运行。此文件是一个可用于执行任何操作的脚本。我们将以执行以下操作的方式对其进行设置:

  1. 将当前文件夹设置为启动后我们想要的任何目录。
  2. 用我们自己的首选项覆盖默认的 MATLAB 首选项,如本答案第 1 部分中保存的那样。
  3. 恢复我们自己的 MATLAB 桌面布局。

前两个步骤最简单。就我的情况而言(在我的工作电脑上),每次重启电脑时都会忘记默认路径。所以我编写了一个脚本,startup.m并在其中放入了以下代码。

(这进去startup.m

%% set path
p = 'C:\Whatever\path\you\want\as\your\default\Current Folder';
cd(p)

很简单。将其替换p为您想要的当前文件夹的路径。

第二步更难。它要求保存和恢复 MATLAB 首选项目录中的所有设置,可以使用命令找到该目录prefdir。为此,我们finish.m还使用。这是一个在 MATLAB 退出前自动运行的脚本。MATLAB 可以通过几种方式退出:单击×主 MATLAB 窗口的,或使用exitquit命令。需要了解:如果您通过 Windows 任务管理器或通过终止进程的其他系统命令终止 MATLAB.exe,finish.m将不会运行。确保在 MATLAB 路径上,或者使用上面的代码片段finish.m将其路径添加到 MATLAB 路径中。否则,在 MATLAB 退出时不会运行。addpathstartup.mfinish.m

我们会将finish.m您可能设置或更改的所有首选项以及您的自定义布局复制到您有权限的文件夹中。以下代码可执行此操作。

(这进去finish.m

%% backup MATLAB preferences, etc., see also: startup.m
p = 'path\to\your\preference backup folder';
copyfile([prefdir filesep '*'], p, 'f')

这会将 MATLAB 首选项目录中的所有文件复制到您选择的备份文件夹中。现在我们告诉您startup.m恢复这些文件。由于它startup.m先于其他任何操作运行,因此它可以很好地恢复我们可能需要的所有设置。以下代码为我们完成了此操作。

(这进去startup.m

%% restore MATLAB preferences, etc., see also: finish.m
p = 'path\to\your\preference backup folder'; % end without a file separator, i.e. '/', '\' or filesep
copyfile([p filesep '*'], prefdir, 'f')

在此代码片段中,p必须将其设置为与p中的目录相同finish.m,这样 MATLAB 才知道从哪里复制文件。

我们列表中的第三项是最复杂的。仅<your layout name>MATLABLayout.xml使用前面的代码片段将文件复制到 MATLAB 的首选项目录不足以恢复布局。您需要以编程方式恢复它。此外,在我的情况下,MATLAB 需要重新启动才能应用布局。这将通过以下步骤完成。

我找到了一种方法未记录的 MATLAB,该网站介绍了许多未记录或未得到 MATLAB 开发人员支持的 MATLAB 函数。这些函数不易使用,行为也很奇怪,但功能却十分强大。

以下代码恢复您之前保存的布局<your layout name>MATLABLayout.xml

(这进去startup.m

%% restore your custom layout
layoutName = '<your layout name>';
desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
desktop.restoreLayout(layoutName);

设置layoutName为您命名的布局。现在进入重新启动 MATLAB 部分。

请记住,每次我重新启动工作场所的计算机时,MATLAB 的首选项都会重置。默认的 MATLAB 路径(可以使用命令找到path)仅包含我没有权限写入的目录。这意味着我无法将startup.mfinish.m放在 MATLAB 路径上,因此重新启动后它们仍在那里。我该如何解决这个问题?我使用简洁的 MATLAB.exe 命令行技巧复制startup.m到 MATLAB 路径上的文件夹中,然后startup.m手动运行。

重新启动后,我开始菜单中的 MATLAB 快捷方式也会重置,因此我使用桌面上的 .bat 文件来运行 MATLAB,如下所示。

(这MATLAB.bat可以放在您可以轻松访问的任何地方,例如 Windows 桌面或个人文件夹)

@echo off
start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot), startup"

这将运行 MATLAB。此外,-r告诉 MATLAB 在启动完成后运行“双撇号”之间的所有内容(即使在运行 之后startup.m,如果它存在,而我的情况并非如此)。撇号之间的部分是 MATLAB 代码,它告诉 MATLAB 将startup.m我们创建的脚本复制到 MATLAB 路径上的某个位置,在本例中为matlabroot。这可以是默认 MATLAB 路径上的任何其他目录,或者您可以使用addpath('path\to\add')将任何路径添加到 MATLAB 路径。这可以将路径添加到我们的startup.m。撇号之间的最后一个命令只是 的调用startup.m,因此它会运行。

现在,脚本将设置我们所需的路径、设置和布局。但仍有一个问题:MATLAB 需要重新启动才能真正更改布局。这是使用 和第二个 .bat 文件完成startup.mfinish.m

第二个 .bat 文件将通过命令行杀死 MATLAB 并再次启动 MATLAB。startup.m必须知道它是第一次启动,然后运行这个 .bat 文件。finish.m必须清除这些知识。这是我所做的。

(这进去restartup.bat

@echo off
taskkill /f /pid %1
start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot)"

如您所见,将终止进程IDtaskkill未知的进程( )。此 ID 将由 在该 .bat 文件的调用中提供。但是,如果已重新启动 MATLAB 以恢复布局和首选项,则不能进行此调用。因此必须创建已运行的内存。我这样做了如下。%1/pidstartup.mstartup.m

(这进去startup.m

%% if startup hasn't run before, restart MATLAB
% sources:
% http://www.mathworks.com/matlabcentral/newsreader/view_thread/259557
% https://stackoverflow.com/a/92057

% this file is deleted by finish.m
name = 'hasStartedUp';
f = ['path\to\' name];
if ~exist(f,'file')
    fid = fopen(f,'wt'); % create an empty file
    fclose(fid);
    pid = num2str(feature('getpid')); % get MATLAB's process ID
    system(['path\to\restartup.bat ' pid]); % run restartup.bat
end

我提供的内存startup.m是一个文件,如果存在,它会阻止重新启动 MATLAB。这个文件叫做name。当前 MATLAB 的进程 ID 是使用 获得的num2str(feature('getpid'))。这反过来又传递给 的调用restartup.bat,从而终止 MATLAB 进程。请记住,这个 kill 不会调用finish.m,所以我们删除了该脚本中的内存文件,因此如果 MATLAB 正常退出,内存文件将消失,MATLAB 知道下次运行时重新启动。

(这进去finish.m

%% delete memory file from startup.m
f = 'path\to\hasStartedUp';
if exist(f,'file')
    delete(f)
end

长读奖励:阅读此处我如何编辑startup.m以在屏幕左半部分打开默认图形。现在,MATLAB 的主窗口可以很好地位于屏幕的右半部分,图形窗口不会与其重叠(默认情况下会重叠)。


现在我已经解决并回答了我的两个问题!我知道这是一个相当复杂的答案,因此很难读懂,所以请随意提问,并发表评论和建议,以进一步改进我的方法。

相关内容