
У меня два вопроса (и ответы на них). Я мог бы сделать два отдельных вопроса и ответа на них, но не буду, потому что второй вопрос такой же, как и первый, но с изюминкой. Две части ответа, которые я публикую ниже, решают обе части вопроса. Поэтому я решил сохранить это как один вопрос и ответ.
Часть 1
Изменение макета MATLAB по умолчанию
Макет MATLAB по умолчанию (при первом запуске) следующий:ИМХОДовольно недружелюбно к пользователю. Это может быть нормально для новичков, но суперпользователи (такие как вы и я) не хотят постоянно видеть некоторые элементы окна MATLAB (называемые рабочим столом). Вот как MATLAB R2014a (и более новые версии, в основном) выглядит по умолчанию:
Давайте посмотрим, что с ним не так, ИМХО:
- Окно расположено неудачно: оно не использует весь экран, и не использует практическую часть (например, левую, верхнюю, нижнюю или правую половину) экрана. Давайте это исправим.
- Лента (верхняя часть окна MATLAB, содержащая вкладки Home, Plots и Apps) развернута, что мне не нужно большую часть времени. Поэтому я хочу свернуть ее, чтобы сэкономить немногоэкран недвижимости.
- Панель «Текущая папка» слева развернута, что мне не нужно большую часть времени, но если развернута, то она там большую часть времени. Так что большую часть времени она использует драгоценное пространство экрана, как лента.
- Правая панель, рабочая область, очень полезна, если вы выполняете вычисления непосредственно в командном окне (средняя панель) и вам нужно отслеживать, что представляют собой ваши переменные и т. д. Однако при написании скриптов или функций с использованием редактора (не отображается в окне по умолчанию) рабочая область вам не так уж и нужна, потому что ваши переменные могут быть довольно абстрактными. Во время отладки рабочая область может быть удобна, однако я обычно сворачиваю ее, чтобы сэкономить немного места на экране. Вместо рабочей области я использую команду
whos
в командном окне, чтобы вывести список всех моих переменных. Совет профессионала: чтобы вывести список всех переменных, начинающихся, например, с «x», используйтеwhos x*
. - Подсказка «Новичок в MATLAB? ...» в верхней части окна команд раздражает меня, потому что я совсем не новичок в MATLAB. Еще больше желтых подсказок, подобных этим, появляются, когда вы открываете какие-то другие панели или окна.
- Текущая папка (разная для MATLAB по умолчанию у всех) не является практичной папкой. Я хочу, чтобы по умолчанию она была папкой, в которой я фактически храню свою работу.
Вероятно, есть еще что-то, что вам или мне не нравится или что вы хотели бы изменить, но давайте исправим эти шесть проблем. Решение см. в Части 1 моего ответа ниже.
Часть 2
Сохранение пользовательских настроек на компьютерах, на которых они были сброшены
Дополнительная проблема, с которой я столкнулся в связи с вышеуказанными проблемами, не была решена Частью 1 моего ответа. Я полагаю, что проблема возникает у большего количества людей, которые используют MATLAB на компьютере, администратором которого они не являются, т. е. у них, возможно, нет повышенных прав. Это означает, что они не могут редактировать системные настройки и, возможно, не могут редактировать настройки MATLAB, как это происходит в моем случае. Я использую MATLAB на рабочем компьютере в очень большом офисе. У каждого компьютера есть виртуальное рабочее пространство, в которое пользователи входят. Большинство дисков являются виртуальными: каталог установки MATLAB находится на одном из этих дисков. Через проводник Windows я даже не вижу этот диск! Кроме того, ярлык MATLAB указывает на другую программу, которую мое рабочее место использует для вызова любого программного обеспечения, на использование которого у пользователя есть лицензия, а не напрямую на MATLAB.exe в папке установки MATLAB. Однако существует команда MATLAB, которая показывает корневую папку MATLAB, matlabroot
.
Проблема, с которой я столкнулся после настройки рабочего стола MATLAB так, как мне нравилось (см. скриншот в моем ответе ниже), заключалась в том, что макет возвращался к недружелюбному макету по умолчанию после каждой перезагрузки. Я перезагружаюсь как минимум раз в день, так что это означает, что мои настройки и макет MATLAB сбрасываются каждый раз. Для вас это может не быть проблемой, но для суперпользователя, который использует некоторые пользовательские настройки, макеты и т. д., это проблема. Я решил ее во второй части своего ответа, см. ниже.
решение1
Часть 1
Изменение макета MATLAB по умолчанию
Мы решаем шесть перечисленных проблем, изменяя макет рабочего стола на тот, который нам больше нравится. Я использую макет, который выглядит так по умолчанию:
Давайте воспроизведем это.
- Просто перетащите главное окно MATLAB в нужное место, например, разверните его. Решено!
- Щелкните значок стрелки прямо под красным выходом ×в правом верхнем углу окна MATLAB, чтобы свернуть ленту. Решено!
- Перетащите заголовок панели Current Folder (часть, где написано Current Folder) в любое место. Вы можете разместить его практически где угодно. Во время перетаскивания вы видите тень панели, где она будет расположена, когда вы отпустите кнопку мыши. Вы можете расположить панель в другом месте или перетащить ее в верхний левый угол, левый верхний угол, правый верхний угол, верхний угол, нижний угол или в любой из заголовков других панелей, чтобы создать панель Current Folder с вкладками, которая по умолчанию закрыта. MATLAB называет это свернутой. Когда панель свернута, она занимает гораздо меньше места и может быть открыта либо щелчком по вкладке, либо наведением указателя мыши на вкладку. Другое решение — полностью закрыть панель, удалив ее с рабочего стола MATLAB. Это можно сделать, сначала открепив панель, щелкнув правой кнопкой мыши по заголовку → щелкнув Undock (или нажав Ctrl+ Shift+ U). Это откроет панель в отдельном окне. Закройте окно, и она исчезнет. Если вы случайно потеряете такое окно, вы можете восстановить его через вкладку «Главная» на главной ленте → нажмите «Макет» → снова включите «Текущую папку». Чтобы снова закрепить окно, нажмите на маленькую стрелку в правом верхнем углу окна панели → нажмите «Закрепить» (или нажмите Ctrl+ Shift+ D). Я поместил «Текущую папку» на вкладку в левом верхнем углу.
- Я разместил Workspace рядом с вкладкой Current Folder. Решено!
- Просто нажмите на значок ×справа на желтой панели подсказок.
- Выберите папку, которую вы хотите использовать по умолчанию, и перейдите к ней с помощью панели «Текущая папка» или адресной строки (на снимке экрана выше это выпадающий список прямо под лентой, на котором написано ► C: ►). Чтобы установить это как путь по умолчанию, сначала скопируйте адрес. Я считаю, что в версиях MATLAB, начиная с R2014b, вы можете установить текущую папку по умолчанию в настройках MATLAB (их можно найти на вкладке «Главная» ленты → «Настройки» → «Общие настройки» → «Начальная рабочая папка»). Если вы используете более старую версию, вы можете установить текущую папку MATLAB по умолчанию с помощью
userpath(newpath)
команда, в которой newpath — это скопированный вами путь. Обратите внимание, что этоnewpath
должна быть строка, т. е. заключенная в'single straight apostrophes'
, а не "двойные апострофы", которые вы могли скопировать. Решено!
История команд (доступ к которой осуществляется нажатием ↑в окне команд) и редактор (нажмите Ctrl+ Nв окне команд, чтобы открыть его) также были перемещены.
Хорошей идеей будет сохранить эту компоновку, чтобы вы могли легко переключиться на нее, если что-то изменится кем-то или чем-то (например, когда несколько пользователей используют один и тот же MATLAB с разными компоновками). Сделайте это через вкладку ленты Главная → Компоновка → Сохранить компоновку → дайте вашей компоновке имя. Она сохраняется как файл .xml, который называется <your layout name>MATLABLayout.xml
в каталоге настроек MATLAB, который вы можете найти с помощью prefdir
команды. Все настройки MATLAB, история команд, компоновка по умолчанию и т. д. хранятся в этом каталоге. Это очень полезные знания для второй части этого ответа!
Там же хранятся и большинство (если не все) других настроек.
Теперь вторая часть моего ответа, которая отвечает на Часть 2 моего вопроса.
Часть 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
. Полезно знать: если вы убьете MATLAB.exe через диспетчер задач Windows или с помощью другой системной команды, которая убивает процесс, finish.m
он не запустится. Убедитесь, что finish.m
находится в пути MATLAB, или добавьте путь к нему в путь 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 нуждается в перезапуске, чтобы фактически изменить макет. Это делается с помощью startup.m
, finish.m
и второго .bat-файла.
Второй .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)"
Как вы можете видеть, taskkill
убьет процесс с пока неизвестным ( %1
) идентификатором процесса ( /pid
). Этот идентификатор будет предоставлен в вызове этого .bat-файла startup.m
. Однако этот вызов не должен происходить, если MATLAB уже был перезапущен для восстановления макета и настроек. Поэтому 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 получается с помощью 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 может удобно располагаться на правой половине экрана, а окна фигур не перекрывают его (что они делают по умолчанию).
Теперь я решил и, следовательно, ответил на свои два вопроса! Я понимаю, что это довольно подробный ответ и, следовательно, его трудно читать, поэтому не стесняйтесь задавать любые вопросы и оставлять комментарии с предложениями по дальнейшему улучшению моих методов.