Ich schreibe ein Dokument, in dem ich sowohl einige Bilder über graphicx
's einbinden \includegraphics
als auch einige BNF-Grammatiken mit dem syntax
Paket von anzeigen möchte mdwtools
, jedoch erhalte ich eine Fehlermeldung, undefined control sequence
wenn ich versuche, sie zusammen zu verwenden.mit einigen Dateinamen.
Ein Minimalbeispiel, das fehlschlägt:
\documentclass{article}
\usepackage{syntax}
\usepackage{graphicx}
\begin{document}
\includegraphics{logo_uniud_black}
\end{document}
Beim Kompilieren erhalte ich die folgende Fehlermeldung:
(/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.)
Das Auskommentieren \usepackage{syntax}
behebt das Problem. Auch die Verwendung eines Dateinamens, der keinen Unterstrich enthält, funktioniert, sodass dieser Code nicht fehlschlägt:
\documentclass{article}
\usepackage{syntax}
\usepackage{graphicx}
\begin{document}
\includegraphics{logouniudblack}
\end{document}
Warum erhalte ich diesen Fehler und was hat er mit dem Unterstrich im Dateinamen zu tun? Gibt es eine Möglichkeit, ihn zu beheben, ohne alle einzubindenden Dateien umzubenennen?
Bearbeiten:
Tatsächlich scheinen sogar Abschnittsnamen mit Unterstrichen Probleme zu verursachen, sodass \include
ähnliche Fehler auftreten, beispielsweise bei der Quelle:
\documentclass{article}
\usepackage{syntax}
\begin{document}
\include{sintassi_astratta}
\end{document}
Ich erhalte folgende Fehler:
(/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}
)
Wenn ich mich nicht irre, wird statt sintassi_astratta.tex
nach gesucht nach sintassi.tex
. Es scheint, als syntax
würde der Unterstrich auf eine Art neu definiert, die alles kaputt macht.
Antwort1
Das syntax
Paket verfügt über eine Option, die Sie dann für zusammengesetzte Namen nounderscore
verwenden müssen .\_
_
Wenn Sie eine Bedeutung \_
außerhalb des Mathematikmodus bevorzugen , verwenden Sie
\input{\detokenize{file_name}}
und ebenso für \include
oder \includegraphics
. Also
\documentclass{article}
\usepackage[nounderscore]{syntax}
\usepackage{graphicx}
\begin{document}
\includegraphics{logo_uniud_black}
\end{document}
wird genauso gut funktionieren wie
\documentclass{article}
\usepackage{syntax}
\usepackage{graphicx}
\begin{document}
\includegraphics{\detokenize{logo_uniud_black}}
\end{document}
Antwort2
\string_
für einen Unterstrich verwenden
\includegraphics{/tmp/logo\string_uniud\string_black}