Как использовать списки внутри подписей pgfplots?

Как использовать списки внутри подписей pgfplots?

Мне нужно добавить (общий) код листинга в заголовок участка. По какой-то причине listings(встроенный) не взаимодействует с \addlegendentry, что я могу сделать, чтобы один и тот же код работал снаружи и внутри \addlegendentryсреды?

Обратите внимание, что это даже дает странный результат (см. изображение), где фраза находится в неправильном порядке.

\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}
\begin{document}
\lstinline[]|(double x){bbbb}| %ok

\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\lstinline[]|(double x){bbbb;}|}; %not ok, garbage
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
}; 
\end{axis}
\end{tikzpicture}
\end{document}

странный листинг внутри pgfplot

Один из найденных мной обходных путей — поместить \{... \}в \legendentryкорпус, но это не даст того же эффекта снаружи, pgfplotа я хочу использоватьтакой жеcode независимо, если это возможно. Возможно, решение — это опция, которую я должен передать среде tikzpicture, или пакету tikz, или listing.

( verbПодобные среды всегда вызывают у меня головную боль.)


РЕДАКТИРОВАТЬ: Благодаря разъяснениям Гонсало я создал этот код, который позволяет использовать один и тот же код внутри и снаружи подписи, он использует хак ( \textrmдругие решения приветствуются):

\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}
\begin{document}
\textrm{\lstinline[]|(double x)\{bbbb\}|} %ok
\begin{tikzpicture}
\begin{axis}[small]
\addlegendentry{\textrm{\lstinline[]|(double x)\{bbbb\}|}}; %now ok
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )}; 
\addlegendentry{\lstinline[]|(double x){bbbb;}|}; % not ok, garbage
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )}; 
\addlegendentry{\lstinline[]|(double x)\{bbbb\}|}; % not what one expects
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {( 1, 2 )}; 
\end{axis}
\end{tikzpicture}
\end{document}

решение1

Использование \lstinlineвнутренних аргументов является экспериментальным; см. этот подраздел в документации:

5.1 Листинги внутри аргументов

Есть несколько вещей, которые следует учитывать, если вы хотите использовать \lstinlineсреду листинга внутри аргументов. Поскольку TeX считывает аргумент до выполнения макроса "lst-", этот пакет не может ничего сделать для сохранения ввода: пробелы сокращаются до одного пробела, табулятор и конец строки преобразуются в пробелы, символ комментария TeX не является печатаемым и т. д. Следовательно, вам придется немного потрудиться. Вам нужно поставить обратную косую черту перед каждым из следующих четырех символов: \{}%. Более того, вы должны защитить пробелы таким же образом, если: (i) есть два или более пробелов, следующих друг за другом, или (ii) пробел является первым символом в строке. Этого недостаточно: каждая строка должна заканчиваться "переводом строки" ^^J. И вы не можете перейти в LaTeX внутри таких листингов!

Боюсь, что единственным решением, как предлагается в документации, будет использование \{и \}:

\documentclass[]{article}
\usepackage{pgfplots}
\usepackage[]{listings}

\begin{document}

\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\lstinline[]|(double x)\{bbbb;\}|}; 
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
}; 
\end{axis}
\end{tikzpicture}

\end{document}

введите описание изображения здесь

Альтернативой может быть использование listingsинтерфейса fancyvrb(или использование fancyvrbнапрямую):

\documentclass[]{article}
\usepackage{pgfplots}
\usepackage{fancyvrb}

\fvset{commandchars=\\\{\}}

\begin{document}
\Verb!(double x)\{bbbb;\}!

\begin{tikzpicture}
\begin{axis}[]
\addlegendentry{\Verb!(double x)\{bbbb;\}!}; 
\addplot+[mark=none, line join=round, fill opacity = 0.5, ] coordinates {
( 1, 2 )
( 3, 4)
}; 
\end{axis}
\end{tikzpicture}

\end{document}

введите описание изображения здесь

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