¿Análisis estático de documentos LaTeX?

¿Análisis estático de documentos LaTeX?

Para lenguajes de programación como C,,, etc. C++, siempre existe algún tipo de analizadores estáticos, herramientas que verifican el código fuente en busca de código inalcanzable, variables no utilizadas, pérdidas de memoria y otro tipo de cosas que no son relevantes para la compilación (por lo que los compiladores no lo hacen). No lo reporto ni lo noto en absoluto).C#Java

¿Existen herramientas similares para LaTeX?

Por supuesto, hay algunos paquetes, como onlyamsmatho nag, que comprueban si hay macros o paquetes obsoletos y refchecksi hay etiquetas no utilizadas. ¿Pero existen paquetes y/o herramientas que verifican o sugieren

  • Código inalcanzable: ¿ \if\else\ficonstrucciones donde nunca se puede llegar a uno o más caminos?
  • ¿Bucles ineficientes, como \foreachlos que podrían simplificarse?
  • ¿Definiciones de macros no utilizadas?
  • ¿Sugiriendo el uso de \newcommand*en lugar de \newcommandcuando sea apropiado?
  • ¿Falta sospechosa de posibles corchetes o espacios en blanco? Como:
    1. a^b c- claro
    2. a^{bc}- claro
    3. a^bc- sospechoso: se representa como 1. pero ¿tal vez 2. era lo previsto?
  • ¿líneas vacías sospechosas (párrafos)? ¿Por ejemplo entre texto y ecuación?
  • sospechoso o desaparecidocomentarios de final de línea?
  • ¿Qué otra cosa se te ocurre que a menudo sea incorrecta, ineficaz o poco clara para el ojo humano?

Respuesta1

La respuesta corta es que no es posible.

Hay algunas herramientas que hacen algunas cosas, pero en realidad no pueden analizar el documento de látex, por lo que cualquier consejo que den solo debe tomarse como una sugerencia; podría estar equivocado.

La gran diferencia entre LaTeX y los lenguajes que usted menciona, como C y Java, es que la sintaxis de LaTeX no se puede analizar, incluso el análisis léxico básico y la tokenización de la entrada dependen del comportamiento en tiempo de ejecución.

\section[abc}

Parece que podría tratarse de un error de sintaxis que se podría esperar que detecte un análisis estático, pero el documento podría estar

\documentclass{article}

\ifodd\time\catcode`[1\fi
\begin{document}

\section[abc}

aa
\end{document}

lo que significa que es o no un documento válido dependiendo del número de minutos transcurridos desde la medianoche. Obviamente este es un caso extremo, pero no tanto como podría pensarse. Muchos paquetes hacen cosas similares que cambian el análisis del documento, piense en las taquigrafías de Babel, por ejemplo. El hecho de que Babel se haya cargado se puede detectar estáticamente inspeccionando el preámbulo, pero determinar qué idioma está vigente en cualquier momento realmente requiere ejecutar un intérprete LaTeX completo.

Incluso si fuera posible, me preguntaría si algunos de sus elementos realmente deberían marcarse.

  • Código inalcanzable: ¿ \if\else\ficonstrucciones donde nunca se puede llegar a uno o más caminos?

La dificultad aquí es determinar qué tokens son en realidad pruebas; en su mayoría, no se ven primitivas de Tex como, por ejemplo, \if pero los tokens definidos mediante \newiflos cuales son más difíciles de reconocer por un verificador. Quizás se podría suponer que cada token que comienza \if..es un token if en este sentido, pero, por ejemplo, LaTeX \ifthenelsecomienza con \if....pero tiene una sintaxis muy diferente.

  • ¿Bucles ineficientes, como \foreachlos que podrían simplificarse?

\foreaches simplemente una macro, por lo que casi por definición cualquier uso particular de ella puede simplificarse expandiendo la macro. Pero esto puede no verse como una simplificación...

  • ¿Definiciones de macros no utilizadas?

LaTeX y todos sus paquetes son definiciones de macros y la mayoría de los documentos no utilizan la mayoría de los comandos definidos, por lo que normalmente hay miles de macros no utilizadas en un documento determinado.

  • ¿Sugiriendo el uso de \newcommand*en lugar de \newcommandcuando sea apropiado?

No estoy seguro de cómo se podría hacer esto a menos que registre cada uso de la macro en un documento determinado y tenga en cuenta que nunca ocurre en ese caso.

  • ¿Falta sospechosa de posibles corchetes o espacios en blanco? Como:
    1. a^b c- claro
    2. a^{bc}- claro
    3. a^bc- sospechoso: se representa como 1. pero ¿tal vez 2. era lo previsto?

No estoy de acuerdo con este cheque. 2. es la sintaxis estándar de látex. Si decide permitir 1. entonces debería permitir 3 también sin comentarios. Es una parte central del diseño de la sintaxis del modo matemático TeX que el espacio en blanco no es significativo más que terminar los nombres de los comandos.

  • ¿líneas vacías sospechosas (párrafos)? ¿Por ejemplo entre texto y ecuación?

TeX se toma algunas molestias para distinguir el caso de que el texto que sigue a una visualización sea o no un párrafo nuevo, y LaTeX emula este comportamiento para todos sus entornos de listas. Entonces, a menos que el analizador estático interprete las oraciones y sugiera que no debería ser el comienzo de un párrafo, no debería comentar las líneas en blanco.

  • ¿Sospechoso o faltan [comentarios al final de la línea] [1]?

Sí, siempre que pueda reconocer el inicio de la sintaxis de latex3 o paquetes similares que cambien las reglas y el significado, %no es necesario.

  • ¿Qué otra cosa se te ocurre que a menudo sea incorrecta, ineficaz o poco clara para el ojo humano?

conseguir que un humano revise el documento es una buena idea, los ojos humanos son aún mejores en esto que las máquinas :-)

Respuesta2

Si bien la respuesta aceptada tiene varios puntos positivos, existe software para realizar análisis estáticos de LaTeX. Como era de esperar, no son tan completos como los linters para un lenguaje como Python.

El linter más notable esChkTeX. también esta enCTANy es parte deTeX en vivo(desde2010).

información relacionada