无法为默认计数器重新定义 \crefname

无法为默认计数器重新定义 \crefname

我想重新定义 \subsection 的交叉引用名称。这在以下 MWE 中有效:

\documentclass{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[pdftex]{hyperref}
\usepackage[ngerman]{cleveref}
\usepackage{lipsum}

\crefname{subsection}{Punkt}{Punkte}

\begin{document}

\chapter{Test}\label{test}
\section{Test A}\label{testa}
\lipsum[1]

\subsection{Dummy-Text}\label{dummya}
\lipsum[2]

\subsection{Noch mehr}\label{dummyb}
\lipsum[3]

\section{Querverweis}\label{crossref}
\cref{dummya} in \cref{testa} (\cref{test}) ist irrelevant.
\end{document}

但是,它在我的实际文档中不起作用。在那里,我移出了以下代码:

\usepackage[ngerman,nameinlink]{cleveref}
\crefname{table}{Tab.}{Tab.}
\crefname{scheme}{Übersicht}{Übersichten}
\crefname{subsection}{Punkt}{Punkte}

紧接在 \begin{document} 之前。尽管如此,\cref 仍然在表格前面加上“Tabelle”/“Tabellen”,在小节前面加上“Abschnitt”/“Abschnitte”(显然是从部分继承的德语默认值)。奇怪的是,类型“scheme”的定义被接受了。table/subsection 和 scheme 之间的唯一区别是我自己定义了 scheme 环境,而其他人使用默认计数器。

有人知道可能出了什么问题吗?

答案1

您可以使用别名:

\crefname{punkt}{Punkt}{Punkte}
\crefalias{subsection}{punkt}

在此处输入图片描述

代码:

\documentclass[american,ngerman]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{hyperref}

\usepackage[nameinlink]{cleveref}
\crefname{tab}{Tab.}{Tab.}
\crefname{scheme}{Übersicht}{Übersichten}
\crefname{abschnitt}{Abschnitt}{Abschnitte}
\crefname{punkt}{Punkt}{Punkte}

\crefalias{section}{abschnitt}
\crefalias{subsection}{punkt}
\crefalias{table}{tab}

\begin{document}
\selectlanguage{ngerman}

\chapter{Test}
\section{asdf}\label{sec}
\subsection{ghjk}\label{sub}
\begin{table}
\caption{A table}\label{tab}
\end{table}

\cref{sec,sub,tab} Plural der Namen: \namecrefs{sec}, \namecrefs{sub} und \namecrefs{tab} 
\end{document}

答案2

好吧,我把 MWE 最小化太多了!显然,这是 babel 的错。此版本有效:

\documentclass{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[american,main=ngerman]{babel}
\usepackage[ngerman,nameinlink]{cleveref}
\crefname{table}{Tab.}{Tab.}
\crefname{scheme}{Übersicht}{Übersichten}
\crefname{section}{Abschnitt}{Abschnitte}
\crefname{subsection}{Punkt}{Punkte}

\begin{document}
\selectlanguage{ngerman}
\crefname{table}{Tab.}{Tab.}
\crefname{scheme}{Übersicht}{Übersichten}
\crefname{section}{Abschnitt}{Abschnitte}
\crefname{subsection}{Punkt}{Punkte}  

\chapter{Test}
\section{asdf}\label{sec}
\subsection{ghjk}\label{sub}
\begin{table}
\caption{A table}\label{tab}
\end{table}

\cref{sec,sub,tab}
\end{document}

注意\selectlanguage{ngerman}? 这似乎打开了默认类型/计数器的默认值。类型“scheme”是自定义环境/计数器,因此不会被重置\selectlanguage{ngerman}

奇怪的是,在 之后定义 crefnames 是不够的!如果从前言中删除 中\selectlanguage的行(只留下 之后的重复项),则会再次使用默认值:\crefname\setlanguage

\documentclass{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[american,main=ngerman]{babel}
\usepackage[ngerman,nameinlink]{cleveref}

\begin{document}
\selectlanguage{ngerman}
\crefname{table}{Tab.}{Tab.}
\crefname{scheme}{Übersicht}{Übersichten}
\crefname{section}{Abschnitt}{Abschnitte}
\crefname{subsection}{Punkt}{Punkte}

\chapter{Test}
\section{asdf}\label{sec}
\subsection{ghjk}\label{sub}
\begin{table}
\caption{A table}\label{tab}
\end{table}

\cref{sec,sub,tab}
\end{document}

相关内容