
Estoy usando látex como un diario con secciones para cada tema. Agrego manualmente fecha de creación y modificación a cada elemento de texto (sección, subsección, subsubsección,...). ¿Hay alguna manera de hacerlo automático?
Estoy dispuesto a aprender lua o python y codificarlo (uso C++ moderno), pero no estoy seguro de qué herramientas están disponibles y cómo hacerlo rápido.
Mi plan es hacer que parezca desde la declaración de elemento de texto anterior hasta la siguiente declaración de elemento. puede buscar en el árbol de deshacer. ver si hay algún cambio. si los hay, cambie la fecha después de la declaración de la sección actual. También sería bueno ocultar estas fechas y mostrarlas nuevamente.
Respuesta1
Esto es posible, pero requerirá que tengas algunos conocimientos del lenguaje de programación de Vim. Deberá escribir una función de Vim que pueda encontrar la ubicación de la fecha dentro de la sección actual sin "escapar" de esa sección y luego cambiar esa línea. Una vez escrita la función, deberá adjuntarla a un autocmd.
Por ejemplo, si se llamó a su función, TexAutoDate()
podría llamarla automáticamente cada vez que escriba un archivo que termine de .tex
esta manera:
:autocmd BufWritePre *.tex :call TexAutoDate()
Desafortunadamente, el cuerpo real de la función será bastante complejo y sin saber más sobre el diseño de su archivo no puedo ayudarlo mucho. Tengo una función que escribí con un propósito similar, pero no se limita a secciones. La siguiente función actualiza la línea "Último cambio:" de un archivo de ayuda de Vim automáticamente al escribir:
function HelpModifiedUpdate()
if &filetype != "help"
return
endif
let today=strftime('%Y %b %d')
" Save current cursor position:
let lnum = line('.')
let col = col('.')
if search('Last change: ', 'w')
let line1 = getline('.')
if line1 =~ today
" Restore cursor position:
call cursor(lnum, col)
return
endif
let line2 = substitute(
\line1,
\'Last change: .*',
\'Last change: ' . today,
\''
\)
call setline('.', line2)
endif
" Restore cursor position:
call cursor(lnum, col)
endfunction
Ver:
:help :autocmd
:help :function
:help eval.txt
El último es extenso y no necesitará leer todo el archivo, pero contendrá gran parte de lo que necesita si aún no conoce el script Vim.
Respuesta2
Probablemente la forma más sencilla de hacerlo es instalar un complemento de fragmento. yo prefieroultisnipsporque es mucho más poderoso, perocompañero de recortesTambién es muy popular.
Con ultisnips, definiría un fragmento como este en mi tex.snippets
archivo;
snippet sec "section" b
\section{`!v strftime("%Y-%m-%d")`: ${1:section label}}
$0
endsnippet
Si ahora escribe sec
al principio de una línea y presiona la <tab>
tecla, el fragmento se expandirá e insertará la fecha actual (usando eltiempo de tensiónfunción) y pidiéndole que complete la etiqueta de la sección.