对于我正在排版的一篇论文,作者希望小节用单个数字书写。到目前为止,还不错,
\renewcommand{\thesubsection}{\arabic{subsection}}
完成工作。
然而,他经常想在后面的章节中引用该小节,并希望在参考文献中同时注明章节和小节编号;例如,他想从第 2 节中引用第 1.1 节。
我目前的解决方法是在参考文献中给出章节和小节编号。
平均能量损失
\documentclass[11pt]{amsart}
\usepackage{hyperref}
\usepackage[backend=bibtex,citestyle=alphabetic]{biblatex}
\renewcommand{\thesubsection}{\arabic{subsection}}
\begin{document}
\section{A section} \label{sec:first}
\subsection{A subsection} \label{subsect:first} Something cool.
\section{New section}
Now I want to cite the coolness in Section~\ref{sec:first}.\ref{subsect:first}.
\end{document}
这很好,除了设置这样hyperref
,如果您单击第一个 1,您将转到第 1 节,而不是第 1 小节。但我希望两个数字都转到链接中的同一位置hyperref
。
我可以将每个这样的引用包装在
\renewcommand{\thesubsection}
's 中,但是在引用不同章节的子章节时,有没有更简单的方法来添加章节编号?
笔记:由于我正在使用biblatex
,titlesec
所以不适用。
答案1
您可以 (a) 重新定义,\thesection
就像您已经在做的那样,并且 (b) 重新定义宏\p@subsection
。宏\p@subsection
控制着类型项交叉引用的前缀材料,在设置subsection
计数器时由 LaTeX 自动设置。它的默认行为是不执行任何操作;在这里,我们将其更改为立即插入到子节级项的交叉引用之前。subsection
\thesection.
因为宏名\p@subsection
包含字符@
,所以需要将其重新定义括在\makeatletter
...中\makeatother
。
\documentclass[11pt]{amsart}
\renewcommand{\thesubsection}{\arabic{subsection}}
\makeatletter
\renewcommand{\p@subsection}{\thesection.}
\makeatother
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\section{A section} \label{sec:first}
\subsection{A subsection} \label{subsect:first} Something cool.
\section{New section}
Now I want to cite the coolness in subsection \ref{subsect:first}.
\end{document}
答案2
您可以重新定义\@seccntformat
命令来代替\mythesubsection
,\thesubsection
前提是前者已经定义。
\documentclass[11pt]{amsart}
\usepackage[backend=bibtex,citestyle=alphabetic]{biblatex}
\usepackage{hyperref}
\makeatletter
\renewcommand{\@seccntformat}[1]{%
\protect\textup{%
\protect\@secnumfont\protect\check@format{#1}\protect\@secnumpunct
}%
}
\newcommand{\check@format}[1]{%
\@ifundefined{mythe#1}{\@nameuse{the#1}}{\@nameuse{mythe#1}}%
}
\makeatother
% removing this line will restore the usual setting
\newcommand{\mythesubsection}{\arabic{subsection}} % just print the subsection number
\begin{document}
\section{A section} \label{sec:first}
\subsection{A subsection} \label{subsect:first} Something cool.
\section{New section}
Now I want to cite the coolness in Section~\ref{subsect:first}.
\end{document}
您可能还想定义\mysubsubsection
是否也\subsubsection
使用并且编号。
答案3
zref
允许您根据一组属性生成特定引用。下面我定义了属性列表sections
,它将部分、子部分和部分.子部分存储为您标记的属性列表的一部分\label
(实际上是\zref@labelbypropertylist
):
\documentclass[11pt]{amsart}
\usepackage{hyperref}
\renewcommand{\thesubsection}{\arabic{subsection}}
\usepackage{zref}
\makeatletter
\zref@newlist{sections}
\zref@newprop{section}{\thesection}
\zref@newprop{subsection}{\thesubsection}
\zref@newprop{secsubsection}{\thesection.\thesubsection}
\zref@addprops{sections}{section,subsection,secsubsection}
\newcommand{\zlabel}[1]{\zref@labelbylist{#1}{sections}}
\newcommand{\zref}[2][section]{\hyperref[#2]{\zref@extractdefault{z:#2}{#1}{\textbf{??}}}}
\makeatother
\AtBeginDocument{%
\let\oldlabel\label
\renewcommand{\label}[1]{\oldlabel{#1}\zlabel{z:#1}}}
\begin{document}
\section{A section}
\subsection{A subsection} \label{subsect:first} Something cool.
\section{New section}
Now I want to cite the coolness in Subsection~\zref[secsubsection]{subsect:first}
(it is Subsection~\zref[subsection]{subsect:first} in Section~\zref[section]{subsect:first}).
\end{document}
输出中的所有超链接都指向同一位置。