TikZ 节点内的列表内的 TikZ 注释

TikZ 节点内的列表内的 TikZ 注释

在下面的代码中,在第一帧我使用 排版了一个代码片段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}

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

相关内容