从包含的 minted 文件中为每一行生成 tikz 坐标

从包含的 minted 文件中为每一行生成 tikz 坐标

我想通过 minted 包含一个文件并自动为包含的文件的每一行的开头../basename.end生成一个 tikz 坐标......basename-$LINENUMBER

我摸索着在另一个问题,但没有取得多大进展...有什么提示吗?

答案1

这是一个简单的解决方案:

\documentclass{article}

\usepackage{minted}
\usepackage{tikz}
\usepackage{etoolbox}

% enable global node labeling
\tikzstyle{every picture}+=[remember picture]

% set default basename for coordinates labels
\tikzset{/minted/basename/.initial=minted}

% optional: set up line numbering style redefining \theFancyVerbLine BEFORE
% the next step (or empty it if you don't want numbering, since the use of
% linenos is mandatory)

% prepend (or append using \appto) the tikz coordinate to the line numbering
\preto\theFancyVerbLine%
  {\tikz\coordinate(\pgfkeysvalueof{/minted/basename}-\arabic{FancyVerbLine});}

\begin{document}

\begin{minted}[linenos]{c}
  int main() {
    printf("hello, world");
    return 0;
  }
\end{minted}

% use the labeled coordinates
\begin{tikzpicture}[overlay]
  \path[->, thick] (minted-1) edge [bend right=90] (minted-4);
  \fill[red] (minted-3) circle (1pt);
\end{tikzpicture}

% if you want to use a custom basename for coordinates labels:
%\tikzset{/minted/basename=mycode}

% if you want to input an external file:
%\inputminted[linenos]{c}{mycode.c}

\end{document}

结果如下:

沙赞

还有改进的空间:

  • 更好的坐标对齐(一个简单的 TiKz 样式问题,但什么是更好的取决于你需要做什么(但你并没有具体说明);
  • 自动坐标基名(需要更紧密的集成,minted因此这是可行的,但好处可能不值得付出努力)。

但是,此代码已完成基本工作并可以帮助您。

相关内容