플롯 캡션에 (일반) 목록 코드를 추가해야 합니다. 어떤 이유로 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
다음을 사용하고 싶습니다.같은가능하다면 코드에 관계없이. 아마도 솔루션은 환경 tikzpicture
이나 패키지 tikz
또는 listing
.
(이러한 verb
환경은 항상 나에게 두통을 안겨준다.)
편집하다: Gonzalo의 설명 덕분에 캡션 내부와 외부에서 동일한 코드를 사용할 수 있는 다음 코드를 만들었습니다. 해킹을 사용합니다( \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-macro"가 실행되기 전에 인수를 읽기 때문에 이 패키지는 입력을 보존하기 위해 아무것도 할 수 없습니다: 공백이 한 공백으로 줄어들고, 표 작성기와 줄 끝이 공백으로 변환되고, TeX의 주석 문자는 공백으로 변환되지 않습니다. 인쇄 가능 등. 그러므로 조금 더 노력해야 합니다. 다음 4개 문자 각각 앞에 백슬래시를 넣어야 합니다\{}%
. 또한 다음과 같은 경우에도 동일한 방식으로 공백을 보호해야 합니다. (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}