Indice



Ultima actualizacion 04/05/24

Vim + LaTex

Vim destaca como uno de los mejores editores de texto gracias a su eficiente manejo de grandes cantidades de texto. Su popularidad se fundamenta en sus características y su capacidad de personalización, que permite a los usuarios configurar atajos de teclado, crear macros e instalar una amplia gama de plugins con diversas funcionalidades. Aunque puede resultar desafiante aprender todos los atajos y comandos al principio, una vez dominados, Vim suele ser muy cómodo de usar y aumenta significativamente la productividad del usuario.

LaTeX es ampliamente utilizado en entornos científicos y académicos debido a su capacidad para manejar fórmulas matemáticas con precisión. Además, ofrece un control detallado sobre la estructura y el formato del texto, lo que lo hace ideal para la redacción de artículos científicos, informes técnicos y documentos académicos en general.

El plugin Vimtex proporciona funciones específicas para trabajar en documentos LaTeX, como la compilación del texto y el resaltado de sintaxis. Esto lo convierte en un complemento muy útil para editar documentos LaTeX de manera eficiente en Vim.

Plugins

Utilizo cinco plugins en Vim, cada uno con una funcionalidad específica para mejorar la escritura y la productividad. Estos plugins incluyen herramientas para el autocompletado de código, mejora en la visualización del documento, navegación rápida entre archivos y gestión de ventanas, lo que me permite trabajar de manera más eficiente.

VimTex

Utilizo VimTeX como el plugin principal, ya que resalta la sintaxis del documento LaTeX y facilita su compilación directamente desde Vim. Además, utilizo el visualizador Zathura para ver el documento en tiempo real mientras edito.

Para iniciar y detener el compilador, se emplea el comando \ll. Cuando está activado, Vim entra en el modo de compilación continua, lo que implica que cada vez que se guarde el documento, este se compilará y se actualizará en el visualizador Zathura.La configuracion que uso para este plugin es:


let g:tex_flavor='latex'
let g:vimtex_view_method='zathura'
let g:vimtex_quickfix_mode=0
let g:Tex_DefaultTargetFormat='pdf'
let g:Tex_MultipleCompileFormats='pdf' 
Tex Conceal

Mejora la visualización del documento en Vim al reducir las expresiones a una forma más legible. Tex Conceal reemplaza partes del código LaTeX con representaciones más compactas y legibles, lo que hace que el documento sea más claro y fácil de entender mientras se edita en Vim. Por ejemplo, puede ocultar los comandos LaTeX complejos y mostrar símbolos más simples en su lugar, lo que reduce el desorden visual y mejora la legibilidad del documento.

Las configuraciones específicas para este plugin se añaden al archivo .vimrc. Las que utilizo son las siguientes:


set conceallevel=1
let g:tex_conceal='abdmg' 
hi Conceal ctermbg=none 

La configuración set conceallevel=1 controla el ocultamiento del texto, lo que implica que el texto permanecerá oculto mientras el cursor no esté sobre la línea de texto correspondiente. Por otro lado, la variable let g:tex_conceal='abdmg' define qué elementos del texto se ocultan o se muestran de manera diferente. Estos elementos incluyen:

Ultisnips

Posibilita la creación y el uso de atajos personalizados para escribir de forma más ágil y eficaz. Al escribir, este plugin completa automáticamente los fragmentos definidos, lo que facilita la inserción de comandos frecuentes u otros textos predeterminados con mayor rapidez.

Para prevenir errores al escribir, Ultisnips emplea contextos definidos por \[ ... \] y por $ ... $. Por ejemplo, al escribir "La suma" fuera de estos contextos, no se activa ninguna acción; sin embargo, dentro del contexto, la parte "sum" se expandiría a \sum_{n=1}^{\infty}.

Para cada tipo de archivo, es posible emplear distintos atajos, los cuales se definen en archivos específicos para cada tipo. Por ejemplo, en el archivo "tex.snippets", se establecen los contextos utilizando las siguientes líneas de texto:


global !p
def math():
	return vim.eval('vimtex#syntax#in_mathzone()') == '1'

def comment(): 
	return vim.eval('vimtex#syntax#in_comment()') == '1'

def env(name):
	[x,y] = vim.eval("vimtex#env#is_inside('" + name + "')") 
	return x != '0' and y != '0'

endglobal 

Se establece una función en Vimscript que invoca una función de Python mediante el comando 'global !p'. Posteriormente, se define la función 'math', la cual emplea 'vimtex#syntax#in_mathzone()' para determinar si el cursor está posicionado dentro de una zona de matemáticas en un documento LaTeX. Esta condición es evaluada utilizando 'return vim.eval('vimtex#syntax#in_mathzone()') == '1'', la cual devuelve un valor positivo o negativo según corresponda. Este proceso se repite de manera similar para los otros dos contextos.

Si deseas crear un atajo con este plugin, sigue este formato de código. Primero, se define el snippet con 'snippet', seguido de la palabra que lo activará, un comentario y cómo se expandirá, ya sea instantáneamente al escribirlo o al presionar 'tab', entre otros métodos. Luego, se especifica la expansión del snippet, donde se puede establecer un orden para la posición inicial del cursor y su avance. Por último, se cierra el snippet.


snippet beg "begin y end" bA
\\begin{$1}
	$0
\\end{$1}
endsnippet 

Con este snippet, al escribir la palabra "beg", se insertarán los comandos \begin{} y \end{}. El cursor se posicionará inicialmente dentro de los corchetes del comando \begin{}, donde podrás escribir el nombre del entorno. Luego, al presionar 'tab', el cursor se desplazará al lugar indicado por $0, donde puedes insertar tu texto.

Otro ejemplo más complejo que utiliza el contexto matemático y codigo de phyton, cuando escribes "/", el texto que se encuentra antes del símbolo será colocado como numerador de una fracción, mientras que el cursor se posicionará automáticamente en el espacio reservado para el denominador, esto facilita la escritura de fracciones.


context "math()"
snippet '((\d+)|(\d*)(\\)?([A-Za-z]+)((\^|_)(\{\d+\}|\d))*)/' "Fraccion" wrA
\\frac{`!p snip.rv = match.group(1)`}{$1}$0
endsnippet 

Lo más destacable es "((\d+)|(\d*)(\)?([A-Za-z]+)((^|_)({\d+}|\d))*)/", que define el patrón necesario para activar el snippet cuando se cumpla, en este caso, el snippet se activará al escribir una secuencia que pueda representar un símbolo seguido de una diagonal. La notación "!p" indica que se ejecutará código Python dentro del snippet y "snip.rv = match.group(1)" asigna el valor coincidente de la expresión regular (el símbolo) a una variable que se puede utilizar dentro del snippet.

Se pueden crear una variedad de atajos de esta manera. Puedes encontrar todos los atajos que utilizo aqui.

Mucomplete

Utilizo Mucomplete específicamente cuando necesito insertar imágenes u otros elementos de documentos LaTeX en mi trabajo ya que este simplifica el proceso de búsqueda y selección de elementos.

Este plugin se complementa bien con Ultisnips, como se muestra en el siguiente ejemplo donde describo cómo inserto figuras. Primero, utilizo un atajo de Ultisnips para crear el esqueleto de la figura, y luego utilizo Mucomplete para buscar y seleccionar la imagen que deseo insertar.

Estas son las configuraciones que tengo establecidas para este plugin:


set completeopt+=menuone
set completeopt+=noselect
set completeopt-=preview
let g:mucomplete#enable_auto_at_startup = 1
let g:mucomplete#completion_delay = 1 

Tengo configurado el atajo para este complemento como Ctrl-ñ, ya que por defecto viene con la tecla Tab, lo cual interfiere con Ultisnips. Para modificar los atajos de este complemento, es necesario editar el archivo 'mucomplete.vim' ubicado en la ruta '.vim/plugged/vim/vim-mucomplete/plugin/mucomplete.vim', específicamente en la línea 26.

NERDtree

Este plugin lo empleo en documentos un tanto mas elaborados, ya que suelo dividirlos en varios archivos .tex para mantener una organización más clara, con esto la navegación entre estos archivos resulta sencilla y ágil.

Corrector Ortográfico

El corrector ortográfico es una herramienta esencial, aunque su función es bastante básica, detectar palabras mal escritas. En mi configuración, lo he asignado a la combinación de teclas Ctrl-l para corregir la palabra errónea más cercana a la izquierda del cursor.

Para evitar que la configuración del corrector ortográfico se aplique a archivos que no sean .tex y así evitar molestias, la incluyo en un archivo llamado tex.vim en la carpeta ftplugin, que se encuentra en .vim/ftplugin. La configuración que utilizo es la siguiente:


setlocal spell
set spelllang=es
inoremap <C-l> <c-g>u<Esc>[s1z=`]a<c-g>u
highlight clear SpellBad 
Como lo uso

Al tomar notas con LaTeX, comienzo creando un archivo LaTeX (.tex) y luego, mediante un atajo, cargo la plantilla correspondiente, la elección de la plantilla depende del tipo de documento que esté creando. Por ejemplo, si se trata de notas o un documento rápido, utilizo una plantilla sencilla donde todo se escribe en un único archivo, en cambio, si el documento es más elaborado, utilizo una plantilla donde el archivo principal solo contiene el cuerpo del documento, con secciones y títulos.

Además, organizo mi proyecto en dos carpetas separadas: "Images" para las fotos y "Input" para las secciones del documento.

A continuación, muestro un ejemplo de cómo tomo notas, es importante destacar que la efectividad puede variar según las habilidades de escritura de cada persona y su familiaridad con LaTeX.

Recursos

A continuación, comparto las configuraciones para los plugins en mi archivo de configuración de Vim, así como para Ultisnips. También incluyo los enlaces para cada uno de los plugins mencionados anteriormente.