將 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 pagecurrent 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}

在此輸入影像描述

相關內容