Inkompatibilität zwischen PGFPlots und Listings?

Inkompatibilität zwischen PGFPlots und Listings?

Ich verwende ` als kurzes Inline-Listing-Trennzeichen. Das kompiliert problemlos:

\documentclass{article}
\usepackage{listings, pgfplots}
\pgfplotsset{compat=1.14}
\tikzset{every picture/.style={execute at begin picture={\lstDeleteShortInline{`}}, execute at end picture={\lstMakeShortInline{`}}}}
\AtBeginDocument{\lstMakeShortInline{`}}
\begin{document}
\begin{tikzpicture}
\draw node{Hello};
\end{tikzpicture}
\end{document}

aber dies wirft einen Fehler:

\documentclass{article}
\usepackage{listings, pgfplots}
\pgfplotsset{compat=1.14}
\tikzset{every picture/.style={execute at begin picture={\lstDeleteShortInline{`}}, execute at end picture={\lstMakeShortInline{`}}}}
\AtBeginDocument{\lstMakeShortInline{`}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {(1,1) (2,2)};
\end{axis}
\end{tikzpicture}
\end{document}

und der Fehler ist dieser:

Package Listings Error: ` is not a short reference for \lstinline.

Gibt es eine Möglichkeit, in einem Dokument sowohl pgfplots als auch durch Backticks getrennte Inline-Codeausschnitte zu verwenden?

Antwort1

Das Problem ist, dass Listings eine Verknüpfung, die bereits deaktiviert ist, nicht deaktivieren möchte. Und da pgfplots Bilder verschachtelt, erhalten Sie einen Fehler. Sie können Ihr eigenes Deaktivierungsmakro schreiben, das die doppelte Einstellung vermeidet:

\documentclass{article}
\usepackage{listings}
\usepackage{pgfplots}
\newcommand\deactivemyshortinline{%
 \expandafter\ifx\csname lst@ShortInlineOldCatcode\string`\endcsname\relax
  \else  
   \lstDeleteShortInline{`}%
 \fi}

\pgfplotsset{compat=1.14}
\tikzset{every picture/.style={execute at begin picture={\deactivemyshortinline}}, execute at end picture={\lstMakeShortInline{`}}}
\AtBeginDocument{\lstMakeShortInline{`}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {(1,1) (2,2)};
\end{axis}
\end{tikzpicture}
\end{document}

verwandte Informationen