我在用\ref
在我的文章中进行交叉引用。
这很好,但随后出现的文本如下
在下一章第 1 节中,我们将 [...]
但我想要类似的东西
在下一章背景知识中,我们将[...]
这是我的用法示例
folgenden Kapitel \ref{mehrInformatiker} werden Maßnahmen
将导致
我已阅读这篇文章 与自定义文本交叉引用
但我想使用\ref
。这可能吗?
答案1
在我发布之后,cgnieder 指出了该包的存在nameref
,如下所示
\documentclass[11pt]{article}
\usepackage{nameref}
\begin{document}
I can even refer to section \nameref{s-1} before it is defined.
\section{Background so Long} \label{s-1}
I want to print just a number for Section \ref{s-1}.
But here, I want to print section \nameref{s-1}.
\end{document}
\nameref{<label>}
有了它,满的章节名称。在这方面,我所建议的略有不同,因为分配给文本引用的名称可能与完整章节标题相同,也可能不同。这是我的原始答案,经过编辑以强调这一差异:
我引入可选参数来\label
分配文本引用(重要的是,它不需要与章节名称匹配),然后使用新定义的[s]
选项来\ref
调用“特殊”文本引用而不是通常的[数字]响应。
通过将其写入aux
文件,我甚至可以在定义之前调用文本引用。
\documentclass[11pt]{article}
\let\svlabel\label
\let\svref\ref
\makeatletter
\renewcommand\label[2][\relax]{%
\svlabel{#2}%
\ifx\relax#1\else
\immediate\write\@mainaux{\string%
\expandafter\gdef\noexpand\csname custom#2\noexpand\endcsname{#1}}%
\fi
}
\makeatother
\renewcommand\ref[2][\relax]{%
\ifx s#1\csname custom#2\endcsname\else\svref{#2}\fi
}
\begin{document}
I can even refer to section \ref[s]{s-1} before it is defined.
\section{Background so Long} \label[Background]{s-1}
I want to print just a number for Section \ref{s-1}.
But here, I want to print section \ref[s]{s-1}.
\end{document}
如果只需要“向后”引用,即在定义标签之后,则可以省去辅助文件写入,而使用更简单的替代方法:
\documentclass[11pt]{article}
\let\svlabel\label
\let\svref\ref
\renewcommand\label[2][\relax]{%
\svlabel{#2}%
\ifx\relax#1\else
\expandafter\gdef\csname custom#2\endcsname{#1}%
\fi
}
\renewcommand\ref[2][\relax]{%
\ifx s#1\csname custom#2\endcsname\else\svref{#2}\fi
}
\begin{document}
I cannot refer to section ``\ref[s]{s-1}'' before it is defined.
\section{Background so Long} \label[Background]{s-1}
I want to print just a number for Section \ref{s-1}.
But here, I want to print section \ref[s]{s-1}.
\end{document}