使用 babel[english] 将 autoref 子节重命名为 false

使用 babel[english] 将 autoref 子节重命名为 false

我尝试将 \autoref 从子节重命名为节。但似乎 [english]{babel} 以某种方式阻止了它。有趣的是,它适用于子节(但我不使用它们)。

\documentclass[11pt,numbers=noenddot,bibliography=totocnumbered,twoside]{scrreprt}
\usepackage[english]{babel}
% \let\subsectionautorefname\sectionautorefname
\def\subsectionautorefname{section}
\def\subsubsectionautorefname{section}  %define subsection as section and subsub to section
\usepackage[unicode]{hyperref}  %Hyperlinks in text as reference unicode to use in references

\begin{document}
\chapter{Chapter}
\section{Section}
\label{sec}

\subsection{Foo}
\label{ssec:foo}
This is the overview.

\subsubsection{Bar}
\label{sssec:bar}
This is the small part.

Later in the text, we refer to \autoref{sec}, \autoref{ssec:foo} and \autoref{sssec:bar}.
\end{document}

我也尝试过这里进行测试。另外 \let\subsectionautorefname\sectionautorefname 也不要更改它。

有没有其他方法,无需更改文档类别或进行其他重大更改?

诚挚的问候,DeepWater

答案1

scrreprt可以使用 KOMA-Script 命令\defcaptionname

\defcaptionname*{english}{\subsectionautorefname}{section}
\defcaptionname*{english}{\subsubsectionautorefname}{section}

如果要引用子小节的编号(使用\autoref or\ref`),则必须对该子小节进行编号。因此,您必须添加:

\setcounter{secnumdepth}{\subsubsectionnumdepth}

你的序言。

例子:

\documentclass[11pt,numbers=noenddot,bibliography=totocnumbered,twoside]{scrreprt}
\usepackage[english]{babel}
\defcaptionname*{english}{\subsectionautorefname}{section}
\defcaptionname*{english}{\subsubsectionautorefname}{section}
\usepackage[unicode]{hyperref}
\setcounter{secnumdepth}{\subsubsectionnumdepth}% subsubsections should be numbered
\begin{document}
\chapter{Chapter}
\section{Section}\label{sec}
\subsection{Foo}\label{ssec:foo}
This is the overview.
\subsubsection{Bar}\label{sssec:bar}
This is the small part.

Later in the text, we refer to \autoref{sec}, \autoref{ssec:foo} and \autoref{sssec:bar}.
\end{document}

答案2

谢谢 daleif 和 Bernard,

提前加载 hyperref 不会改变任何内容,但将定义放在 \begin{document} 之后可以解决这个问题。

在您建议的顺序之后,还会进行更多测试

\usepackage[unicode]{hyperref}
\usepackage[english]{babel} 

而且,无论定义在哪里,都是独立的。

多谢。

答案3

hyperref 具有语言支持,当它检测到 babel 时,它会将 autoref 定义添加到 \extrasenglish。要覆盖定义,您也应该在那里添加更改(在 hyperref 更改之后)。正如 Mico 所写,为了使 \subsubsection 的行为正确(关于文本和计数器),您应该设置secnumdepth

\documentclass[11pt,numbers=noenddot,bibliography=totocnumbered,twoside]{scrreprt}
\usepackage[english]{babel}
\usepackage[unicode]{hyperref} 


 \addto\extrasenglish{%
  \def\subsectionautorefname{section}%
  \def\subsubsectionautorefname{section}%
  }

\setcounter{secnumdepth}{3}
\begin{document} 

\chapter{Chapter}
\section{Section}
\label{sec}

\subsection{Foo}
\label{ssec:foo}
This is the overview.

\subsubsection{Bar}
\label{sssec:bar}
This is the small part.

Later in the text, we refer to \autoref{sec},   \autoref{ssec:foo}  and \autoref{sssec:bar} 
\end{document}

答案4

您遇到的问题是不是与您使用该包有关。相反,问题是babel由于以下原因引起的。在scrreport文档类中,计数器的默认值为,这意味着只有节级和子节级标题被编号,而子子节级标题则没有。您可以通过查看 MWE 的输出来验证这一说法:标题“Bar”根本没有编号。由于它没有编号,因此标签不指向该标题。secnumdepth2{sssec:bar}

secnumdepth补救办法是增加via 的值\setcounter{secnumdepth}{3}

附录:关于小节和小子节的“标签”:我不会摆弄等。而是在之后使用选项\def\subsectionautorefname加载包。这样,生成的交叉引用将自动看起来像生成的交叉引用。cleverefhyperrefnameinlink\cref\autoref

在此处输入图片描述

\documentclass[11pt,numbers=noenddot,twoside]{scrreprt}
\setcounter{secnumdepth}{3} % new
\usepackage[english]{babel}
\usepackage{hyperref}
\usepackage[nameinlink]{cleveref}

\begin{document}
\chapter{Chapter}
\section{Section}   \label{sec}
\subsection{Foo}    \label{ssec:foo}
\subsubsection{Bar} \label{sssec:bar}

\cref{sec}, \cref{ssec:foo}, \cref{sssec:bar}
\end{document}

相关内容