Con el fin de acelerar los tiempos de compilación de documentos grandes, me interesé en la compilación parcial. (Ya conozco la "precompilación" de fmt
archivos de formato de preámbulo y tengo la intención de usarlos también).
El primer problema es que heredé un esqueleto de archivos que usan \input
s (anidados) en lugar de \include
s, por lo que realmente no puedo usar \includeonly
.
Para demostrar lo que quiero, considere este MWE; para simplificar, un test.tex
archivo "plano"/único:
\documentclass[11pt]{book}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lipsum}
% https://tex.stackexchange.com/questions/4139/how-to-change-font-size-mid-document
% only 10, 11 and 12
\def\changeBaseFontSize#1{%
\let\orignewcommand\newcommand
\let\newcommand\renewcommand
\makeatletter
\input{bk#1.clo}%
\makeatother
\let\newcommand\orignewcommand
}
\usepackage{lastpage}
% page number override for book class:
\makeatletter
\def\@evenhead{\thepage\ of\ \pageref{LastPage}\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage\ of\ \pageref{LastPage}}%
\makeatother
% \usepackage{fancyhdr}
% \pagestyle{plain}
% \lhead[\thepage\ of \pageref{LastPage}]{}
% \rhead[]{\thepage\ of \pageref{LastPage}}
\begin{document}
\frontmatter
\clearpage
\mainmatter
\chapter{Some chapter}
\section{Section One}
\lipsum[1-145]
Changing the FONT here... \changeBaseFontSize{12}
\lipsum[20]
\lipsum[23]
\section{Section Two}
\lipsum[35]
Changing the FONT here... \changeBaseFontSize{11}
\lipsum[38]
\section{Section Three}
\lipsum[1-145]
\end{document}
Esto da como resultado un documento de 65 páginas; digamos que estoy escribiendo la sección dos, que termina en la página 33 y se ve así, menos los márgenes (haga clic para ver en tamaño completo):
Lo que me gustaría hacer es "envolver" la región de interés en comandos sobre el entorno, por ejemplo:
...
\lipsum[23]
\begin{PartialPreview} % PSEUDO
\section{Section Two}
\lipsum[35]
Changing the FONT here... \changeBaseFontSize{11}
\lipsum[38]
\end{PartialPreview} % PSEUDO
\section{Section Three}
...
En este punto, tras la compilación (ya sea controlable a través de la línea de comandos o por la mera presencia de los comandos/entorno "PartialPreview"), me gustaría que Latex genere un documento con las primeras 32 páginas en blanco; La página 33 queda así:
... seguido de páginas en blanco hasta la página 65. En mi flujo de trabajo, uso evince
la vista previa, y si la cantidad de páginas no cambia, evince
mantendré la posición de la barra de desplazamiento como está, cuando recarga un archivo pdf. y así, podría mantener el foco en el mismo lugar del PDF, sin desplazarme, incluso si cambio entre compilación parcial y completa.
Me gustaría poder incluir este comando/entorno en un anidamiento arbitrario de \input
/ \include
; y como me gustaría que esto realizara un seguimiento de los números de página y otros cambios (como el tamaño de fuente), me imagino que al principio se requeriría una compilación completa, siendo posible una compilación parcial solo posteriormente. Pero entonces, supongo que no sería un problema calcular nuevos números de páginas, si en el proceso de escritura (y vista previa de la compilación parcial), el contenido de esta "sección Dos" crece más allá de una página en tamaño.
Por supuesto, me conformaría con algo que no necesariamente inserte páginas en blanco, ni realice un seguimiento de los números de página, siempre y cuando de alguna manera pueda hacer que Latex "salte" todas las partes que no son de interés durante la ejecución de compilación parcial, de modo que no tiene que procesar todas las macros (y texto/imágenes) en el camino a la región de interés (y por lo tanto, se podría esperar una aceleración significativa).
¿Existe algún paquete con comandos o entornos que hagan esto?
PD: Durante mi búsqueda, encontré solo un par de cosas relacionadas (es decir, puedo hacer una compilación regional), pero que no son realmente aplicables (ya que no son paquetes para Latex per se):
- AUCTeX(a través de¿Cómo acelerar la compilación de LaTeX con varias imágenes de TikZ?) - este es un "complemento" para Emacs, que nunca he usado; y parece que es mejor obtener ecuaciones o gráficos individuales como imágenes independientes, en lugar de contenido contiguo en un .pdf
- Whizzytex(a través deArchivo de formato personalizado: Cómo automatizar la generación del "preámbulo precompilado" cada vez que se cambia uno de los archivos que se utilizan allí) - nuevamente un "complemento" para Emacs, pero solo funciona con
latex
archivos DVI (mientras usopdf/xe/lualatex
y quiero trabajar con PDF)
EDITAR: según los comentarios, intenté usar el paquete comment
y agregar esto al final del preámbulo:
\newenvironment{PartialPreview}{}{}
\ifx\doskip\relax
\typeout{DOSKIP}
\usepackage{etoolbox}
\usepackage{comment}
% https://tex.stackexchange.com/questions/14135/how-to-automatically-add-text-immediately-after-begindocument
%\AtBeginDocument{\comment} % ! Extra \endgroup.
%\AtBeginDocument{\begin{comment}} % Runaway argument? ! File ended while scanning use of \next.
%\AfterEndPreamble{\comment} % ! Extra \endgroup.
\AfterEndPreamble{\begin{comment}} % Runaway argument? ! File ended while scanning use of \next.
%\AtEndDocument{\endcomment}%{\end{comment}}
\fi
... así que no tendría que mantener manualmente el \begin{comment}
inicio del documento, y podría controlar la vista previa desde la línea de comando a través de pdflatex "\let\doskip\relax\input{test.tex}"
; desafortunadamente, eso no funciona: los mensajes de error se agregan como %
comentarios.
Respuesta1
Lo uso xemacs
con AUC-TeX (también hay un paquete para regular emacs
, pero no lo he usado). Ofrece comandos para procesar solo el archivo actual de un documento de varios archivos, o solo la región marcada. La mayoría de las referencias fuera de la pieza procesada aparecerán como indefinidas, pero para echar un vistazo rápido es suficiente.
Si presenta \include{...}
archivos, puede indicar \includeonly{list,of,files,to,include}
y procesar el documento completo le proporciona solo los archivos solicitados, completando referencias cruzadas externas de ejecuciones anteriores (es decir, se supone que los números de página no cambian, no hay nuevos \label{...}
, no hay cambios en el capítulo/sección). /... numeración).
Respuesta2
Ok, disculpas por hacer esto breve; pero logré publicar un ejemplo que coincida con este problema en¿Agregar \comment o \begin{comment} a \AtBeginDocument?; utiliza el {comment}
paquete y define una versión modificada de su \excludecomment
; tal que se puede utilizar:
\end{SKIPLINES} % the below range will be typeset:
\lipsum[5]
\begin{SKIPLINES}
... (tenga en cuenta las \end
aperturas y \begin
cierres) para definir las partes que se componerán (mientras que el resto se borrará), si el proceso se ejecuta con pdflatex "\let\doskip\relax\input{test.tex}"
.
Soy consciente de que la solución vinculada también es un poco problemática (tampoco funciona dentro de \input
archivos), por lo que espero que eventualmente surja una respuesta más erudita; También espero tener tiempo en el futuro para actualizar esta respuesta, con una modificación de la respuesta vinculada para que se ajuste mejor a esta pregunta.