У меня два вопроса (и ответы на них). Я мог бы сделать два отдельных вопроса и ответы на них, но я не буду, потому что второй вопрос такой же, как первый, но с изюминкой. Две части ответа, которые я публикую ниже, решают обе части вопроса. Поэтому я решил оставить это в одном вопросе.

Часть 1

Изменение стандартного макета MATLAB

По умолчанию макет MATLAB (при первом запуске) является ИМХО весьма недружественным для пользователя. Это может быть хорошо для новичков, но суперпользователи (как вы и я) не хотят постоянно видеть некоторые элементы окна MATLAB (называемые рабочим столом). Вот как по умолчанию выглядит MATLAB R2014a (и в основном более новые версии):

Посмотрим, что с ним не так, ИМХО

  1. Окно не расположено правильно: оно не использует полный экран, и при этом оно не использует практическую часть (например, левую, верхнюю, нижнюю или правую половину) экрана. Давайте это исправим.
  2. Лента (верхняя часть окна MATLAB, содержащая вкладки «Домой», «Графики» и «Приложения») развернута, что мне больше всего не нужно. Поэтому я хочу свернуть его, чтобы сохранить некоторые свойства экрана.
  3. Панель «Текущая папка» слева развернута, в которой я не нуждаюсь большую часть времени, но если она развернута, то там большую часть времени. Поэтому большую часть времени он использует драгоценный экран, например ленту.
  4. Правая панель, Рабочая область, очень полезна, если вы выполняете вычисления непосредственно в Командном окне (средняя панель), и вам необходимо отслеживать, какие у вас переменные и т.д. Однако во время написания или написания функций с использованием редактора (не отображается). в окне по умолчанию). Вам не нужно так много Workspace, потому что ваши переменные могут быть довольно абстрактными. Хотя отладка Workspace может быть удобной, но я обычно ее свертываю, чтобы сохранить больше экранного состояния. Вместо рабочей области я использую команду whos в окне команд, чтобы вывести список всех моих переменных. Совет от профессионала: для перечисления всех переменных, начинающихся, например, с «x», используйте whos x* .
  5. «Новичок в MATLAB? ... подсказка в верхней части окна командной строки меня раздражает, потому что я абсолютно не новичок в MATLAB. Подобные жёлтые подсказки появляются, когда вы открываете другие панели или окна.
  6. Текущая папка (отличающаяся для всех по умолчанию MATLAB) не является практической папкой. Я хочу, чтобы по умолчанию это была папка, в которой я на самом деле храню свою работу.

Возможно, есть еще вещи, которые вы или я не хотели бы или хотели бы изменить, но давайте исправим эти шесть проблем, см. Часть 1 моего ответа ниже для моего решения.


Часть 2

Сохранение пользовательских настроек на компьютерах, которые их сбрасывают

Дополнительная проблема, с которой я столкнулся, была не решена в части 1 моего ответа. Я полагаю, что проблема возникает с большим количеством людей, которые используют MATLAB на компьютере, администратором которого они не являются, то есть у них, возможно, нет повышенных разрешений. Это означает, что они не могут редактировать настройки системы и, возможно, не могут редактировать настройки MATLAB, как это происходит в моем случае. Я использую MATLAB на рабочем компьютере на очень большом рабочем месте. Каждый компьютер имеет виртуальное рабочее пространство, в которое пользователи входят. Большинство дисков являются виртуальными: каталог установки MATLAB находится на одном из этих дисков. Через Windows Explorer я даже не вижу диск! Кроме того, ярлык MATLAB указывает на другую программу, которую мое рабочее место использует для вызова любого программного обеспечения, на которое у пользователя есть лицензия, а не непосредственно на MATLAB.exe в папке установки MATLAB. Однако существует команда MATLAB, которая открывает корневую папку MATLAB, matlabroot .

Проблема, с которой я столкнулся после установки своего рабочего стола MATLAB так, как мне нравилось (см. Скриншот в моем ответе ниже), заключалась в том, что после каждой перезагрузки макет возвращался к недружественному макету по умолчанию. Я перезагружаюсь, по крайней мере, один раз в день, так что это означает, что мои настройки MATLAB и макет сбрасываются каждый раз. Это может быть не проблемой для вас, но для суперпользователя, который использует некоторые пользовательские настройки, макеты и т.д., Это проблема. Я решил это во второй части моего ответа, см. Ниже.

1 ответ1

0

Часть 1

Изменение стандартного макета MATLAB

Мы решили шесть перечисленных проблем, изменив макет рабочего стола на тот, который нам больше нравится. Я использую макет, который выглядит так по умолчанию:

Окно MATLAB по умолчанию при первом запуске

Давайте воспроизведем это.

  1. Просто перетащите главное окно MATLAB туда, где вы хотите, например, разверните его. Решено!
  2. Щелкните значок стрелки прямо под красным выходом × в верхнем правом углу окна MATLAB, чтобы свернуть ленту. Решено!
  3. Перетащите заголовок панели "Текущая папка" (той части, где написано "Текущая папка") в нужное место. Вы можете положить его практически в любом месте. При перетаскивании вы видите тень панели, где она будет расположена, когда вы отпустите кнопку мыши. Вы можете расположить панель в другом месте или перетащить ее в верхний левый, левый верхний, правый верхний, верхний, нижний или любой другой заголовок другой панели, чтобы создать панель текущей папки с вкладками, которая по умолчанию закрыта. MATLAB называет это минимизированным. Когда панель свернута, она занимает гораздо меньше места и может быть открыта, нажав на вкладку или наведя курсор мыши на вкладку. Другое решение - полностью закрыть панель, удалив ее с рабочего стола MATLAB. Это можно сделать, сначала отсоединив панель, щелкнув правой кнопкой мыши заголовок → щелкните "Отменить" (или нажав Ctrl+Shift+U). Это открывает панель в отдельном окне. Закройте окно, и оно исчезнет. Если вы случайно потеряли подобное окно, вы можете восстановить его с помощью вкладки "Главная" главной ленты → нажмите "Макет" → снова включить текущую папку. Чтобы снова закрепить окно, нажмите на крошечную стрелку в верхнем правом углу окна панели → щелкните Dock (или нажмите Ctrl+Shift+D). Я поместил текущую папку в левую верхнюю вкладку.
  4. Я поместил Рабочую область рядом с вкладкой Текущая папка. Решено!
  5. Просто нажмите на × справа на панели желтого наконечника.
  6. Выберите папку, которую вы хотите использовать по умолчанию, и перейдите к ней, используя панель "Текущая папка" или адресную строку (на снимке экрана выше, это раскрывающийся список прямо под лентой с надписью ► 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. Этот файл представляет собой скрипт, который можно использовать для любых действий. Мы установим его так, чтобы:

  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 или использовать команду 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 может удобно располагаться на правой половине экрана, и окна рисунков не перекрывают его (что они и делают по умолчанию).


Теперь я решил и поэтому ответил на два моих вопроса! Я понимаю, что это довольно сложный ответ и, следовательно, трудное чтение, поэтому не стесняйтесь задавать любые вопросы и оставлять комментарии с предложениями с дальнейшим улучшением моих методов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .