指向行上方和下方文本的箭头

指向行上方和下方文本的箭头

我已经搜索答案一段时间了,但还没有找到解决方案。我正在记编程课程的一些笔记,需要取一行代码并用交替箭头标识每个单独的部分。例如,以下行:

这个。某物=新的另一个事物(一个参数);

现在,我需要一个箭头,从此行下方指向“此”并指向一些标识该部分的文本。现在,另一个箭头需要从此行上方的一些解释文本开始,并指向“某物”。=、new 和括号不需要任何东西,只需要其他项目。我一直在尝试使用 \underset 和 \overset,但行上的间距变得不稳定。任何指导都将不胜感激。

答案1

这是一个选项:

在此处输入图片描述

代码:

\documentclass{article}
\usepackage{listings}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\lstset{
  basicstyle=\small\ttfamily,
  escapeinside=@@,
  columns=fullflexible
}

\begin{document}

Some regular text before
\vspace{1.8cm}
\begin{lstlisting}
@\tikzmark{a}@this.@\tikzmark{b}@Something = new AnotherThing(anArgument);
\end{lstlisting}
\vspace{1.3cm}
Some regular text after

\begin{tikzpicture}[remember picture,overlay]
\draw[red!80!black,->] 
  ([shift={(10pt,-3pt)}]pic cs:a) -- ++(10pt,-20pt) coordinate(aux1);
\node[below,red!80!black] 
  at (aux1) {some explanatory text};
\draw[green!80!black,->] 
  ([shift={(15pt,9pt)}]pic cs:b) -- ++(10pt,20pt) coordinate(aux2);
\node[above,green!80!black,text width=4cm] 
  at (aux2) {some other explanatory text; it's longer};
\end{tikzpicture}

\end{document}

评论

  • listings包用于排版代码。该包提供了排版代码的其他自定义可能性;请参阅文档

  • TikZ在这里使用。tikzmark库用于放置一些标记(使用escapeinside功能 fromlistings将标记放置在 内lstlisting)。然后使用这些标记绘制箭头并使用 放置说明性文字\node

  • 由于overlay必须在解释性文本中使用该选项tikzpicture,因此需要添加一些间距以获得与代码周围材料的适当间距。

  • 由于涉及一些内部计算,因此代码需要运行两次才能稳定下来。

相关内容