你好,我想做的是section
当我在的时候\label
引用subsection
。
例如我的代码是:
\documentclass[12pt]{article}
\usepackage{lipsum}
\begin{document}
\section{My Section}
\lipsum[1]
\subsection{My Sub Section}
\label{subancor}
\lipsum[1]
Try to get the number of the section not of the subsection: \ref{subancor}
\end{document}
常规行为就是\ref{subancor}
意志给予我的东西1.1
。
但是,有没有办法让我显示“父”部分的编号?那么在这种情况下,只显示?(显然没有在我的语句下面1
添加并引用这个)\ref{whatever}
\section{My Section}
我正在寻找的是类似\refSectionNumberOf(subancor)
这样的东西是否存在?
答案1
这是我的回答的简短形式https://tex.stackexchange.com/a/353536/31729,适合仅提供父计数器值的数字,而不是其名称。
大多数功能来自于包,计数器重置列表功能在我的包zref
中确定。xassoccnt
代码zref
添加了父计数器的值。第一次编译存储了父计数器的值,但当然从一开始就无法访问该值,这就是为什么要\zref@ifrefundefined
进行检查。
换句话说:至少编译两次。在第一次编译宏之后(或者更好:在第一次编译期间)\parentref
返回-100
。
宏\parentref
是可扩展的。
确保保持通话
\GetAllResetLists% Important
\RegisterPostLabelHook{\zlabel}% Important
就在之前\begin{document}
!
如果之后用定义了任何计数器\newcounter
,\GetAllResetLists
则必须再次调用以获取有关最新重置列表的正确信息。
以下是非常简短的版本:
\documentclass{article}
\usepackage{lipsum}
\usepackage{xassoccnt}
\usepackage[user,counter]{zref}
\usepackage{xparse}
\makeatletter
% Define new properties
\zref@newprop{childcountervalue}{\arabic{\LastRefSteppedCounter}}% This is the naked value
\zref@newprop{parentcountervalue}{\csname the\GetParentCounter{\LastRefSteppedCounter}\endcsname}
% Add the new properties to the main property list stored with \zlabel
\zref@addprops{main}{childcountervalue,parentcountervalue}
\NewDocumentCommand{\parentref}{m}{%
\zref@ifrefundefined{#1}{%
-100%
}{%
\zref@extract{#1}{parentcountervalue}%
}%
}
\makeatother
\GetAllResetLists% Important
\RegisterPostLabelHook{\zlabel}% Important
\begin{document}
\section{My Section}
\lipsum[1]
\subsection{My Sub Section}
\label{subancor}
\lipsum[1]
\section{Foo section}
\subsection{Foobar subsection} \label{foobarsubsection}
Try to get the number of the section not of the subsection: \parentref{subancor} and \parentref{foobarsubsection}
The sum is \the\numexpr\parentref{subancor}+\parentref{foobarsubsection}
\end{document}