我想通过 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
因此这是可行的,但好处可能不值得付出努力)。
但是,此代码已完成基本工作并可以帮助您。