我想重新定义 \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}