我试图引用标签的父级,以便它输出类似“Section, Subsection”或“Section, Subsection, Subsubsection”的内容。我smartref
通过执行以下操作接近目标:
\usepackage{smartref}
\addtoreflist{section}
\newcommand{\breadref}[1]{\sectionref{#1}, \fullref{#1}}
但不幸的是,这只输出了节的编号,而不是节的名称。文档smartref
提到了一个\byname
选项,但似乎并没有真正提供它的一个工作示例,这使得它很难实现。
这似乎应该是一件容易的事,而且是一件有用的事,特别是如果小节可能会在各节之间移动,从而使得对父母的硬编码引用变得很麻烦。
任何想法,将不胜感激。
麦克风
编辑:
理想情况下,它看起来应该是这样的:
答案1
进行一些调整!
但是,您需要使用\sectionlabel
部分和\subsectionlabel
小节,而不仅仅是\label
,因为我们需要添加功能。
\documentclass{article}
\usepackage[byname]{smartref}
\makeatletter
\newcommand{\subsectionlabel}[1]{%
\label{#1}%
\@bsphack
\protected@write\@auxout{}{\string\newparent{#1}{\@currentsectionlabel}}%
\@esphack
}
\newcommand{\sectionlabel}[1]{%
\label{#1}%
\@bsphack\gdef\@currentsectionlabel{#1}\@esphack
}
\newcommand{\newparent}[2]{%
\global\@namedef{parent@#1}{#2}%
}
\newcommand{\broadref}[1]{%
\byname{\@nameuse{parent@#1}}, \byname{#1}~(\ref{#1})%
}
\makeatother
\begin{document}
\section{My section}\sectionlabel{sec:mysection}
Some text.
\subsection{My subsection}\subsectionlabel{subsec:mysubsection}
Some text.
\section{Reference section}
This is a reference to the subsection:
\broadref{subsec:mysubsection}
\end{document}