
我有兩個問題(及其答案)。我可以提出兩個單獨的問題並回答它們,但我不會,因為第二個問題與第一個問題相同,但有所不同。我在下面發布的答案的兩個部分解決了問題的兩個部分。所以我選擇將其保留為單一問答。
第1部分
變更預設的 MATLAB 佈局
預設的 MATLAB 佈局(首次啟動時)是恕我直言對使用者相當不友善。對於初學者來說可能沒問題,但超級使用者(例如您和我)不希望永久看到某些 MATLAB 視窗(稱為桌面)元素。這是 MATLAB R2014a(以及大部分較新版本)預設的樣子:
讓我們看看它出了什麼問題,恕我直言:
- 視窗的位置不太好:它不使用全屏,也不使用螢幕的實際部分(例如左、上、下或右半部)。讓我們解決這個問題。
- 功能區(MATLAB 視窗的上部包含「首頁」、「繪圖」和「應用程式」標籤)已展開,但大多數時候我並不需要它。所以我想把它折疊起來以保存一些螢幕莊園。
- 左側的「目前資料夾」窗格已展開,大多數時候我不需要它,但如果展開,它大多數時候都在那裡。因此,大多數時候它會使用寶貴的螢幕空間,例如功能區。
- 如果您直接在命令列視窗(中間窗格)中進行計算並且需要追蹤變數等,則右側窗格(工作區)非常有用。側窗格(工作區)非常有用。您不需要那麼多工作區,因為您的變數可能非常抽象。雖然調試工作區可能很方便,但我通常會折疊它以節省更多的螢幕空間。我使用
whos
命令列視窗中的命令來列出所有變量,而不是工作區。專業提示:要列出以“x”開頭的所有變量,請使用whos x*
。 - “MATLAB 新手?” …」命令列視窗頂部的提示讓我很惱火,因為我對 MATLAB 絕對不陌生。當您開啟其他一些窗格或視窗時,會出現更多類似的黃色提示。
- 目前資料夾(每個人的預設 MATLAB 都不同)不是實用資料夾。我希望它預設為我實際儲存工作的資料夾。
可能還有更多您或我不喜歡或想要更改的內容,但讓我們解決這六個問題,請參閱下面我的答案的第 1 部分以了解我的解決方案。
第2部分
使自訂設定在重置它們的電腦上保留
我在上述問題中遇到的另一個問題並未由我的答案的第 1 部分解決。我想,這個問題會發生在更多在他們不是管理員的電腦上使用 MATLAB 的人身上,也就是他們可能沒有提升的權限。這意味著他們無法編輯系統設置,也可能無法編輯 MATLAB 的設置,就像我的情況一樣。我在一個非常大的工作場所的工作電腦上使用 MATLAB。每台電腦都有一個使用者登入的虛擬工作區。大多數磁碟機都是虛擬的:MATLAB 的安裝目錄位於這些磁碟機之一上。透過 Windows 資源管理器我甚至看不到磁碟機!此外,MATLAB 的捷徑指向我的工作場所用來呼叫使用者有權使用的任何軟體的另一個程序,而不是直接指向 MATLAB 安裝資料夾中的 MATLAB.exe。但是,存在一個 MATLAB 指令可以顯示 MATLAB 的根資料夾matlabroot
.
按照我喜歡的方式設定 MATLAB 桌面後遇到的問題(請參閱下面我的答案中的螢幕截圖)是每次重新啟動後佈局都會恢復為不友善的預設佈局。我每天至少重新啟動一次,因此這意味著我的 MATLAB 設定和佈局每次都會重置。這對您來說可能不是問題,但對於使用某些自訂設定、佈局等的超級用戶來說,這是一個問題。我已經在答案的第二部分解決了這個問題,請參見下文。
答案1
第1部分
變更預設的 MATLAB 佈局
我們透過將桌面佈局更改為我們更喜歡的佈局來解決列出的六個問題。我預設使用的佈局如下所示:
讓我們重現。
- 只需將 MATLAB 主視窗拖曳到您想要的位置,例如將其最大化。解決了!
- ×點選MATLAB 視窗右上角紅色出口正下方的箭頭圖示可折疊功能區。解決了!
- 將「目前資料夾」窗格的標題(顯示「目前資料夾」的部分)拖曳到您想要的位置。您幾乎可以將它放在任何地方。拖曳時,您會看到窗格的陰影,即釋放滑鼠按鈕時它將所處的位置。您可以將該窗格放置在其他位置,也可以將其拖曳到左上、左上、右上、頂部、底部或任何其他窗格的標題,以建立預設情況下關閉的選項卡式“目前資料夾”窗格。 MATLAB 稱為最小化。當窗格最小化時,它佔用的空間要少得多,並且可以透過點擊選項卡或將滑鼠懸停在選項卡上來開啟。另一種解決方案是完全關閉該窗格,將其從 MATLAB 桌面中刪除。這可以透過先右鍵點選標題 → 按一下取消停靠(或按Ctrl+ Shift+ U)來取消停靠窗格來完成。這將在單獨的視窗中開啟該窗格。關上窗戶,它就會消失。如果您不小心丟失了這樣的窗口,您可以透過主功能區的「主頁」標籤→點擊「佈局」→再次啟用「目前資料夾」來恢復它。若要再次停靠窗口,請按一下窗格視窗右上角的小箭頭 → 按一下「停靠」(或按Ctrl+ Shift+ D)。我將當前資料夾放在左上角的選項卡中。
- 我將工作區放在「目前資料夾」標籤旁邊。解決了!
- 只需點擊×黃色提示欄中右側的 。
- 選擇您想要預設的資料夾,然後使用「目前資料夾」窗格或網址列瀏覽至該資料夾(在上面的螢幕截圖中,功能區正下方的下拉清單顯示► C: ►)。若要將其設定為預設路徑,請先複製位址。我相信,在 R2014b 以來的 MATLAB 版本中,您可以在 MATLAB 的首選項中設定預設目前資料夾(透過功能區主頁標籤 → 首選項 → 常規首選項 → 初始工作資料夾找到它)。如果您使用的是舊版本,則可以使用下列命令設定預設的 MATLAB 目前資料夾
userpath(newpath)
指令,其中newpath是你複製的路徑。請注意,newpath
應該是一個字串,即由 括起來'single straight apostrophes'
,因此不是您可能複製的“雙撇號”。解決了!
命令歷史記錄(透過↑在命令視窗中按 來存取)和編輯器(在命令視窗中按Ctrl+N開啟它)也被重新定位。
儲存此佈局是一個好主意,這樣,如果某事或某人更改了某些內容(例如,當多個使用者使用具有不同佈局的相同 MATLAB 時),您可以輕鬆切換到它。透過功能區「首頁」標籤→「版面配置」→「儲存版面」→為您的版面命名。它保存為 .xml 文件,<your layout name>MATLABLayout.xml
在 MATLAB 首選項目錄中調用,您可以使用命令找到該prefdir
文件。所有 MATLAB 的首選項、命令歷史記錄、預設佈局等都儲存在該目錄中。這對於本答案的第二部分非常有用!
大多數(如果不是全部)其他首選項也儲存在那裡。
現在,我的答案的第二部分回答了我的問題的第二部分。
第2部分
使自訂設定在重置它們的電腦上保留
首先:套用所有自訂設定並儲存所需的 MATLAB 桌面佈局,如本答案第 1 部分所述。
現在,我們將巧妙地使用startup.m
、finish.m
和一些 .bat 檔案。
startup.m
是一個文件,如果存在於 MATLAB 路徑中,則在啟動時運行,然後您才能控制 MATLAB 視窗。該文件是一個可以用來執行任何操作的腳本。我們將以執行以下操作的方式設定它:
- 將目前資料夾設定為啟動後我們想要的任何目錄。
- 使用我們自己的設定覆蓋預設的 MATLAB 首選項,如本答案第 1 部分中所儲存的。
- 恢復我們自己的 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 主視窗的 ,或使用exit
或quit
指令。很高興知道:如果您透過 Windows 工作管理員或透過殺死進程的其他系統命令來殺死 MATLAB.exe,則 MATLAB.exefinish.m
將不會執行。確保位於 MATLAB 路徑上,或使用上面的程式碼片段中的 ,finish.m
將其路徑新增至 MATLAB 路徑。否則,addpath
startup.m
finish.m
當 MATLAB 退出時將不會運作。
我們即將會做到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.m
和finish.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.m
的finish.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)"
如您所見,將終止進程 ID ( )taskkill
未知 ( ) 的進程。此 ID 將在呼叫此 .bat 檔案時由 提供。但是,如果 MATLAB 已重新啟動以恢復佈局和首選項,則不得發生此呼叫。因此必須創建一個已經運行的記憶體。我這樣做如下。%1
/pid
startup.m
startup.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 的主視窗可以很好地位於螢幕的右半部分,並且圖窗視窗不會與其重疊(預設情況下,它們會重疊)。
現在我已經解決並回答了我的兩個問題!我知道這是一個相當詳盡的答案,因此讀起來很困難,所以請隨意提出任何問題並發表評論以及進一步改進我的方法的建議。