Мне нужно добавить (общий) код листинга в заголовок участка. По какой-то причине 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}
Один из найденных мной обходных путей — поместить \{
... \}
в \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}