新しいコマンドで作成したマクロ(?) にラベルを設定しようとしています。pgfkeys を介して最初の引数でコマンドにいくつかの値を渡していますが、マクロは\label
実際の展開された値ではなく、pgfkey を展開するために入力したリテラル文字列のみを使用しています。
これらの回答で提示されている両方の解決策を一緒に、また個別に試してみましたが、うまくいきませんでした。
https://tex.stackexchange.com/a/308164
https://tex.stackexchange.com/a/125099
何が起こっているかは pgfkey 値の拡張のタイミングに関係しているのではないかという気がしますが、正直に言うと、基礎となる TEX エンジンがどのようにその魔法を実行するのか、しっかりと理解しているわけではありません。また、私は pgfkeys を学習しているところなので、そこで何が起こっているのかについての理解はまだ初心者レベルです。
私がやろうとしていることの概要は次のとおりです。
\documentclass[twocolumn]{book}
\usepackage[framemethod=TikZ]{mdframed}%boxes
\usepackage{pgfkeys}
\newcounter{myCounter}
\newmdenv[%
frametitlebackgroundcolor=blue,
frametitlefontcolor=white,
backgroundcolor=blue!25,
linecolor=blue,
outerlinewidth=1pt,
roundcorner=1mm,
skipabove=\baselineskip,
skipbelow=\baselineskip,
font=\small,
nobreak=true,
settings={\global\refstepcounter{myCounter}},
]{myTextBox}
%Define Macros
\makeatletter
\pgfkeys{/mykeys/textbox/.cd,
title/.initial=,
body/.initial=,
label/.initial=,
}
\def\mykeys@set@textbox@keys#1{%%
\pgfkeys{/mykeys/textbox/.cd,#1}}
\def\mykeys@get@textbox#1{%%
\pgfkeysvalueof{/mykeys/textbox/#1}}
\newcommand\myBox[1]{%%
\bgroup
\mykeys@set@textbox@keys{#1}%%
\begin{myTextBox}[frametitle=\textbf{\mykeys@get@textbox{title}\hfill NOTE}]
\mykeys@get@textbox{body}
\label{box:\mykeys@get@textbox{label}}
\end{myTextBox}
\egroup
}
\makeatother
\begin{document}
\section{A Section}
\myBox{
title=Box Title,
body=A not so long string of text to go in the box,
label=firstbox
}
\ref{firstbox}
\end{document}
これが私の現在の結果です:
ラベルと参照が適切に機能する限り、特定のソリューションに縛られることはありません (pgfkeys で機能するソリューションを好みます)。