2010-07-14 20 views
11

Estoy utilizando la distribución MiKTeX 2.8 para Windows.¿Cómo trato las advertencias de LaTeX como errores?

Desarrollamos principalmente software y utilizamos LaTeX para realizar nuestras instrucciones de uso. Utilizamos látex porque:

  • Es muy bueno bajo control de origen para el seguimiento de los cambios etc.
  • La fuente archivos no repente deciden convertirse en corruptos, a diferencia de los documentos de Word.
  • Varios documentos pueden compartir secciones individuales, por lo que podemos aplicar el principio DRY a nuestra documentación y evitar que algunos documentos se desincronicen con otros. Puede tener documentos maestros en Word, pero los he encontrado como escamosa como el infierno.

Como parte del proceso de compilación desatendida en nuestro servidor de compilación, construimos la documentación utilizando el ejecutable texify de MiKTeX. Esto funciona bastante bien.

Sin embargo, los problemas se producen cuando un desarrollador comete un error (por ejemplo, \ ref a \ etiqueta que no existe). Un error como ese solo genera una advertencia en LaTeX. La advertencia pasa desapercibida por texify, y nos quedan errores en la documentación.

Actualmente tengo un paso de compilación que escanea los archivos de registro de las líneas que comienzan con 'LaTeX Warning' y falla la compilación, si la hay. Esto funciona, pero obviamente es bastante inestable y puede dejar pasar las advertencias. Actualmente no se utiliza en compilaciones locales en máquinas de desarrollo, pero si esa es la única forma de hacerlo, es posible que tenga que integrarlo con el editor que estamos utilizando actualmente (TeXworks incluido con MiKTeX).

Me gustaría fallar la compilación si se produce alguna advertencia, como una referencia indefinida, y prefiero no hacer escaneos escamosos de archivos de registro. ¿Hay algo que ofrezca esta característica?

Si puedo usar esta característica en compilaciones locales en máquinas de desarrollo, así como en el servidor de compilación, sería una gran ventaja.

+2

También debería intentar preguntar esto en http://tex.stackexchange.com – Novelocrat

Respuesta

4

El (no probado) siguiente código debe convertir cualquier advertencia en un error:

\renewcommand{\GenericWarning}[2]{\GenericError{#1}{#2}{}{This warning has been turned into a fatal error.}} 

entonces usted puede estar interesado en el paquete silence filtrar advertencias.

Sin embargo, también deberá hacer los arreglos para hacer esto solo durante la última ejecución de LaTeX, ya que se esperan algunas advertencias, como la referencia no definida, durante las primeras ejecuciones.

Los editores con buena compatibilidad con LaTeX le dirán si necesita volver a ejecutar LaTeX (¿no lo hace TeXworks?). Lo hacen al analizar la salida de la consola o el archivo de registro. De hecho, es razonablemente robusto (y si realmente está preocupado, puede redefinir \GenericWarning para agregar una cadena característica a todas las advertencias). Creo que analizar los registros es la forma correcta de hacerlo.

Piense en esto como una prueba para ejecutar en contra de la documentación. Si hay referencias no definidas, la compilación de documentación tiene éxito. Los productos de compilación son el pdf (o lo que sea) y los registros de TeX. Comprobar las advertencias en los registros es una prueba.

1

Lo mejor sería hacerlo a través de la administración de trabajos de Latex, pero no sé de qué manera hacerlo.

Aquí hay un poco de cinta adhesiva no probado que podría ser útil:

 
\def\exitfromtex{\nonstopmode\read16to\dummy} 
\let\writerrmessage\errmessage 
\def\errmessage#1{\writerrmessage{#1}\exitfromtex} 

Podría ser puesto en un archivo de paquete que necesita sus documentalistas para incluir, o al horno en su local de látex .fmt archivo.

+0

Gracias Charles, lo probaré en los próximos días. –

Cuestiones relacionadas