Recompilação parcial, como?

Recompilação parcial, como?

Editores como BaKoMa TeX e texpad parecem ser capazes de recompilar páginas individuais. Estou interessado em como fazer isso acontecer sozinho, mas não consegui descobrir como fazer isso.

Espero que alguém com mais conhecimento possa fornecer algumas respostas aqui, o que estou procurando idealmente é um processo passo a passo, idealmente do tipo que possa ser integrado a um editor (eu ajudo no desenvolvimento do LaTeX Extensão VSCode do workshop).

Responder1

AucTeX, o modo principal mais famoso do Emacs para *TeX tem uma TeX-command-regionfunção que executará um compilador em qualquer parte do arquivo previamente selecionada com o mouse (é claro que você também pode fazer isso com o teclado). Você pode facilmente verificar este código de função no Emacs se quiser implementá-lo.

Como não sou mais um usuário do Emacs, apenas executo meu script de shell externo não tão elegante, mas funcional. Deve funcionar com qualquer instalação do texlive e ksh, talvez qualquer outro shell. Isto certamente não deve ser implementado em nenhum 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

PS: é melhor chamar programas com seu caminho absoluto em um script, mas eu os excluí ao copiar meu script para torná-lo um pouco mais portátil.

Responder2

Só para ter certeza: você sabe como ter um documento principal e incluir quantas partes desejar usando \include, \input, \includeonly, para detalhes veja aqui:Quando devo usar \input vs. \include?. Isso torna a recompilação bastante rápida.

Você pode até acelerar a compilação usando um formato pré-compilado, veja o pacote mylatexformat.

E você pode aumentar isso se deixar o latexmk compilar em segundo plano.

Talvez o seu editor permita um salvamento automático, por exemplo, dois segundos após você parar de digitar. latexmk percebe o salvamento e começa a compilar com o formato pré-compilado.

No final, você obtém uma imagem quase instantânea da página onde alterou alguma coisa.

Responder3

Para chegar a uma compilação online real, outros softwares como o BaKoMa TeX usam um (La-)TeX modificado. Com o LuaTeX mais recente é mais fácil se aprofundar no interior, talvez esta seja uma rota que você possa investigar.

Como solução alternativa, o que pode ser feito é iniciar a compilação com LaTeX até o ponto da posição atual do cursor em seu editor. Digamos que seu documento completo tenha a seguinte aparência:

\documentclass{article}
\begin{document}

$1$
\newpage
$2$

[posição do cursor]

Some more example text.

Em vez de continuar, termine a entrada aqui e aborte a compilação, o arquivo DVI ainda será gravado até este ponto.

\newpage
$3$
\newpage
$4$

\end{document}

É possível inserir e compilar o primeiro bloco com LaTeX. Então, quando o usuário fizer uma pequena pausa, a compilação poderá continuar e ser abortada, por exemplo, na próxima página. O documento DVI fica então disponível quase imediatamente. Em segundo plano, você pode então iniciar o processo de compilação até o ponto do cursor novamente para que não interrompa o fluxo de trabalho do usuário.

Com um executável LaTeX modificado, a primeira otimização seria gravar o processo de compilação em uma espécie de cache, de modo que a parte anterior à página atual não precise ser compilada novamente, a menos que seja alterada. Isso torna esta abordagem também viável, não há nenhuma maneira programática de influenciar o conteúdo de uma página anterior com código nas páginas posteriores. Isto diferencia um arquivo LaTeX de, por exemplo, um arquivo de origem C onde no final do arquivo as partes anteriores podem ser alteradas.

Responder4

Sei que não é exatamente isso que você está procurando, mas existem plug-ins para VIM que fornecem uma visualização ao vivo do documento.

Comvim-latex-live-previewvocê pode obter esse efeito. Claro, isso só funcionará ao usar o VIM como editor. Não sou usuário do EMACS, mas tenho certeza de que também existem recursos semelhantes.

Espero que isso possa guiá-lo na direção certa.

informação relacionada