mdwtools의 구문 패키지와 graphicx 간의 잘못된 상호 작용

mdwtools의 구문 패키지와 graphicx 간의 잘못된 상호 작용

graphicx를 통해 이미지를 포함 하고 패키지를 \includegraphics사용하여 BNF 문법을 표시하려는 문서를 작성 중입니다. 하지만 함께 사용하려고 하면 오류가 발생합니다.syntaxmdwtoolsundefined 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}

관련 정보