Mala interacción entre el paquete de sintaxis de mdwtools y graphicx

Mala interacción entre el paquete de sintaxis de mdwtools y graphicx

Estoy escribiendo un documento en el que quiero incluir algunas imágenes vía graphicxy \includegraphicsmostrar algunas gramáticas BNF usando el syntaxpaquete de mdwtools, sin embargo, recibo un error deundefined control sequence cuando intento usarlas juntas.con algunos nombres de archivos.

Un ejemplo mínimo que falla:

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{logo_uniud_black}

\end{document}

Al compilar esto me sale el siguiente error:

(/usr/share/texlive/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Undefined control sequence.
\filename@simple ...#2\\}\fi \edef \filename@base 
                                                  {#1}
l.8 \includegraphics{logo_uniud_black}

   [omissis]

! Undefined control sequence.
\filename@simple ...#2\\}\fi \edef \filename@base 
                                                  {#1}
l.8 \includegraphics{logo_uniud_black}

(That makes 100 errors; please try again.)

Comentar \usepackage{syntax}soluciona el problema. También funciona el uso de un nombre de archivo que no contenga guión bajo, para que este código no falle:

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{logouniudblack}

\end{document}

¿Por qué aparece este error y cómo se relaciona con el guión bajo en el nombre del archivo? ¿Hay alguna manera de solucionarlo sin cambiar el nombre de todos los archivos que debo incluir?


Editar:

En realidad, parece que incluso los nombres de secciones con guión bajo crean problemas, por lo que \includegeneran errores similares, por ejemplo con la fuente:

\documentclass{article}

\usepackage{syntax}

\begin{document}

\include{sintassi_astratta}

\end{document}

Recibo estos errores:

(/usr/share/texlive/texmf-dist/tex/latex/mdwtools/syntax.sty) (./bad_doc.aux)
! Undefined control sequence.
\GenericError  ...                                
                                                    #4  \errhelp \@err@     ...
l.7 \include{sintassi_astratta}

! Undefined control sequence.
\GenericError  ...                                
                                                  \let \@err@               ...
l.7 \include{sintassi_astratta}

! Undefined control sequence.
\GenericError  ...                                
                                                  \@empty \def \MessageBreak...
l.7 \include{sintassi_astratta}

! Undefined control sequence.
\GenericError  ...                                
                                                     \endgroup 
l.7 \include{sintassi_astratta}

! Argument of \reserved@b has an extra }.
<inserted text> 
                \par 
l.7 \include{sintassi_astratta}

Runaway argument?
{\usc@builtindischyphen }\futurelet \@let@token \@ifnch astratta.aux
! Paragraph ended before \reserved@b was complete.
<to be read again> 
                   \par 
l.7 \include{sintassi_astratta}

(./sintassi.tex)
! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.7 \include{sintassi_astratta}

! Too many }'s.
\@filef@und ...\@let@token \let \discretionary {-}
                                                  {}{}\discretionary {-}{}{}...
l.7 \include{sintassi_astratta}

[1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}] (./sintassi.tex)
Runaway text?
\@setckpt{sintassi\protect \unhbox \voidb@x \kern .06em\vbox {\hrule \ETC.
! File ended while scanning text of \write.
<inserted text> 
                }
l.7 \include{sintassi_astratta}

! Unbalanced write command.
<write> ... \@setckpt {sintassi_astratta}\@charlb 

l.7 \include{sintassi_astratta}

(./bad_doc.aux
Runaway argument?
{sintassi\protect \global \let \OT 1\textunderscore \unhbox \voidb@x \ETC.
! Paragraph ended before \@input was complete.
<to be read again> 
                   \par 
l.5 

! Missing { inserted.
l.7 ...or immediate help   \endgroup {}\def \par }

)

LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right.

! Missing } inserted.
<inserted text> 
                }
l.9 \end{document}

! Missing } inserted.
<inserted text> 
                }
l.9 \end{document}

! Extra \endgroup.
<recently read> \endgroup 

l.9 \end{document}

 )

Si no me equivoco en lugar de buscar sintassi_astratta.texes buscar sintassi.tex. Parece que syntaxse está redefiniendo el guión bajo de alguna manera que lo rompe todo.

Respuesta1

El syntaxpaquete tiene una nounderscoreopción; luego deberá usarlo \_para nombres compuestos.

Si prefiere tener _significado \_fuera del modo matemático, utilice

\input{\detokenize{file_name}}

y de manera similar para \includeo \includegraphics. Entonces

\documentclass{article}

\usepackage[nounderscore]{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{logo_uniud_black}

\end{document}

funcionará tan bien como

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{\detokenize{logo_uniud_black}}

\end{document}

Respuesta2

utilizar \string_para un guión bajo

\includegraphics{/tmp/logo\string_uniud\string_black}

información relacionada