我在我的文档中声明了这样的章节和小节:
\section{1}
\label{sec:1}
\subsection{a}
\label{sec:1a}
这些格式使用标题安全包分别显示“问题 1”和“部分 a”。
当我使用命令引用给定的子部分时\ref{label}
,它会显示类似1.1
,这显然是节/子节计数器的值。然而,我想要的是显示类似1a
参考文献中的内容,其中1
和a
分别从章节/小节名称中获取其值。我尝试过使用名称引用包来执行此操作,但它只显示部分a
,并且似乎没有办法打印部分(包含子部分)的名称。
欢迎提出任何建议——无论是使用原始 LaTeX、修改\nameref
还是使用其他包。
答案1
考虑到我的评论,这里有一个补丁,\nameref
它将结合两个部分级别的名称:
\documentclass{article}
\usepackage{nameref}
\makeatletter
\def\NR@gettitle#1{%
\GetTitleString{#1}%
\expandafter\let\csname @currentlabelname@\thesection@level\endcsname\GetTitleStringResult
\edef\@currentlabelname
{%
\ifcsname
@currentlabelname@\number\numexpr\c@section@level-\@ne\relax
\endcsname
\unexpanded\expandafter\expandafter\expandafter
{%
\csname
@currentlabelname@\number\numexpr\c@section@level-\@ne\relax
\endcsname
}%
\fi
\unexpanded\expandafter{\GetTitleStringResult}%
}
}
\makeatother
\begin{document}
\section{1}
\label{sec:1}
\subsection{a}
\label{sec:1a}
section: \nameref{sec:1}.
subsection: \nameref{sec:1a}.
\end{document}
我希望大家清楚,这不是很笼统,但它回答了你的确切问题。应该可以进一步概括它。
编辑
补丁何时titlesec
使用...
\usepackage{etoolbox}
\makeatletter
\def\chapter@level{0}
\def\section@level{1}
\def\subsection@level{2}
\def\subsubsection@level{3}
\def\paragraph@level{4}
\def\subparagraph@level{5}
\patchcmd\ttl@straight@i{\def\@currentlabelname{#2}}
{%
\expandafter\def
\csname @currentlabelname@\csname#1@level\endcsname\endcsname{#2}%
\edef\@currentlabelname
{%
\ifcsname
@currentlabelname@\number\numexpr\csname#1@level\endcsname-\@ne\relax
\endcsname
\unexpanded\expandafter\expandafter\expandafter
{%
\csname
@currentlabelname@\number\numexpr\csname#1@level\endcsname-\@ne\relax
\endcsname
}%
\fi
\unexpanded{#2}%
}
}{}{}
\makeatother