새로운 명령어로 생성한 매크로(?)에 라벨을 설정하려고 합니다. 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와 함께 작동하는 솔루션을 선호합니다).