2011-07-18 20 views
24

Si uso la versión en línea de lstlisting como se muestra:

\lstinline{!$omp parallel for} 

el resaltado de sintaxis en Vim va mal, y el resto del archivo de látex es de color rojo como si es parte de la lista de códigos. Es el dólar $ el que causa el problema. ¿Cómo puedo evitar esto?

+6

Esto parece ser un error en el resaltado de sintaxis de vim general para tex como '\ verb {! $ Omp}' produce el mismo resultado. Puede probar el archivo de sintaxis más nuevo de http://mysite.verizon.net/astronaut/vim/syntax/tex.vim.gz y ponerse en contacto con su autor Charles E. Campbell, Jr. – Jakob

+2

50 rep para quien conteste con ** corregir ** para tex.vim. – ThiefMaster

Respuesta

0

No tengo este problema. Estoy ejecutando Vim 7.3.46 con filetype = tex. (El mío predeterminado es "plaintex" en archivos .tex; es posible que desee verificar el tipo de archivo con: set ft?)

+0

Suerte. Yo uso Vim 7.3 y ': set ft?' Da filetype = tex. – user2023370

6

Esto no es realmente un error, es por diseño. Para resaltar esto correctamente, Vim tendría que analizar e interpretar todo el documento TeX hasta el punto en que se produce este código, ya que TeX es un lenguaje contextual. Esto es demasiado complejo y lleva mucho tiempo para un complemento de resaltado de sintaxis.

La única solución aceptable sería volver a escribir el resaltador de sintaxis desde cero, utilizando una implementación completa de TeX que emite metainformación para cada token en el código fuente. Este es un gran proyecto . Hasta donde yo sé, ninguna implementación de TeX disponible actualmente brinda esa información, lo que significa que uno realmente debería escribir esto.

+4

Bueno, sería suficiente si maneja bloques '\ lstinline {...}' como, por ejemplo, '\ begin {lstlisting} ... \ end {lstlisting}' donde todo funciona bien. – ThiefMaster

4

Esto funciona para mí:

\lstinline[mathescape]{!$\$$omp parallel for} 

Por lo que yo entiendo, es de composición tipográfica de símbolo del dólar en modo matemático, pero no pude ver ninguna diferencia visible.

2

Tuve un problema similar al insertar comandos R para knitr en archivos tex. Tenía un montón de $ y otros caracteres especiales dentro de \rinline{}. Y lo arreglé para que Vim ignore el texto dentro de este comando.

Quiere editar el archivo tex.vim, en mi distribución es sudo vim /usr/share/vim/vim73/syntax/tex.vim

en CA. line 228:

syn match texInputFile  "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"  contains=texStatement,texInputCurlies,texInputFileOpt 

Cambiar a:

syn match texInputFile  "\\\(epsfig\|input\|usepackage\|rinline\)\s*\(\[.*\]\)\={.\{-}}"  contains=texStatement,texInputCurlies,texInputFileOpt 

... o para lstinline:

syn match texInputFile  "\\\(epsfig\|input\|usepackage\|lstinline\)\s*\(\[.*\]\)\={.\{-}}"  contains=texStatement,texInputCurlies,texInputFileOpt 
+0

Opcionalmente agregue 'syn match texInputFile" \\ lstinline \ s * \ (\ [. * \] \) \ = {. \ {-}} "contains = texStatement, texInputCurlies, texInputFileOpt' a' $ HOME/.vim/after/syntax/tex/lstinline.vim' (o similar). Para obtener más información, consulte https://github.com/LaTeX-Box-Team/LaTeX-Box/issues/124 – timss

0

Pasando por el enlace publicado por el TIMSS en la respuesta de user1174052, he encontrado Dr Chip's Vim Page, que proporciona el lstlisting.vba.gz plugin de Vimball. Descarga, abierta en Vim ...

vim lstlisting.vba.gz 

... ejecutar el vimball ...

:so % 

... y la próxima vez que abra un archivo LaTeX, contenido de lstlisting ambientes son completamente ignorado por el resaltado de sintaxis.

El crédito va para el usuario timss, que publicó el enlace al boleto de LaTeX-Box, donde también publicó el enlace a la página del Dr. Chip. Agregué esta respuesta simplemente como un atajo de "enlace directo".

+0

¡Gracias por el crédito! Creo que finalmente concluí este problema, así que echa un vistazo a mi nueva (gran) publicación. – timss

16

¡Finalmente resolvamos este problema de una vez por todas!

Envié por correo a Charles E. Campbell, el mantenedor de tex.vim, sugiriendo que agregaría reglas de resaltado para el paquete de listados. Sin embargo, resulta que falta soporte para el paquete de listados en tex.vim es realmente intencional. El razonamiento se puede encontrar :h tex-package. En resumen, se supone que debe crear sus propias reglas de resaltado de sintaxis ampliadas (vea la parte inferior de la publicación):

Tex: ¿Desea resaltar más comandos?

LaTeX es un lenguaje programable, por lo que hay miles de paquetes completos de comandos especializados LaTeX, sintaxis y fuentes. Si está usando un paquete como este , a menudo deseará que la sintaxis distribuida/tex.vim sea compatible con . Sin embargo, claramente esto no es práctico. Por lo tanto, considere usar las técnicas en mysyntaxfile-add para ampliar o modificar el resaltado provisto por syntax/tex.vim. Por favor, considere cargar cualquier extensión que escriba, que típicamente iría en $ HOME/after/syntax/tex/[pkgname] .vim, al http://vim.sf.net/.

Personalmente, creo que es un poco desafortunado que no se incluya, ya que seguramente aumenta el umbral para que el usuario promedio escriba su LaTeX usando Vim. Encontrar y agregar resaltado de sintaxis para lstlisting, lstinline etc. no es demasiado fácil. No parece que va a cambiar en el corto plazo al mirar el hilo this.

DevSolar parece que ya lo ha encontrado (y agradezco el mérito), pero Campbell ofrece un par de example LaTeX package support vimballs. El primero, lstlisting.vba.gz, incluye reglas de resaltado para lstlisting y lstinputlisting. Sin embargo, falta lstinline, de lo que se trata este tema.

Por último, aquí está mi listings.vim residía en $HOME/.vim/after/syntax/tex/

syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" 
syn region texZone start="\\lstinputlisting" end="{\s*[a-zA-Z/.0-9_^]\+\s*}" 
syn match texInputFile "\\lstinline\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt 

-

Proper highlighting of verbatim, lstlisting and lstinline environments.

Ésta parece ser la solución preferida. No es necesario alterar los archivos de todo el sistema en /usr/share/vim/.., no tiene que descargar y generar un vimball o alterar entornos en lugar de corregir la sintaxis que se destaca. Podría considerar liberar esto como un simple complemento para hacerlo más accesible.

Por último, recuerde comprobar que en realidad está ejecutando el tipo de archivo tex y no plaintex que no es demasiado para ser viable. Ya ha publicado esto en un comentario anterior, pero se puede encontrar más información en un ticket I added to LaTeX-Box.

+0

"Como se muestra en otras respuestas, la teoría de Konrad Rudolph de que el resaltador de sintaxis de Vim no está preparado para el trabajo también está un poco fuera de lugar". - Incorrecto. Parece que no entiendes cómo funciona LaTeX. Si "arreglas" el problema, un simple '\ let \ foo \ verb' lo reintroduce. ** No puedes ** resolver este problema de forma general, como expliqué en mi respuesta. Todo lo que puede esperar lograr son soluciones muy limitadas (lo que obviamente está bien si lo personaliza para sus propósitos, pero proporcionar un valor predeterminado no es práctico si utiliza LaTeX correctamente, es decir, al escribir código semántico). –

+0

@KonradRudolph Perdón si malinterpreté su respuesta. ¿En qué contexto '\ let \ foo \ verb' reintroduce el problema? Intenté jugar con eso, pero fue en vano. ¿De qué manera los cambios menores a la sintaxis de tex resaltar que tengo en mi respuesta no funcionan para el "código semántico"? – timss

+0

Bueno, una vez que use sus propias macros en lugar de las predefinidas, el resaltador de sintaxis ya no reconoce el código literal. Debe tener conocimiento explícito de sus macros. –

4

El problema inicial me pareció que el resto del tex-File se muestra con resaltado de sintaxis desordenado. Así que tal vez la solución fácil y factible podría ser el uso de un

%stopzone 

después de la lstlisting-Región.

Cuestiones relacionadas