我怎样才能让子节失去节内的节编号并获得节外的节编号?

我怎样才能让子节失去节内的节编号并获得节外的节编号?

对于我正在排版的一篇论文,作者希望小节用单个数字书写。到目前为止,还不错,

\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 中,但是在引用不同章节的子章节时,有没有更简单的方法来添加章节编号?

笔记:由于我正在使用biblatextitlesec所以不适用。

答案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}

输出中的所有超链接都指向同一位置。

相关内容