在较大的项目中,我想设置一个等于当前绝对页码的字符串,如下所示
\documentclass[10pt]{article}
\usepackage{zref-abspage}
\usepackage{zref-user}
\ExplSyntaxOn
\NewDocumentEnvironment{intfig} { > { \SplitArgument { 1 } { , } } m!o }
{
% Apparently, this is required because the page number isn't fixed until shipout.
\zlabel{ randomname }
% Error: "\zref doesn't match its definition."
\str_set:Nx \l_intfig_filespec_str { \zref[abspage]{ randomname } }
% This works as expected.
\zref[abspage]{ randomname }
}{ }
\ExplSyntaxOff
\begin{document}
\begin{intfig}{bogus}
\end{intfig}
\end{document}
这里发生了一些事情,可能与扩展有关,但我不明白。那主题,也许有人知道一份比该文档更具说明性的文档interface3
,而该文档在您刚开始时是神秘的。
如果重要的话,在实际代码中,randomname
上面使用的也将是一个字符串,如\l_intfig_figname_str
。我想让示例保持简洁。
答案1
\zref
在这种情况下,您需要使用 的可扩展版本\zref@extractdefault
。
\documentclass[10pt]{article}
\usepackage[papersize={4cm,6cm},margin=1cm,bottom=2cm]{geometry}
\usepackage{zref-abspage}
\usepackage{zref-user}
\ExplSyntaxOn
\int_new:N \g__intfig_unique_int
\NewDocumentEnvironment{intfig} { > { \SplitArgument { 1 } { , } } m!o }
{
\int_gincr:N \g__intfig_unique_int
\zlabel{ intfig-\int_to_arabic:n { \g__intfig_unique_int } }
\str_set:Nx \l_intfig_filespec_str
{
\use:c { zref@extractdefault } { intfig-\int_to_arabic:n { \g__intfig_unique_int } } { abspage } { 0 }
}
\str_use:N \l_intfig_filespec_str
}{ }
\ExplSyntaxOff
\begin{document}
\begin{intfig}{bogus}
Text
\end{intfig}
\clearpage
\pagenumbering{Roman}
\begin{intfig}{bogus}
Text
\end{intfig}
\end{document}
该geometry
包装只是为了制作一张较小的图片。
整数变量用于为环境的每次调用提供唯一的标签。
答案2
\zref
不可扩展,因此使用扩展x
来获取参考值并不是可行的方法。zref
它本身提供了许多其他替代方案,我认为最能立即完成您想要它做的事情的是\zref@def@extract
(让 Oberdiek 为您处理扩展控制 ;-)。使用它的一个示例:
\documentclass[10pt]{article}
\usepackage{zref-abspage}
\usepackage{zref-user}
\makeatletter
\ExplSyntaxOn
% Ensure zref@unique exists
\zref@require@unique
\NewDocumentEnvironment{intfig} { > { \SplitArgument { 1 } { , } } m!o }
{
% You probably want this (or some other dedicated counter)
\refstepcounter { zref@unique }
% If you only need abspage.
\zref@labelbyprops { randomname } { abspage }
% or \zlabel if you really need a full reference.
% \zlabel{ randomname }
% This will extract the abspage property and store it in the \l_tmpa_tl
% variable.
\zref@def@extract { \l_tmpa_tl } { randomname } { abspage }
% For demonstration purposes only.
\tl_show:N \l_tmpa_tl
}{ }
\ExplSyntaxOff
\makeatother
\begin{document}
\begin{intfig}{bogus}
Foo
\end{intfig}
\end{document}