\ref 自定义文本

\ref 自定义文本

我在用\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}

在此处输入图片描述

相关内容