latex - titulo - Sistema de construcción recomendado para látex
titulo en latex (15)
Estoy tratando de descubrir el mejor sistema de construcción para látex.
Actualmente, uso latex-makefile , edito en vim y veo los cambios en Okular o gv. El principal problema es que a veces se esconde errores en mí, y tengo que ejecutar látex manualmente. Las principales ventajas son que hace toda la iteración que necesito, y ofrece tanto el pdf como el ps simplemente.
Si tienes experiencia con
- látex-mk
- vim-latex
- kile
- lyx
- miktex
- látex-makefile
- el último archivo make de látex
- caucho
- cualquier otro que no he encontrado
¿Los recomendarías, y por qué / por qué no?
"Mejor" es un término muy relativo ... ¿qué más quieres hacer? Parece que este makefile se maneja bastante, y me hace desear correr un * nix en el trabajo en lugar de windows ... si hay más cosas que necesitas manejar con el archivo MAKE, ¿por qué no agregarlas?
Para que sea "mejor", deberá proporcionar más detalles sobre lo que está haciendo exactamente.
Por ejemplo, podría hacer que analice el archivo .log con grep, buscar errores o advertencias, volcarlos en otro archivo y luego abrir el nuevo archivo para que pueda leer los errores.
Todo depende de lo que quieras hacer ...
AUCTEX y preview-latex con Emacs otra opción.
También puede hacer que emacs abra el archivo dvi o pdf resultante, y si activa el modo de auto-reversión para ese búfer, los cambios se mostrarán cada vez que recompile el documento.
Acabo de probar latexmk. Si lo haces
latexmk -pvc file.tex
Luego se previsualizará automáticamente (DVI por defecto).
- Maneja dependencias
- DVI, ps o pdf
- Itera bien.
- Muy configurable, ver
man latexmk
Desventajas:
- No condensa los errores, lo cual no es muy útil (solución alternativa: use rubber-info por separado)
- Error en el archivo man: "A veces un espectador (gv) intenta leer un archivo .ps o .pdf actualizado después de que se inicia su creación, pero antes de que se complete el archivo. Solución: actualice manualmente (o vuelva a abrir) la pantalla". Sería mejor si lo construyó a través de un archivo .pdf temporal para evitar esto.
- No es muy amigable para el usuario.
Después de considerar todas estas opciones por un tiempo, me he conformado con la siguiente solución.
- Configure vim para que escriba continuamente mientras escribo .
- Ejecute una secuencia de comandos en segundo plano para compilar continuamente, refrescando el pdf a medida que avanza. latexmk es casi lo suficientemente bueno, excepto que se construye en su lugar, que se vuelve a cargar en un mal momento en okular (mi visor).
El script está disponible en https://github.com/pbiggar/texbuild .
Use información de goma para obtener los errores y advertencias del archivo de registro. El script anterior guarda el archivo de registro en t.log. En vim:
autocmd FileType tex set makeprg=rubber-info/ t.log
autocmd FileType tex set errorformat=%f:%l:/ %m
Eche un vistazo a TeXMaker . :-)
características (de wiki):
- Verificación ortográfica en línea.
- Un editor unicode para escribir archivos fuente LaTeX (resaltado de sintaxis, deshacer-rehacer, buscar-reemplazar, corrector ortográfico ...)
- Las etiquetas LaTeX y los símbolos matemáticos se pueden ingresar con un mouse
- Plantillas de documentos y secciones
- Programas relacionados con LaTeX pueden ser lanzados
- Gestión de bases de datos BibTeX
- Un esquema o "vista de estructura"
- Archivos de registro durante la compilación de LaTeX y la capacidad de "atravesar" los errores de origen que descubre el compilador
- Una herramienta integrada de conversión de LaTeX a HTML
características (de mi parte):
- wizards útiles para insertar tablas, citas, referencias
- soporte bidireccional
- atajos de teclado útiles
- Palabras automáticas completas (especialmente útiles para hacer referencia)
- define tus propias instrucciones
Estoy probando caucho por un tiempo. Voy a condensar los resultados aquí:
- Rubber convertirá automáticamente archivos .eps en .pdfs para pfdlatex. Sin embargo, parece hacer esto solo para macros de inclusión. Si tiene su propia macro, no lo hará.
- rubber-info es genial, que es mágico. Ciertamente es mejor que cualquier otra cosa que haya visto al obtener mensaje de error y líneas. Y en realidad no necesita usar goma para construir para usarla.
- No parece saber cuándo detener la iteración, a menudo deteniéndose temprano.
- Sobrescribe su PDF a medida que se crea, lo cual es irritante (carece de una buena característica de latex-makefile donde lo construye en un archivo temporal).
Estoy usando MikTeX en combinación con TeXnicCenter . Funciona bien para mis propósitos. Nunca he tenido el sistema ocultando errores o advertencias. Los scripts de construcción personalizados son fáciles de crear y configurar.
He estado usando latex-makefile por un tiempo. Es bastante bueno si estás tratando de usar un ciclo de edición-compilación-vista previa:
- Toma casi cero configuración.
- Construye .ps o .pdf.
- Maneja toda la iteración necesaria. Literalmente no tengo que escribir nada más.
- Muy robusto, pero ocasionalmente los errores y las advertencias se mutilan.
- No mata el pdf antiguo hasta que se construya el nuevo.
- Construye otros archivos, como generar eps de gnuplot. Aunque no he encontrado esto muy útil.
- El autor responde rápidamente a las solicitudes de funciones.
Puedo replicar las ventajas de latexmk bastante fácilmente con:
while [ 1 ]; do /usr/bin/make; done
Algunos inconvenientes:
- Solo permite la generación de PDF a través de dvi -> ps -> pdf, en lugar de directamente a través de pdftex.
- Su salida de error no es la misma que la del látex estándar, por lo que vim no se mueve a la línea correcta.
- No siempre recompila los cambios en bibtex y otras fuentes que no sean tex.
- Si elimino un archivo, no elimina la dependencia sin una limpieza.
No lo he usado, pero he oído hablar de Rubber como una buena alternativa.
De su sitio web:
Rubber es un programa cuyo objetivo es manejar todas las tareas relacionadas con la compilación de documentos LaTeX. Esto incluye compilar el documento en sí, por supuesto, suficientes veces para que todas las referencias estén definidas, y ejecutar BibTeX para administrar las referencias bibliográficas. También se incluye la ejecución automática de dvips para producir documentos PostScript, así como el uso de pdfLaTeX para producir documentos PDF.
Ok, esta pregunta es un poco vieja, pero surgió cuando busqué en Google el "sistema de compilación de látex", así que pensé en agregar dos centavos. Probé las soluciones basadas en Makefile, pero encontré la salida un poco prolija e inmanejable. Pensé que alguien podría haber construido una extensión de scon para látex, pero me sorprendió gratamente descubrir que ¡scons ya es compatible nativamente con el látex! Todo lo que necesita hacer es crear un archivo SConsctruct como este:
env = Environment()
env.PDF(target="report.pdf", source="report.tex")
Para compilar solo ejecute scons report.pdf
. Scons creará automáticamente los archivos .tex incluidos por report.tex, manejará las bibliografías y realizará compilaciones repetidas para resolver todas las referencias, ¡simple!
Puede crear archivos DVI y PS de la misma manera. Para obtener más información sobre estos constructores, consulte http://www.scons.org/doc/2.0.1/HTML/scons-user/a8524.html .
Para obtener más información sobre scons (un reemplazo de marca), consulte http://www.scons.org/
Quería usar el script que publicaste en tu respuesta final .
Desafortunadamente, no funcionó con mi configuración (MacVim con vim-latexsuite, Skim como el visor y XeTeX). También utilizo la búsqueda directa (es decir, uso la función que presionando / ls en Vim saltará al punto correspondiente en el documento PDF en el visor abierto).
Además, mi documento no se llama thesis.tex
(gran sorpresa; no es una tesis). Por lo tanto, he hecho un poco más de trabajo de configuración que me gustaría compartir. Atención, mis habilidades de bash son horribles.
#!/bin/bash
set -x
ulimit -t 10 # sometimes pdflatex gets stuck
if [ "$1" = "" ]; then
echo "No target name specified"
exit 1
fi
TARGET=$1
SOURCE=$1.tex
TMPSOURCE=_$TARGET.tex
TMPTARGET=_$TARGET
while [ 1 ]; do
# Compile a different file ($TMPSOURCE.pdf) so that it doesn''t reload mid-compile
cp $SOURCE $TMPSOURCE
# better than running pdflatex manually, as this wont rebuild if there''s nothing there.
latexmk -pdf -silent $TMPTARGET > /dev/null
# For rubber-info
cp $TMPTARGET.log $TARGET.log
if [ -e $TMPTARGET.pdf ]; then # Check the compile succeeded first
# No output file yet.
[ ! -e $TARGET.pdf ]
HASNOPDF=$?
# ignore if it''s unchanged.
# OS X diff doesn''t consider binary files. Single-line output, return value 2
diff $TARGET.pdf $TMPTARGET.pdf
OUTPUTDIFFERS=$?
if [ $HASNOPDF -eq 0 -o $OUTPUTDIFFERS -ne 0 ]; then
# Do NOT RM since Skim cannot deal with this.
cp $TMPTARGET.pdf $TARGET.pdf
fi
fi
sleep 1 # give it time to be killed by a CTRL-C
done
Esto compila un archivo temporal y lo copia de nuevo al nombre que se le dio (en lugar de hacerlo al revés, como lo hace el script); uso de la secuencia de comandos:
./scriptname project
Donde project
es el nombre del archivo TeX, sin extensión de archivo.
También cambié la línea de rubber-info
de rubber-info
:
autocmd FileType tex exe "set makeprg=rubber-info// _" . expand("%:t:r") . ".log"
Y necesitaba parchar mi latexmk
para usar XeTeX ya que el nombre del ejecutable estaba codificado.
Desafortunadamente, esto aún destruye el archivo PDF de salida cuando latexmk
mi documento antes de completar una declaración, ya que latexmk
parece producir siempre un archivo PDF, incluso si se produce un error, y su código de retorno siempre es 0, lo que es desagradable.
(Para aclarar esto, digamos que acabo de tipear emph{
en mi documento y lo guardo. La secuencia de comandos de fondo compilará rápidamente el documento y fallará, pero seguirá produciendo un archivo de salida (en gran parte vacío)).
Además, la búsqueda directa ya no funciona correctamente; básicamente salta a un punto equivocado en el documento. Sospecho que esto tiene algo que ver con mi copia del documento antes de la compilación.
Por lo tanto, esta sigue siendo una solución completamente insatisfactoria, a pesar de que ni siquiera habilité el guardado continuo al escribir en MacVim todavía.
Uso Eclipse con el complemento TexEcplise para editar mis archivos TeX. Tiene resaltado de sintaxis para LaTeX. Cuando solicite una vista previa de un archivo tex no alterado y ya compilado, abrirá el archivo en el visor. Cuando se modificó el archivo tex, compila el archivo tex antes de verlo. Realiza las iteraciones necesarias, pero solo si es necesario.
Otra ventaja es que todos los errores y advertencias se resumen en un recuadro y se resaltan en el archivo tex. Esta es una screenshot de screenshot de la página de inicio de TexEclipse .
http://www.scons.org/ una respuesta detallada usando http://www.scons.org/ en tex.stackexchange .
Básicamente, pones esto en un archivo llamado SConstruct
:
# make sure scons finds tex executables:
import os
env = Environment(ENV=os.environ)
# target and source:
pdf_output = env.PDF(target=''main.pdf'', source=''main.tex'')
# make sure that the pdf is reloaded properly (e.g., in Skim)
env.Precious(pdf_output)
Puedes construir el pdf simplemente ejecutando
scons
Sorprendentemente , scon detectará los cambios en los archivos / incluidos en el archivo main.tex
y también en el archivo de bibliografía.
ltx dice ser un envoltorio de látex para acelerar la compilación de documentos de látex. Sin embargo, no pude hacerlo funcionar (algunos problemas con initex).
(Este es un trabajo en progreso)
Estoy probando vim-latexsuite en este momento. Básicamente convierte vim en un IDE para látex.
Curva de aprendizaje:
- Muy poco intuitivo, pero después del tutorial, parece estar bien.
- Redefine algunas teclas que me gustan, y parece que no puedo arreglarlas.
Autocompletar:
- Facilita el uso de algunas macros incorporadas
- Agregar << + >> a las macros del usuario es muy molesto.
- Reemplazar "con` `y cosas por el estilo es agradable hasta que lo desee" por alguna razón, entonces es un ejercicio de frustración.
- Su autocompletar también puede ser molesto. Tengo que reprogramarme por trabajar en látex.
Sistema de compilación:
- Horrible
- quickfix no funciona - a menudo me pone en el archivo incorrecto
- Cuando latex informa errores con el resultado dividido en 2 líneas, no lo detecta.