在下面的代码中,在第一帧我使用 排版了一个代码片段verbatim
,一切正常。
在第二帧中,我想向代码片段添加 TikZ 注释,但我必须切换回手动指定空格和换行符,因为尝试在内部alltt
(或启用了该功能fancyvrb
的环境中commandchars
)使用 TikZ 会给我错误消息,提示 TikZ 不喜欢逐字包弄乱美元符号。此外,它还会弄乱注释行中的间距,数字不会与其他数字垂直对齐。
在第三帧上,我想将带注释的代码片段放在标注中。为了做到这一点,我必须使用保存框,这很好,但出于某种原因,我必须将代码片段放在 中tikzpicture
,否则保存框会给我一条关于缺少 的错误消息\item
。
我的问题是
- 如何将此 TikZ 注释添加到逐字(或最好
lstlisting
)环境中?- 请记住,解决方案也必须在标注内起作用。
- 如果间距能保留的话就更好了。
- 为什么我需要在保存框里放一张 tikzpicture?
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.callouts}
\newcommand{\circleerror}[1]{\tikz[baseline=(char.base)]\node(char){#1} [overlay] circle (10pt) [at=(char), draw, red];}
\newsavebox{\mybox}
\begin{document}
\begin{frame}[fragile]
\begin{verbatim}
CONTROL
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.15 0.0 0.0
0.0 0.15 0.45 0.15 0.0
0.0 0 0 0.15 0.0 0.0
0.0 0.0 0.0 0.0 0.0
\end{verbatim}
\end{frame}
\begin{frame}
\ttfamily\raggedright
CONTROL\\
0.0 0.0\ \ 0.0\ \ 0.0\ \ 0.0\\
0.0 0.0\ \ 0.15 0.0\ \ 0.0\\
0.0 0.15 0.45 0.15 0.0\\
0.0\
\circleerror{0 0}%
\ 0.15 0.0\ \ 0.0\\
0.0 0.0\ \ 0.0\ \ 0.0\ \ 0.0
\end{frame}
\begin{frame}
Some text.
Some other text.\tikz[overlay, remember picture] \coordinate (note);
\sbox{\mybox}{\begin{tikzpicture}
\node [align=left, font=\ttfamily] {
CONTROL\\
0.0 0.0\ \ 0.0\ \ 0.0\ \ 0.0\\
0.0 0.0\ \ 0.15 0.0\ \ 0.0\\
0.0 0.15 0.45 0.15 0.0\\
0.0\
\circleerror{0 0}%
\ 0.15 0.0\ \ 0.0\\
0.0 0.0\ \ 0.0\ \ 0.0\ \ 0.0};
\end{tikzpicture}}
\begin{tikzpicture}[overlay, remember picture]
\node at (7,2) [fill=yellow, ellipse callout, callout absolute pointer=(note)] {\usebox{\mybox}};
\end{tikzpicture}
\end{frame}
\end{document}
答案1
也许,下面就是您正在寻找的:
逐字文本由包设置
listings
。选项可以通过 设置listing options
。红色圆圈设置在
finish
选项内。注意,定位必须手动进行,因为它是在列表上绘制的。对于标注,列表被保存并再次重新加载。请注意
hbox
限制列表大小的附加选项。该操作是使用
tcolorbox
包及其listings
库完成的。
得出:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.callouts}
\usepackage[most]{tcolorbox}
\begin{document}
\begin{frame}[fragile]
\begin{tcblisting}{listing only,
listing options={aboveskip=0pt,belowskip=0pt,
columns=fullflexible, keepspaces=true,
basicstyle=\ttfamily,nolol},
blanker}
CONTROL
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.15 0.0 0.0
0.0 0.15 0.45 0.15 0.0
0.0 0 0 0.15 0.0 0.0
0.0 0.0 0.0 0.0 0.0
\end{tcblisting}
\end{frame}
\begin{frame}[fragile]
\begin{tcblisting}{listing only,
listing options={aboveskip=0pt,belowskip=0pt,
columns=fullflexible, keepspaces=true,
basicstyle=\ttfamily,nolol},
blanker,
finish={\draw[red] (1.1,0.75) circle (10pt);}}
CONTROL
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.15 0.0 0.0
0.0 0.15 0.45 0.15 0.0
0.0 0 0 0.15 0.0 0.0
0.0 0.0 0.0 0.0 0.0
\end{tcblisting}
\end{frame}
\begin{frame}[fragile]
Some text.
Some other text.\tikz[overlay, remember picture] \coordinate (note);
\begin{tcboutputlisting}
CONTROL
0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.15 0.0 0.0
0.0 0.15 0.45 0.15 0.0
0.0 0 0 0.15 0.0 0.0
0.0 0.0 0.0 0.0 0.0
\end{tcboutputlisting}
\begin{tikzpicture}[overlay, remember picture]
\node at (7,2) [fill=yellow, ellipse callout, callout absolute pointer=(note)]
{\tcbinputlisting{listing only,
listing options={aboveskip=0pt,belowskip=0pt,
columns=fullflexible, keepspaces=true,
basicstyle=\ttfamily,nolol},
blanker,hbox,
finish={\draw[red] (1.1,0.75) circle (10pt);}}
};
\end{tikzpicture}
\end{frame}
\end{document}