Parte 1

Parte 1

Tenho duas perguntas (e respostas para elas). Eu poderia fazer duas perguntas e respostas separadas, mas não o farei, porque a segunda pergunta é igual à primeira, mas com uma diferença. As duas partes da resposta que posto abaixo resolvem ambas as partes da questão. Então optei por manter isso em uma única sessão de perguntas e respostas.

Parte 1

Alterando o layout padrão do MATLAB

O layout padrão do MATLAB (na primeira inicialização) éNa minha humilde opiniãobastante hostil ao usuário. Pode ser bom para iniciantes, mas superusuários (como você e eu) não querem ver permanentemente alguns dos elementos da janela do MATLAB (chamada de área de trabalho). Esta é a aparência do MATLAB R2014a (e também das versões mais recentes, principalmente) por padrão:

insira a descrição da imagem aqui

Vamos ver o que há de errado com isso, IMHO:

  1. A janela não está bem posicionada: ela não usa a tela inteira, nem usa uma fração prática (por exemplo, a metade esquerda, superior, inferior ou direita) da tela. Vamos consertar isso.
  2. A faixa de opções (a parte superior da janela do MATLAB que contém as guias Home, Plots e Apps) é expandida, o que não preciso na maioria das vezes. Então eu quero recolhê-lo para salvar algunspropriedade da tela.
  3. O painel Pasta Atual à esquerda está expandido, o que não preciso na maioria das vezes, mas se for expandido, ele estará lá na maior parte do tempo. Então, na maioria das vezes, ele usa um espaço precioso na tela, como a faixa de opções.
  4. O painel direito, o Espaço de Trabalho, é muito útil se você fizer cálculos diretamente na Janela de Comando (painel do meio) e precisar acompanhar quais são suas variáveis, etc. No entanto, ao criar scripts ou escrever funções usando o Editor (não visível na janela padrão). Você não precisa muito do Workspace, porque suas variáveis ​​podem ser bastante abstratas. Embora a depuração do espaço de trabalho possa ser útil, normalmente eu o retraio para economizar mais espaço na tela. Em vez do espaço de trabalho, uso o whoscomando na janela de comando para listar todas as minhas variáveis. Dica profissional: para listar todas as variáveis ​​que começam com, por exemplo, um 'x', use whos x*.
  5. O 'Novo no MATLAB? ...' no topo da janela de comando me irrita, porque não sou absolutamente novo no MATLAB. Existem mais dicas amarelas como essas quando você abre outros painéis ou janelas.
  6. A pasta atual (diferente para o MATLAB padrão de todos) não é uma pasta prática. Quero que o padrão seja a pasta em que realmente armazeno meu trabalho.

Provavelmente há mais coisas que você ou eu não gostamos ou queremos alterar, mas vamos corrigir esses seis problemas. Consulte a Parte 1 da minha resposta abaixo para ver minha solução.


Parte 2

Fazendo com que as configurações personalizadas persistam em computadores que as reiniciam

Um problema adicional que encontrei com os problemas acima não foi resolvido pela Parte 1 da minha resposta. O problema, imagino, acontece com mais pessoas que usam o MATLAB em um computador do qual não são administradores, ou seja, possivelmente não possuem permissões elevadas. Isso significa que eles não podem editar as configurações do sistema e possivelmente também não podem editar as configurações do MATLAB, como acontece no meu caso. Eu uso o MATLAB em um computador de trabalho em um local de trabalho muito grande. Cada computador possui um espaço de trabalho virtual no qual os usuários fazem login. A maioria das unidades são virtuais: o diretório de instalação do MATLAB está em uma dessas unidades. Através do Windows Explorer não consigo nem ver a unidade! Além disso, o atalho para o MATLAB aponta para um programa diferente que meu local de trabalho usa para chamar qualquer software que o usuário esteja licenciado para usar, não diretamente para MATLAB.exe na pasta de instalação do MATLAB. No entanto, existe um comando MATLAB que revela a pasta raiz do MATLAB, matlabroot.

O problema que tive depois de configurar minha área de trabalho MATLAB da maneira que gostei (veja a captura de tela na minha resposta abaixo) foi que o layout reverteu para o layout padrão hostil após cada reinicialização. Eu reinicio pelo menos uma vez por dia, o que significa que minhas configurações e layout do MATLAB são redefinidos todas as vezes. Isso pode não ser um problema para você, mas para um superusuário que usa algumas configurações personalizadas, layouts, etc., isso é um problema. Eu resolvi isso na Parte 2 da minha resposta, veja abaixo.

Responder1

Parte 1

Alterando o layout padrão do MATLAB

Resolvemos os seis problemas listados alterando o layout da área de trabalho para o que preferirmos. Eu uso um layout parecido com este por padrão:

Janela padrão do MATLAB na primeira inicialização

Vamos reproduzir isso.

  1. Simplesmente arraste a janela principal do MATLAB para onde desejar, por exemplo, maximize-a. Resolvido!
  2. Clique no ícone de seta logo abaixo da saída vermelha ×no canto superior direito da janela do MATLAB para recolher a faixa de opções. Resolvido!
  3. Arraste o título do painel Pasta Atual (a parte onde diz Pasta Atual) para onde desejar. Você pode colocá-lo em quase qualquer lugar. Ao arrastar, você verá a sombra do painel onde ele será posicionado quando você soltar o botão do mouse. Você pode posicionar o painel em outro lugar ou arrastá-lo para o canto superior esquerdo, superior esquerdo, superior direito, superior, inferior ou qualquer outro título do painel para criar um painel Pasta Atual com guias que é fechado por padrão. O MATLAB chama isso de minimizado. Quando um painel é minimizado, ele ocupa muito menos espaço e pode ser aberto clicando na guia ou passando o mouse sobre a guia. Outra solução é fechar completamente o painel, removendo-o da área de trabalho do MATLAB. Isso pode ser feito primeiro desencaixando o painel clicando com o botão direito no título → clique em Desencaixar (ou pressionando Ctrl+ Shift+ U). Isso abre o painel em uma janela separada. Feche a janela e ela desaparecerá. Se você perder acidentalmente uma janela como esta, poderá restaurá-la através da guia Início da faixa principal → clicar em Layout → ativar a Pasta Atual novamente. Para encaixar a janela novamente, clique na pequena seta no canto superior direito da janela do painel → clique em Dock (ou pressionando Ctrl+ Shift+ D). Coloquei a Pasta Atual em uma aba no canto superior esquerdo.
  4. Coloquei o espaço de trabalho próximo à guia Pasta Atual. Resolvido!
  5. Basta clicar ×à direita na barra da ponta amarela.
  6. Escolha uma pasta que você deseja usar como padrão e navegue até ela usando o painel Pasta Atual ou a barra de endereço (na captura de tela acima, é a lista suspensa logo abaixo da faixa de opções que diz ► C: ►). Para definir este como caminho padrão, copie o endereço primeiro. Acredito que nas versões do MATLAB desde R2014b você pode definir a pasta atual padrão nas preferências do MATLAB (encontre-a na faixa de opções, guia Home → Preferências → Preferências gerais → Pasta de trabalho inicial). Se você estiver em uma versão mais antiga, poderá definir a pasta atual padrão do MATLAB usando ouserpath(newpath)comando, em que newpath é o caminho que você copiou. Observe que newpathdeve ser uma string, ou seja, delimitada por 'single straight apostrophes', portanto não os "apóstrofos duplos" que você pode ter copiado. Resolvido!

O Histórico de Comandos (acessado pressionando na Janela de Comando) e o Editor (pressione Ctrl+ Nna Janela de Comando para abri-lo) também foram reposicionados.

É uma boa ideia salvar este layout, para que você possa facilmente mudar para ele se algo for alterado por algo ou alguém (por exemplo, quando vários usuários usam o mesmo MATLAB com layouts diferentes). Faça isso através da guia Página inicial → Layout → Salvar layout → dê um nome ao seu layout. Ele é salvo como um arquivo .xml chamado <your layout name>MATLABLayout.xmlno diretório de preferências do MATLAB, que você pode encontrar com o prefdircomando. Todas as preferências do MATLAB, histórico de comandos, layout padrão, etc. são armazenados neste diretório. Este é um conhecimento muito útil para a segunda parte desta resposta!

A maioria (se não todas) das outras preferências também são armazenadas lá.


Agora, a segunda parte da minha resposta, que responde à Parte 2 da minha pergunta.

Parte 2

Fazendo com que as configurações personalizadas persistam em computadores que as reiniciam

Antes de tudo: aplique todas as suas configurações personalizadas e salve um layout para a área de trabalho MATLAB desejada, conforme descrito na Parte 1 desta resposta.

Agora, usaremos habilmente startup.m, finish.me alguns arquivos .bat.

startup.mé um arquivo que, se presente no caminho do MATLAB, é executado na inicialização antes de você obter controle sobre a janela do MATLAB. Este arquivo é um script que pode ser usado para fazer qualquer coisa. Vamos configurá-lo de uma forma que fará o seguinte:

  1. Defina a pasta atual para qualquer diretório que desejarmos após a inicialização.
  2. Substitua as preferências padrão do MATLAB pelas nossas, conforme salvas na Parte 1 desta resposta.
  3. Restaure nosso próprio layout de desktop MATLAB.

As duas primeiras etapas são as mais fáceis. No meu caso (no(s) meu(s) computador(es) de trabalho), o caminho padrão simplesmente era esquecido toda vez que o computador era reiniciado. Então fiz um script startup.me coloquei o seguinte código nele.

(isso entra startup.m)

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

Bastante fácil. Substitua ppor qualquer caminho para a pasta atual desejada.

A segunda etapa é mais difícil. Requer salvar e restaurar todas as configurações no diretório de preferências do MATLAB, que pode ser encontrado usando o prefdircomando. Para isso, usamos finish.mtambém. Este é um script que é executado automaticamente logo antes da saída do MATLAB. O MATLAB pode ser encerrado de algumas maneiras: clique na ×janela principal do MATLAB ou use o comando exitou quit. É bom saber: se você encerrar o MATLAB.exe por meio do Gerenciador de Tarefas do Windows ou por meio de um comando de sistema diferente que elimine o processo, finish.mele não será executado. Certifique-se finish.mde que esteja no caminho MATLAB ou adicione o caminho ao caminho MATLAB usando addpatho trecho de código acima para startup.m. Caso contrário, finish.mnão será executado quando o MATLAB for encerrado.

Faremos finish.muma cópia de todas as preferências que você possa ter definido ou alterado e seu(s) layout(s) personalizado(s) para uma pasta para a qual você tenha permissão. O código a seguir faz isso.

(isso entra finish.m)

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

Isso copia todos os arquivos no diretório de preferências do MATLAB para a pasta de backup de sua escolha. Agora dizemos startup.mpara restaurar esses arquivos. Como startup.mé executado antes de mais nada, ele restaura perfeitamente todas as configurações que desejamos. O código a seguir faz isso para nós.

(isso entra 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')

Neste trecho de código pdeve ser definido para o mesmo diretório que pem finish.m, para que o MATLAB saiba de onde copiar o arquivo.

O terceiro item da nossa lista é o mais complicado. Simplesmente copiar o <your layout name>MATLABLayout.xmlarquivo usando o trecho de código anterior para o diretório de preferências do MATLAB não é suficiente para restaurar o layout. Você precisa restaurá-lo programaticamente. Além disso, na minha situação, o MATLAB exigiu uma reinicialização antes que o layout fosse aplicado. Isso será feito com as etapas a seguir.

Eu encontrei um método emMATLAB não documentado, um site que descreve muitas das funções do MATLAB que não são documentadas ou suportadas pelos desenvolvedores do MATLAB. Eles não são fáceis de usar e podem se comportar de maneira estranha, mas podem fazer coisas muito poderosas.

O código a seguir restaura o layout que você salvou anteriormente como <your layout name>MATLABLayout.xml.

(isso entra startup.m)

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

Defina layoutNameo nome que você deu ao seu layout. Agora vamos para a parte de reiniciar o MATLAB.

Lembre-se de que as preferências do MATLAB são redefinidas sempre que reinicio o computador no meu local de trabalho. O caminho padrão do MATLAB (que pode ser encontrado usando o pathcomando) inclui apenas diretórios nos quais não tenho permissão para gravar. Isso significa que não posso colocar startup.me finish.mno caminho do MATLAB, de modo que após uma reinicialização eles ainda estejam lá. Como faço para resolver isso? Eu uso o truque de linha de comando do MATLAB.exe para copiar startup.mpara uma pasta no caminho do MATLAB e depois executo startup.mmanualmente.

O atalho para o MATLAB no meu menu Iniciar também é redefinido após uma reinicialização, então uso um arquivo .bat na minha área de trabalho para executar o MATLAB da seguinte maneira.

(isso vai para MATLAB.bat, que pode ser colocado em qualquer lugar de fácil acesso, por exemplo, na área de trabalho do Windows ou em uma pasta pessoal)

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

Isso executará o MATLAB. Além disso, -rdiz ao MATLAB para executar o que vier a seguir entre os "apóstrofos duplos" depois de terminar a inicialização (mesmo depois de executar startup.m, se existir, o que não é o caso na minha situação). A parte entre os apóstrofos é o código MATLAB que diz ao MATLAB para copiar o startup.mscript que criamos para um local no caminho do MATLAB, neste caso matlabroot. Este pode ser qualquer outro diretório no caminho padrão do MATLAB ou você pode usar addpath('path\to\add')para adicionar qualquer caminho ao caminho do MATLAB. Isso poderia adicionar o caminho ao nosso arquivo startup.m. O último comando entre os apóstrofos é simplesmente uma chamada de startup.m, então ele é executado.

Agora, o script definirá o caminho, as configurações e o layout desejados. Um problema ainda persiste: o MATLAB precisa ser reiniciado para realmente alterar o layout. Isso é feito usando startup.me finish.mum segundo arquivo .bat.

O segundo arquivo .bat encerrará o MATLAB por meio da linha de comando e iniciará o MATLAB novamente. startup.mdeve saber que foi iniciado primeiro e depois executar este arquivo .bat. finish.mdeve limpar esse conhecimento. Aqui está o que eu fiz.

(isso entra restartup.bat)

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

Como você pode ver, taskkillmatará um processo com um %1ID de processo ainda desconhecido ( ) ( /pid). Este ID será fornecido na chamada deste arquivo .bat por startup.m. Porém, esta chamada não deve acontecer se o MATLAB já tiver sido reiniciado para restaurar o layout e as preferências. Portanto, startup.mdeve-se criar uma memória de que ele já está sendo executado. Eu fiz isso da seguinte maneira.

(isso entra 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

A memória que forneci startup.mé um arquivo que, se existir, impede o reinício do MATLAB. Este arquivo é chamado name. O ID do processo atual do MATLAB é obtido com num2str(feature('getpid')). Isso, por sua vez, é passado para a chamada de restartup.bat, que por sua vez mata o processo MATLAB. Lembre-se de que este kill não invoca finish.m, então excluímos o arquivo de memória nesse script, portanto, se o MATLAB for encerrado normalmente, o arquivo de memória desaparecerá e o MATLAB saberá que deve reiniciar na próxima vez que for executado.

(isso entra finish.m)

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

Bônus pela longa leitura:leia aquicomo editei startup.mpara abrir figuras padrão na metade esquerda da tela. Agora, a janela principal do MATLAB pode ficar bem na metade direita da tela e as janelas de figura não se sobrepõem a ela (o que acontece, por padrão).


Agora resolvi e, portanto, respondi às minhas duas perguntas! Entendo que esta é uma resposta bastante elaborada e, portanto, uma leitura difícil, então fique à vontade para fazer qualquer pergunta e postar comentários com sugestões para melhorar ainda mais meus métodos.

informação relacionada