将 TikZ 节点叠加到 mdframed 中

将 TikZ 节点叠加到 mdframed 中

我想在用于显示程序源代码的 mdframed 框的右上角放置一小段文本。

以下是我尝试过的:

\begin{mdframed}
\begin{minted}{swift}
print("Hello")
print("World")
for i in 0..<10 {
    print(i)
}
\end{minted}
\end{mdframed}
\tikz[overlay,remember picture]%
\node[anchor=north east,inner sep=5pt,fill=black] at (current page.north east) {\textcolor{white}{Swift}};

这会导致带有“Swift”字样的小黑框呈现在,但我希望它在框架框内呈现。我也尝试将 tikz 线放在 mdframed 环境中,但发生了同样的事情:节点显示在页面的右上角。

如果我current page用替换current bounding box,我根本看不到该节点,并且在渲染的 pdf 中搜索文本也找不到它,所以我不知道它去了哪里!

我是否遗漏了一些显而易见的东西?如何让 tikz 命令知道将节点锚定到 mdframed 环境?

答案1

这可以通过使用 轻松实现tcolorbox。它具有内置minted支持。而且它比 更强大、更灵活mdframed。尽管手动的看起来有点复杂,但如果你花点时间阅读,它很简单,并且可以实现一个非常漂亮的框架框。

这是一个简单的例子:

\documentclass{report}
\usepackage[minted,skins]{tcolorbox}
\newtcblisting{mybox}[1][]{
enhanced jigsaw,
listing engine=minted,
listing only,
title=Swift,
minted language=swift,
sharp corners,
colframe=darkgray,
colback=yellow!40,
coltitle=red!70,
fonttitle=\bfseries,
boxrule=1pt,
attach boxed title to top right=
{yshift=-\tcboxedtitleheight-1pt,xshift=-1pt},
boxed title style={enhanced jigsaw,colback=lightgray,boxrule=0pt,sharp corners},
#1
}

\begin{document}
\begin{mybox}
print("Hello")
print("World")
for i in 0..<10 {
    print(i)
}
\end{mybox}
\begin{mybox}[title=LaTeX,minted language=latex,listing and text]
This is a default tcolorbox:
\begin{tcolorbox}
    example contents
\end{tcolorbox}
\end{mybox}
\end{document}

在此处输入图片描述

相关内容