Teil 1
Ändern des Standardlayouts von MATLAB
Wir lösen die sechs aufgelisteten Probleme, indem wir das Desktop-Layout nach Belieben ändern. Ich benutze ein Layout, das standardmäßig so aussieht:
Lass uns das reproduzieren.
- Ziehen Sie einfach das Hauptfenster von MATLAB an die gewünschte Stelle, z. B. um es zu maximieren. Gelöst!
- Klicken Sie auf das Pfeilsymbol rechts unter dem roten Ausgang ×in der oberen rechten Ecke des MATLAB-Fensters, um das Menüband zu reduzieren. Gelöst!
- Ziehen Sie den Titel des Fensters "Aktueller Ordner" (den Teil, in dem "Aktueller Ordner" heißt) an die gewünschte Stelle. Sie können es fast überall platzieren. Während des Ziehens sehen Sie den Schatten des Bereichs, in dem er positioniert wird, wenn Sie die Maustaste loslassen. Sie können den Bereich an einer anderen Stelle positionieren oder ihn nach oben links, links oben, rechts oben, oben, unten oder in einen anderen Titel des Fensters ziehen, um den Registerkartenbereich Aktueller Ordner zu erstellen, der standardmäßig geschlossen ist. MATLAB nennt dies minimiert. Wenn ein Bereich minimiert wird, nimmt er viel weniger Platz in Anspruch und kann geöffnet werden, indem Sie entweder auf die Registerkarte klicken oder die Maus über die Registerkarte bewegen. Eine andere Lösung besteht darin, den Bereich vollständig zu schließen und ihn von Ihrem MATLAB-Desktop zu entfernen. Dazu können Sie zunächst den Bereich abdocken, indem Sie mit der rechten Maustaste auf den Titel klicken. Klicken Sie dann auf Abdocken (oder drücken Sie Ctrl+ Shift+)U). Dies öffnet den Bereich in einem separaten Fenster. Schließen Sie das Fenster und es wird verschwinden. Wenn Sie versehentlich ein Fenster wie dieses verloren haben, können Sie es über die Registerkarte Start des Hauptfensters wiederherstellen. Klicken Sie auf Layout, und aktivieren Sie den aktuellen Ordner erneut. Um das Fenster erneut anzudocken, klicken Sie auf den kleinen Pfeil in der oberen rechten Ecke des Fensterbereichs → klicken Sie auf Dock (oder drücken Sie Ctrl+ Shift+ D). Ich füge den aktuellen Ordner in einem Tab oben links ein.
- Ich lege den Arbeitsbereich neben die Registerkarte Aktueller Ordner. Gelöst!
- Klicken Sie einfach ×rechts in der Leiste der gelben Spitze auf.
- Wählen Sie einen Ordner aus, den Sie standardmäßig verwenden möchten, und navigieren Sie zu diesem Ordner. Verwenden Sie dazu entweder den Bereich "Aktueller Ordner" oder die Adressleiste (in der Abbildung oben ist die Dropdown-Liste direkt unter der Multifunktionsleiste zu sehen ► C: ►). Um dies als Standardpfad festzulegen, kopieren Sie zuerst die Adresse. Ich glaube, dass Sie in MATLAB-Versionen seit R2014b den aktuellen Standardordner in den MATLAB-Voreinstellungen festlegen können (finden Sie über die Multifunktionsleiste Registerkarte Start → Voreinstellungen → Allgemeine Voreinstellungen → Anfangsarbeitsordner). Wenn Sie eine ältere Version verwenden, können Sie den aktuellen Standardordner von MATLAB mit dem
userpath(newpath)
Befehl festlegen, in dem newpath der Pfad ist, den Sie kopiert haben. Beachten Sie, dass esnewpath
sich um einen String handeln sollte, dh umschlossen von'single straight apostrophes'
, also nicht die "doppelten Apostrophe", die Sie möglicherweise kopiert haben. Gelöst!
Der Befehlsverlauf (Zugriff durch Drücken ↑auf im Befehlsfenster) und der Editor (drücken Sie im Befehlsfenster Ctrl+ N, um ihn zu öffnen) wurden ebenfalls neu positioniert.
Es ist eine gute Idee, dieses Layout zu speichern, damit Sie leicht darauf zugreifen können, wenn sich etwas von jemandem oder jemandem geändert hat (z. B. wenn mehrere Benutzer dasselbe MATLAB mit unterschiedlichen Layouts verwenden). Gehen Sie dazu über die Multifunktionsleiste Registerkarte Start → Layout → Layout speichern → geben Sie Ihrem Layout einen Namen. Sie wird als .xml-Datei gespeichert, die <your layout name>MATLABLayout.xml
im MATLAB-Voreinstellungsverzeichnis aufgerufen wird, das Sie mit dem prefdir
Befehl finden können. Alle Voreinstellungen, Befehlsverläufe, Standardlayout usw. von MATLAB werden in diesem Verzeichnis gespeichert. Dies ist ein sehr nützliches Wissen für den zweiten Teil dieser Antwort!
Die meisten (wenn nicht alle) anderen Einstellungen werden dort ebenfalls gespeichert.
Nun, der zweite Teil meiner Antwort, der den zweiten Teil meiner Frage beantwortet.
Teil 2
Die benutzerdefinierten Einstellungen bleiben auf Computern erhalten, auf denen sie zurückgesetzt werden
Vor allem: Wenden Sie alle Ihre benutzerdefinierten Einstellungen an und speichern Sie ein Layout für Ihren gewünschten MATLAB-Desktop, wie in Teil 1 dieser Antwort beschrieben.
Jetzt werden wir zu klug verwenden startup.m
, finish.m
und ein paar .bat - Dateien.
startup.m
ist eine Datei, die, wenn sie im MATLAB-Pfad vorhanden ist, beim Start ausgeführt wird, bevor Sie die Kontrolle über das MATLAB-Fenster erlangen. Diese Datei ist ein Skript, mit dem Sie alles tun können. Wir werden es so einstellen, dass es folgendes tut:
- Legen Sie für den aktuellen Ordner das gewünschte Verzeichnis nach dem Start fest.
- Überschreiben Sie die Standardeinstellungen von MATLAB mit unseren eigenen, wie in Teil 1 dieser Antwort gespeichert.
- Stellen Sie unser eigenes MATLAB-Desktoplayout wieder her.
Die ersten beiden Schritte sind die einfachsten. In meinem Fall (auf meinen Arbeitscomputern) wurde der Standardpfad bei jedem Neustart des Computers einfach vergessen. Also habe ich ein Skript erstellt startup.m
und den folgenden Code eingefügt.
(das geht rein startup.m
)
%% set path p = 'C:\Whatever\path\you\want\as\your\default\Current Folder'; cd(p)
Leicht genug. Ersetzen p
Sie den aktuellen Ordner durch einen beliebigen Pfad.
Der zweite Schritt ist schwieriger. Es muss sowohl das Speichern als auch das Wiederherstellen aller Einstellungen im Voreinstellungsverzeichnis von MATLAB gespeichert werden, das mit dem prefdir
Befehl gefunden werden kann . Dafür verwenden wir finish.m
auch. Dies ist ein Skript, das automatisch ausgeführt wird, bevor MATLAB beendet wird. MATLAB kann auf verschiedene Arten beendet werden: Klicken Sie auf das ×Hauptfenster von MATLAB oder verwenden Sie den Befehl exit
oder quit
. Gut zu wissen: Wenn Sie MATLAB.exe über den Windows Task-Manager oder einen anderen Systembefehl, der den Prozess abbricht, beenden, finish.m
wird dies nicht ausgeführt. Vergewissern Sie sich, dass finish.m
sich der Pfad im MATLAB-Pfad befindet, oder fügen Sie den Pfad zum MATLAB-Pfad hinzu. Verwenden Sie dazu den addpath
obigen Codeausschnitt für startup.m
. Andernfalls finish.m
wird es nicht ausgeführt, wenn MATLAB beendet wird.
Wir werden finish.m
alle von Ihnen festgelegten oder geänderten Einstellungen und Ihre benutzerdefinierten Layouts in einen Ordner kopieren, für den Sie Berechtigungen haben. Der folgende Code tut dies.
(das geht rein finish.m
)
%% backup MATLAB preferences, etc., see also: startup.m p = 'path\to\your\preference backup folder'; copyfile([prefdir filesep '*'], p, 'f')
Dadurch werden alle Dateien im MATLAB-Voreinstellungsverzeichnis in den Sicherungsordner Ihrer Wahl kopiert. Wir fordern nun startup.m
auf, diese Dateien wiederherzustellen. Da es startup.m
vor allen anderen ausgeführt wird, werden alle gewünschten Einstellungen wiederhergestellt. Der folgende Code macht das für uns.
(das geht rein 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')
In diesem Code-Snippet p
muss dasselbe Verzeichnis wie p
in festgelegt werden finish.m
, sodass MATLAB weiß, von wo die Datei kopiert werden soll.
Der dritte Punkt auf unserer Liste ist der komplizierteste. Das einfache Kopieren der <your layout name>MATLABLayout.xml
Datei mit dem vorherigen Code-Snippet in das Einstellungsverzeichnis von MATLAB reicht nicht aus, um das Layout wiederherzustellen. Sie müssen es programmgesteuert wiederherstellen. Außerdem musste MATLAB in meiner Situation vor dem Anwenden des Layouts einen Neustart durchführen. Dies erfolgt mit den folgenden Schritten.
Ich habe eine Methode in undokumentiertem MATLAB gefunden, einer Website, auf der viele Funktionen von MATLAB beschrieben werden, die von den MATLAB-Entwicklern nicht dokumentiert oder unterstützt werden. Sie sind nicht einfach zu bedienen und können sich seltsam verhalten, aber sie können sehr mächtige Dinge tun.
Mit dem folgenden Code wird das Layout wiederhergestellt, unter dem Sie zuvor gespeichert hatten <your layout name>MATLABLayout.xml
.
(das geht rein startup.m
)
%% restore your custom layout layoutName = '<your layout name>'; desktop = com.mathworks.mde.desk.MLDesktop.getInstance; desktop.restoreLayout(layoutName);
Legen Sie fest, layoutName
wie Sie Ihr Layout benannten. Nun zum neu gestarteten MATLAB-Teil.
Denken Sie daran, dass die Einstellungen von MATLAB bei jedem Neustart des Computers an meinem Arbeitsplatz zurückgesetzt werden. Der Standard-MATLAB-Pfad (der mit dem path
Befehl gefunden werden kann ) enthält nur Verzeichnisse, für die ich keine Schreibberechtigung habe. Das bedeutet, dass ich nicht setzen kann startup.m
und finish.m
dem MATLAB - Pfad auf, so dass nach einem Neustart sie noch da sind. Wie löse ich das? Ich verwende einen ordentlichen MATLAB.exe-Befehlszeilentrick, um startup.m
in einen Ordner im MATLAB-Pfad zu kopieren und dann startup.m
manuell auszuführen .
Die Verknüpfung zu MATLAB in meinem Startmenü wird auch nach einem Neustart zurückgesetzt. Daher verwende ich eine .bat-Datei auf meinem Desktop, um MATLAB wie folgt auszuführen.
(Dies geht in MATLAB.bat
den Ordner, der überall dort abgelegt werden kann, wo Sie einfachen Zugriff haben, z. B. auf den Windows-Desktop oder einen persönlichen Ordner)
@echo off start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot), startup"
Dadurch wird MATLAB ausgeführt. Außerdem weist das -r
MATLAB an, nach dem Start des Startvorgangs das auszuführen, was als Nächstes zwischen den "doppelten Apostrophen" erscheint (auch nach dem Ausführen startup.m
, falls vorhanden, was in meiner Situation nicht der Fall ist). Der Teil zwischen den Apostrophen ist MATLAB-Code, der MATLAB anweist, das von startup.m
uns erstellte Skript an eine Stelle im MATLAB-Pfad zu kopieren, in diesem Fall matlabroot
. Dies kann ein beliebiges anderes Verzeichnis im Standard-MATLAB-Pfad sein, oder Sie können addpath('path\to\add')
einen beliebigen Pfad zum MATLAB-Pfad hinzufügen. Dies könnte den Pfad zu unserem hinzufügen startup.m
. Der letzte Befehl zwischen den Apostrophen ist einfach ein Aufruf von startup.m
, also wird er ausgeführt.
Jetzt legt das Skript den gewünschten Pfad, die Einstellungen und das Layout fest. Ein Problem besteht weiterhin: MATLAB benötigt einen Neustart, um das Layout tatsächlich zu ändern. Dies geschieht mit startup.m
, finish.m
und eine zweite .bat Datei.
Die zweite .bat-Datei beendet MATLAB über die Befehlszeile und startet MATLAB erneut. startup.m
muss wissen, dass es zuerst gestartet wurde und dann diese .bat-Datei ausführt. finish.m
muss dieses Wissen klären. Hier ist was ich getan habe.
(das geht rein restartup.bat
)
@echo off taskkill /f /pid %1 start path\to\matlab.exe -r "copyfile('path\to\startup.m', matlabroot)"
Wie Sie sehen, taskkill
wird ein Prozess mit einer noch unbekannten ( %1
) Prozess-ID ( /pid
) abgebrochen . Diese ID wird beim Aufruf dieser .bat-Datei von bereitgestellt startup.m
. Dieser Aufruf darf jedoch nicht erfolgen, wenn MATLAB bereits neu gestartet wurde, um das Layout und die Voreinstellungen wiederherzustellen. Also startup.m
muss eine Erinnerung daran erstellt werden, dass es bereits läuft. Ich habe das wie folgt gemacht.
(das geht rein 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
Der Speicher, den ich angegeben habe, startup.m
ist eine Datei, die, falls vorhanden, den Neustart von MATLAB verhindert. Diese Datei wird aufgerufen name
. Die aktuelle Prozess-ID von MATLAB wird mit erhalten num2str(feature('getpid'))
. Dies wird wiederum an den Aufruf von übergeben restartup.bat
, wodurch der MATLAB-Prozess beendet wird. Denken Sie daran, dass dieser Kill nicht ausgelöst finish.m
wird. Daher löschen wir die Speicherdatei in diesem Skript. Wenn MATLAB normal beendet wird, verschwindet die Speicherdatei, und MATLAB weiß, dass er beim nächsten Start neu gestartet wird.
(das geht rein finish.m
)
%% delete memory file from startup.m f = 'path\to\hasStartedUp'; if exist(f,'file') delete(f) end
Bonus für das lange Lesen: Lesen Sie hier, wie Sie die startup.m
Standardwerte in der linken Bildschirmhälfte geöffnet haben. Nun kann das Hauptfenster von MATLAB gut auf der rechten Bildschirmhälfte platziert werden, und Figurenfenster überlappen es nicht (was standardmäßig der Fall ist).
Jetzt habe ich meine beiden Fragen gelöst und deshalb beantwortet! Ich verstehe, dass dies eine ziemlich ausführliche Antwort ist und daher eine schwierige Lektüre ist. Sie können also gerne Fragen stellen und Kommentare mit Anregungen posten, um meine Methoden zu verbessern.