Parte 1

Parte 1

Tengo dos preguntas (y sus respuestas). Podría hacer dos preguntas y respuestas separadas, pero no lo haré, porque la segunda pregunta es igual a la primera, pero con un giro. Las dos partes de la respuesta que publico a continuación resuelven ambas partes de la pregunta. Así que elegí mantener esto como una sola sesión de preguntas y respuestas.

Parte 1

Cambiar el diseño predeterminado de MATLAB

El diseño predeterminado de MATLAB (en el primer inicio) esEn mi humilde opiniónbastante hostil para el usuario. Puede que esté bien para principiantes, pero los superusuarios (como usted y yo) no queremos ver permanentemente algunos de los elementos de la ventana de MATLAB (llamado escritorio). Así es como se ve MATLAB R2014a (y también las versiones más recientes, en su mayoría) de forma predeterminada:

ingrese la descripción de la imagen aquí

Veamos qué tiene de malo, en mi humilde opinión:

  1. La ventana no está bien posicionada: no usa la pantalla completa, ni usa una fracción práctica (por ejemplo, la mitad izquierda, superior, inferior o derecha) de la pantalla. Arreglemos eso.
  2. La cinta (la parte superior de la ventana de MATLAB que contiene las pestañas Inicio, Gráficos y Aplicaciones) está expandida, lo que no necesito la mayor parte del tiempo. Así que quiero colapsarlo para ahorrar algo.estado de la pantalla.
  3. El panel Carpeta actual a la izquierda está expandido, lo cual no necesito la mayor parte del tiempo, pero si está expandido está allí la mayor parte del tiempo. Por eso, la mayoría de las veces utiliza elementos valiosos de la pantalla, como la cinta.
  4. El panel derecho, el Espacio de trabajo, es muy útil si realiza cálculos directamente en la ventana de comandos (panel central) y necesita realizar un seguimiento de cuáles son sus variables, etc. Sin embargo, mientras crea scripts o escribe funciones usando el Editor (no visible en la ventana predeterminada). No necesitas mucho el espacio de trabajo porque tus variables pueden ser bastante abstractas. Aunque depurar el espacio de trabajo puede ser útil, normalmente lo contraigo para ahorrar más espacio en la pantalla. En lugar del espacio de trabajo, uso el whoscomando en la ventana de comandos para enumerar todas mis variables. Consejo profesional: para enumerar todas las variables que comienzan con, por ejemplo, una 'x', utilice whos x*.
  5. El mensaje '¿Nuevo en MATLAB? ...' consejo en la parte superior de la ventana de comandos me molesta, porque no soy en absoluto nuevo en MATLAB. Existen más consejos amarillos como estos cuando abre otros paneles o ventanas.
  6. La carpeta actual (diferente para el MATLAB predeterminado de todos) no es una carpeta práctica. Quiero que la carpeta en la que realmente almaceno mi trabajo sea la predeterminada.

Probablemente haya más cosas que a usted o a mí no nos gusten o no queramos cambiar, pero solucionemos estos seis problemas; consulte la Parte 1 de mi respuesta a continuación para conocer mi solución.


Parte 2

Hacer que las configuraciones personalizadas persistan en las computadoras que las restablecen

Un problema adicional que encontré con los problemas anteriores no se resolvió en la Parte 1 de mi respuesta. El problema, imagino, le pasa a más gente que usa MATLAB en un ordenador del que no es administrador, es decir, posiblemente no tenga permisos elevados. Esto significa que no pueden editar la configuración del sistema y posiblemente tampoco puedan editar la configuración de MATLAB, como sucede en mi caso. Utilizo MATLAB en una computadora de trabajo en un lugar de trabajo muy grande. Cada computadora tiene un espacio de trabajo virtual en el que los usuarios inician sesión. La mayoría de las unidades son virtuales: el directorio de instalación de MATLAB está en una de esas unidades. ¡A través del Explorador de Windows ni siquiera puedo ver el disco! Además, el acceso directo a MATLAB apunta a un programa diferente que utiliza mi lugar de trabajo para llamar a cualquier software para el que el usuario tiene licencia, no directamente a MATLAB.exe en la carpeta de instalación de MATLAB. Sin embargo, existe un comando de MATLAB que revela la carpeta raíz de MATLAB, matlabroot.

El problema que tuve después de configurar mi escritorio MATLAB como me gustaba (ver la captura de pantalla en mi respuesta a continuación), fue que el diseño volvía al diseño predeterminado poco amigable después de cada reinicio. Reinicio al menos una vez al día, lo que significa que mi configuración y diseño de MATLAB se restablecen cada vez. Puede que esto no sea un problema para usted, pero para un superusuario que utiliza algunas configuraciones, diseños, etc. personalizados, sí es un problema. Lo resolví en la Parte 2 de mi respuesta, ver más abajo.

Respuesta1

Parte 1

Cambiar el diseño predeterminado de MATLAB

Resolvemos los seis problemas enumerados cambiando el diseño del escritorio al que más nos guste. Utilizo un diseño que se parece a este por defecto:

Ventana predeterminada de MATLAB en el primer inicio

Reproduzcamos eso.

  1. Simplemente arrastre la ventana principal de MATLAB a donde desee, por ejemplo, maximícela. ¡Resuelto!
  2. Haga clic en el icono de flecha justo debajo de la salida roja ×en la esquina superior derecha de la ventana de MATLAB para contraer la cinta. ¡Resuelto!
  3. Arrastra el título del panel Carpeta actual (la parte donde dice Carpeta actual) a donde quieras. Puedes ponerlo casi en cualquier lugar. Mientras arrastra, verá la sombra del panel de dónde se ubicará cuando suelte el botón del mouse. Puede colocar el panel en otro lugar, o puede arrastrarlo a la parte superior izquierda, arriba a la izquierda, arriba a la derecha, arriba, abajo o cualquiera de los títulos del otro panel para crear un panel Carpeta actual con pestañas que está cerrado de forma predeterminada. MATLAB llama a esto minimizado. Cuando un panel está minimizado, ocupa mucho menos espacio y se puede abrir haciendo clic en la pestaña o pasando el mouse sobre la pestaña. Otra solución es cerrar completamente el panel y eliminarlo de su escritorio MATLAB. Esto se puede hacer desacoplando primero el panel haciendo clic derecho en el título → haga clic en Desacoplar (o presionando Ctrl+ Shift+ U). Esto abre el panel en una ventana separada. Cierra la ventana y desaparecerá. Si accidentalmente pierde una ventana como esta, puede restaurarla a través de la pestaña Inicio de la cinta principal → hacer clic en Diseño → habilitar Carpeta actual nuevamente. Para acoplar la ventana nuevamente, haga clic en la pequeña flecha en la esquina superior derecha de la ventana del panel → haga clic en Acoplar (o presione Ctrl+ Shift+ D). Puse la Carpeta actual en una pestaña en la parte superior izquierda.
  4. Puse el Espacio de trabajo al lado de la pestaña Carpeta actual. ¡Resuelto!
  5. Simplemente haga clic en ×a la derecha en la barra de la punta amarilla.
  6. Elija una carpeta que desee establecer de forma predeterminada y navegue hasta ella usando el panel Carpeta actual o la barra de direcciones (en la captura de pantalla anterior, es la lista desplegable justo debajo de la cinta que dice ► C: ►). Para establecer esto como la ruta predeterminada, primero copie la dirección. Creo que en las versiones de MATLAB desde R2014b puede configurar la carpeta actual predeterminada en las preferencias de MATLAB (encuéntrela en la pestaña Inicio → Preferencias → Preferencias generales → Carpeta de trabajo inicial). Si tiene una versión anterior, puede configurar la carpeta actual predeterminada de MATLAB usando eluserpath(newpath)comando, en el cual nueva ruta es la ruta que copió. Tenga en cuenta que newpathdebe ser una cadena, es decir, encerrada entre 'single straight apostrophes', por lo que no debe haber "apóstrofes dobles" que haya copiado. ¡Resuelto!

También se reposicionaron el Historial de comandos (al que se accede presionando en la ventana de comandos) y el Editor (presione Ctrl+ en la ventana de comandos para abrirlo).N

Es una buena idea guardar este diseño, para que pueda cambiar fácilmente a él si algo o alguien cambia algo (por ejemplo, cuando varios usuarios usan el mismo MATLAB con diferentes diseños). Haga esto a través de la pestaña Inicio de la cinta → Diseño → Guardar diseño → asigne un nombre a su diseño. Se guarda como un archivo .xml llamado <your layout name>MATLABLayout.xmlen el directorio de preferencias de MATLAB, que puede encontrar con el prefdircomando. Todas las preferencias de MATLAB, historial de comandos, diseño predeterminado, etc. se almacenan en este directorio. ¡Este es un conocimiento muy útil para la segunda parte de esta respuesta!

La mayoría (si no todas) las demás preferencias también se almacenan allí.


Ahora, la segunda parte de mi respuesta, que responde a la Parte 2 de mi pregunta.

Parte 2

Hacer que las configuraciones personalizadas persistan en las computadoras que las restablecen

Antes que nada: aplique todas sus configuraciones personalizadas y guarde un diseño para el escritorio MATLAB que desee como se describe en la Parte 1 de esta respuesta.

Ahora, vamos a utilizar inteligentemente startup.my finish.malgunos archivos .bat.

startup.mes un archivo que, si está presente en la ruta de MATLAB, se ejecuta al inicio antes de obtener control sobre la ventana de MATLAB. Este archivo es un script que se puede utilizar para hacer cualquier cosa. Lo configuraremos de manera que haga lo siguiente:

  1. Configure la carpeta actual en cualquier directorio que queramos después del inicio.
  2. Sobrescriba las preferencias predeterminadas de MATLAB con las nuestras, tal como se guardan en la Parte 1 de esta respuesta.
  3. Restaurar nuestro propio diseño de escritorio MATLAB.

Los dos primeros pasos son los más fáciles. En mi caso (en las computadoras de mi trabajo), la ruta predeterminada simplemente se olvidaba cada vez que se reiniciaba la computadora. Entonces hice un script startup.my le puse el siguiente código.

(esto entra startup.m)

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

Suficientemente fácil. Reemplace pcon cualquier ruta a una carpeta actual que desee.

El segundo paso es más difícil. Requiere guardar y restaurar todas las configuraciones en el directorio de preferencias de MATLAB, que se puede encontrar usando el prefdircomando. Para ello finish.mtambién utilizamos . Este es un script que se ejecuta automáticamente justo antes de que salga MATLAB. Se puede salir de MATLAB de varias maneras: haga clic en ×de la ventana principal de MATLAB o use el comando exito quit. Es bueno saberlo: si elimina MATLAB.exe a través del Administrador de tareas de Windows o mediante un comando del sistema diferente que finaliza el proceso, finish.mno se ejecutará. Asegúrese finish.mde que esté en la ruta de MATLAB o agregue la ruta a la ruta de MATLAB usando addpathel fragmento de código anterior para startup.m. De lo contrario, finish.mno se ejecutará cuando se cierre MATLAB.

Copiaremos finish.mtodas las preferencias que haya establecido o cambiado y sus diseños personalizados en una carpeta para la que tenga permisos. El siguiente código hace esto.

(esto entra finish.m)

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

Esto copia todos los archivos en el directorio de preferencias de MATLAB a la carpeta de respaldo de su elección. Ahora le decimos startup.mque restaure estos archivos. Debido a que startup.mse ejecuta antes que nada, restaura muy bien todas las configuraciones que podamos desear. El siguiente código hace esto por nosotros.

(esto 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')

En este fragmento de código pse debe establecer en el mismo directorio que pen finish.m, para que MATLAB sepa desde dónde copiar el archivo.

El tercer elemento de nuestra lista es el más complicado. Simplemente copiar el <your layout name>MATLABLayout.xmlarchivo usando el fragmento de código anterior al directorio de preferencias de MATLAB no es suficiente para restaurar el diseño. Necesita restaurarlo mediante programación. Además, en mi situación, MATLAB requería reiniciar antes de aplicar el diseño. Esto se hará con los siguientes pasos.

Encontré un método enMATLAB no documentado, un sitio web que describe muchas de las funciones de MATLAB que no están documentadas ni soportadas por los desarrolladores de MATLAB. No son fáciles de usar y pueden comportarse de manera extraña, pero pueden hacer cosas muy poderosas.

El siguiente código restaura el diseño que había guardado previamente como <your layout name>MATLABLayout.xml.

(esto entra startup.m)

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

Establezca layoutNameel nombre que haya asignado a su diseño. Ahora a la parte de reinicio de MATLAB.

Recuerde que las preferencias de MATLAB se restablecen cada vez que reinicio la computadora en mi lugar de trabajo. La ruta predeterminada de MATLAB (que se puede encontrar usando el pathcomando) solo incluye directorios en los que no tengo permisos para escribir. Esto significa que no puedo colocar startup.my finish.men la ruta de MATLAB, de modo que después de reiniciar todavía estén allí. ¿Cómo puedo solucionar esto? Utilizo un ingenioso truco de línea de comandos de MATLAB.exe para copiar startup.men una carpeta en la ruta de MATLAB y luego lo ejecuto startup.mmanualmente.

El acceso directo a MATLAB en mi menú Inicio también se restablece después de reiniciar, por lo que uso un archivo .bat en mi escritorio para ejecutar MATLAB de la siguiente manera.

(Esto va en MATLAB.bat, que puede colocarse en cualquier lugar al que tenga fácil acceso, por ejemplo, el escritorio de Windows o una carpeta personal)

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

Esto ejecutará MATLAB. Además, -rle dice a MATLAB que ejecute lo que viene a continuación entre los "dobles apóstrofes" después de que haya terminado de iniciarse (incluso después de ejecutarlo startup.m, si existiera, lo cual no es el caso en mi situación). La parte entre los apóstrofes es el código MATLAB que le indica a MATLAB que copie el startup.mscript que creamos en un lugar de la ruta de MATLAB, en este caso matlabroot. Puede ser cualquier otro directorio en la ruta predeterminada de MATLAB, o puede usarlo addpath('path\to\add')para agregar cualquier ruta a la ruta de MATLAB. Esto podría agregar la ruta a nuestro startup.m. El último comando entre los apóstrofes es simplemente una llamada de startup.m, por lo que se ejecuta.

Ahora, el script establecerá la ruta, la configuración y el diseño deseados. Aún persiste un problema: MATLAB necesita reiniciarse para cambiar realmente el diseño. Esto se hace usando startup.my finish.mun segundo archivo .bat.

El segundo archivo .bat cerrará MATLAB a través de la línea de comando e iniciará MATLAB nuevamente. startup.mDebe saber que se inició por primera vez y luego ejecutar este archivo .bat. finish.mdebe aclarar este conocimiento. Esto es lo que he hecho.

(esto entra restartup.bat)

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

Como puede ver, taskkilleliminará un proceso con una %1identificación de proceso ( ) aún desconocida ( /pid). Esta identificación se proporcionará en la llamada de este archivo .bat por parte de startup.m. Sin embargo, esta llamada no debe realizarse si MATLAB ya se reinició para restaurar el diseño y las preferencias. Por lo tanto, startup.mdebe crear un recuerdo de que ya se está ejecutando. Hice esto de la siguiente manera.

(esto 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

La memoria que di startup.mes un archivo que, si existe, impide el reinicio de MATLAB. Este archivo se llama name. El ID del proceso actual de MATLAB se obtiene con num2str(feature('getpid')). Esto a su vez se pasa a la llamada de restartup.bat, que a su vez finaliza el proceso de MATLAB. Recuerde que esta eliminación no invoca finish.m, por lo que eliminamos el archivo de memoria en ese script, de modo que si se sale de MATLAB normalmente, el archivo de memoria desaparecerá y MATLAB sabrá que debe reiniciarse la próxima vez que se ejecute.

(esto entra finish.m)

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

Bonificación por la lectura larga:leer aquícómo lo he editado startup.mpara abrir figuras predeterminadas en la mitad izquierda de la pantalla. Ahora, la ventana principal de MATLAB puede ubicarse cómodamente en la mitad derecha de la pantalla y las ventanas de figuras no se superponen (lo que sucede de forma predeterminada).


¡Ahora he resuelto y respondido mis dos preguntas! Entiendo que esta es una respuesta bastante elaborada y, por lo tanto, una lectura difícil, así que no dude en hacer cualquier pregunta y publicar comentarios con sugerencias para mejorar aún más mis métodos.

información relacionada