
Editores como BaKoMa TeX y texpad parecen poder recompilar páginas individuales. Estoy interesado en cómo hacer que esto suceda yo mismo, pero no he podido descubrir cómo hacerlo.
Espero que alguien con más conocimientos pueda proporcionar algunas respuestas aquí, lo que idealmente estoy buscando es un proceso paso a paso, idealmente del tipo que podría integrarse en un editor (ayudo con el desarrollo de LaTeX Extensión VSCode del taller).
Respuesta1
AuTeX, el modo mayor más famoso de Emacs para *TeX tiene una TeX-command-region
función que ejecutará un compilador en cualquier parte del archivo previamente seleccionada con el mouse (por supuesto, también puedes hacerlo con el teclado). Puede verificar fácilmente este código de función dentro de Emacs si desea implementarlo.
Como ya no soy usuario de Emacs, simplemente ejecuto mi script de shell externo, no tan elegante pero funcional. Debería funcionar con cualquier instalación de texlive y ksh, tal vez con cualquier otro shell. Ciertamente, esto no debería implementarse en ningún editor.
#!/bin/ksh
#tex_region.sh first_line last_line file [master file]
#where am I?
ousuisje=$(pwd)
#is there a master file?
if [[ -s $4 ]];
then
maitre=$4;
else
maitre=$3;
fi
#copy the preamble
sed -e '/maketitle/,$d' $maitre > /tmp/$maitre ;
#copy file from line $2 to line $3
head -n $2 $3 |tail -n $(( $2 - $1 + 1 )) |\
#absolute path to graphic files
sed "/includegraphics/s:{\([^}]\+}\):{$ousuisje/\1:">> /tmp/$maitre
#add \end{document} to temporary file
echo -E "\end{document}" >> /tmp/$maitre
#goes to /tmp
cd /tmp
#checks which *latex has to be called then compile
laoulualatex=$(grep -c '^\\\usepackage{polyglossia}' $maitre)
if (( $laoulualatex == 1 )) ;
then
# if your distro is texlive, binaries should be in $TEXDIR/bin
lualatex $maitre ;
else
pdflatex $maitre ;
fi
######read the pdf with mupdf (code inspired by Vincent Lozano's framabook
###### "pour aller plus loin avec la ligne de commande")
#checks whether the pdf is opened with mupdf
pidpdf=$(ps -U dthiriet | grep mupdf | grep ${maitre%tex}pdf | cut -d' ' -f1)
if test -z $pidpdf ;
#if not, calls mupdf
then
mupdf ${maitre%tex}pdf &
else
#send a SIGHUP signal to mupdf to actualize the pdf
kill -s HUP $pidpdf ;
fi ;
#####back to my file
cd $ousuisje
PD: es mejor llamar a los programas con su ruta absoluta en un script, pero los eliminé al copiar mi script para hacerlo un poco más portátil.
Respuesta2
Solo para asegurarte: sabes cómo tener un documento principal e incluir tantas partes como desees usando \include
, \input
, \includeonly
, para obtener más detalles, consulta aquí:¿Cuándo debo usar \input frente a \include?. Esto hace que la recopilación sea bastante rápida.
Incluso puedes acelerar la compilación utilizando un formato precompilado; consulta el paquete mylatexformat.
Y puedes potenciarlo si dejas que latexmk se compile en segundo plano.
Quizás su editor permita un guardado automático, por ejemplo, dos segundos después de que dejó de escribir. latexmk nota el guardado y comienza a compilar con el formato precompilado.
Al final obtienes una imagen casi instantánea de la página donde has cambiado algo.
Respuesta3
Para llegar a una compilación real en línea, otros programas como BaKoMa TeX utilizan un (La-)TeX modificado. Con el LuaTeX más nuevo es más fácil conectarse profundamente a lo interno, tal vez esta sea una ruta que puedas investigar.
Como solución alternativa, lo que se puede hacer es iniciar la compilación con LaTeX hasta el punto de la posición actual del cursor en su editor. Digamos que su documento completo tiene el siguiente aspecto:
\documentclass{article}
\begin{document}
$1$
\newpage
$2$
[posición del cursor]
Some more example text.
En lugar de continuar, finalice la entrada aquí y cancele la compilación, el archivo DVI se seguirá escribiendo hasta este punto.
\newpage
$3$
\newpage
$4$
\end{document}
Es posible ingresar y compilar el primer bloque con LaTeX. Luego, cuando el usuario toma un breve descanso, la compilación puede continuar y cancelarse, por ejemplo, en la página siguiente. El documento DVI estará entonces disponible casi de inmediato. En segundo plano, puede iniciar nuevamente el proceso de compilación hasta el punto del cursor para que no interrumpa el flujo de trabajo del usuario.
Con un ejecutable LaTeX modificado, la primera optimización sería registrar el proceso de compilación en una especie de caché, de modo que la parte anterior a la página actual no necesite compilarse nuevamente a menos que cambie. Eso hace que este enfoque también sea algo factible: no existe una forma programática de influir en el contenido de una página anterior con código en las páginas posteriores. Esto distingue un archivo LaTeX de, por ejemplo, un archivo fuente C donde al final del archivo se pueden cambiar las partes anteriores.
Respuesta4
Sé que esto no es exactamente lo que estás buscando, pero existen complementos para VIM que brindan una vista previa en vivo del documento.
Convim-latex-vista previa en vivopuedes obtener ese efecto. Por supuesto, esto sólo funcionará mientras usa VIM como editor. No soy usuario de EMACS, pero estoy seguro de que también existen capacidades similares.
Espero que esto pueda guiarte en la dirección correcta.