TikZノードをmdframedにオーバーレイする

TikZノードをmdframedにオーバーレイする

プログラムのソース コードを表示するために使用している mdframe ボックスの右上に小さなテキストを配置したいと思います。

私が試したことは次のとおりです:

\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}

ここに画像の説明を入力してください

関連情報