Плохое взаимодействие между пакетом синтаксиса mdwtools и graphicsx

Плохое взаимодействие между пакетом синтаксиса mdwtools и graphicsx

Я пишу документ, в который хочу включить некоторые изображения с помощью graphicxи \includegraphicsотобразить некоторые грамматики BNF с помощью syntaxпакета mdwtools, однако получаю сообщение об ошибкеundefined control sequence при попытке использовать их вместес некоторыми именами файлов.

Минимальный пример, который не работает:

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{logo_uniud_black}

\end{document}

При компиляции получаю следующую ошибку:

(/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.)

Комментирование \usepackage{syntax}решает проблему. Также работает использование имени файла, не содержащего подчеркивания, так что этот код не даст сбой:

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{logouniudblack}

\end{document}

Почему я получаю эту ошибку и как она связана с подчеркиванием в имени файла? Есть ли способ исправить это, не переименовывая все файлы, которые мне нужно включить?


Редактировать:

На самом деле, похоже, что даже названия разделов с подчеркиванием создают проблемы, поэтому \includeвозникают похожие ошибки, например, с источником:

\documentclass{article}

\usepackage{syntax}

\begin{document}

\include{sintassi_astratta}

\end{document}

Я получаю следующие ошибки:

(/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}

 )

Если я не ошибаюсь, вместо того, чтобы искать, sintassi_astratta.texон ищет sintassi.tex. Кажется, syntaxэто переопределение подчеркивания каким-то образом, что все ломает.

решение1

В syntaxпакете есть nounderscoreопция; тогда вам нужно использовать \_для составных имен.

Если вы предпочитаете иметь _смысл \_за пределами математического режима, то используйте

\input{\detokenize{file_name}}

и аналогично для \includeили \includegraphics. Так что

\documentclass{article}

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

\begin{document}

\includegraphics{logo_uniud_black}

\end{document}

будет работать так же хорошо, как

\documentclass{article}

\usepackage{syntax}
\usepackage{graphicx}

\begin{document}

\includegraphics{\detokenize{logo_uniud_black}}

\end{document}

решение2

использовать \string_для подчеркивания

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

Связанный контент