如何将文本与自定义标签/参考文本交叉引用?

如何将文本与自定义标签/参考文本交叉引用?

我们如何给标签命名,以便我们进行交叉引用时显示的不是章节编号,而是标签的名称?

例如,

\underline{homogeneity in preferences(HP)\phantomsection\label{hyp3}}

当我使用时,\ref{hyp3}我希望显示的参考文本是HP而不是例如5.1该部分的编号。

有人能帮我吗?

答案1

以 egreg 的优秀答案为例(标记文本并在稍后引用) 并修改它以接受一个额外的可选参数,我可以想出下面的解决方案。它创建一个\labeltext可以引用的新命令。它接受两个参数和一个可选参数:

\labeltext[optional short ref]{the labeled text}{label name}

如果需要,您还可以设置标签和(可选)引用的标记或突出显示。我将其设置为\emph而不是,\underline因为下划线对我来说看起来很糟糕,并且被认为是不好的做法。

结果

梅威瑟:

\documentclass{article}
%\usepackage{underlin}
%\usepackage{hyperref}

\makeatletter
\newcommand{\labeltext}[3][]{%
    \@bsphack%
    \csname phantomsection\endcsname% in case hyperref is used
    \def\tst{#1}%
    \def\labelmarkup{\emph}% How to markup the label itself
    %\def\refmarkup{\labelmarkup}% How to markup the reference
    \def\refmarkup{}%
    \ifx\tst\empty\def\@currentlabel{\refmarkup{#2}}{\label{#3}}%
    \else\def\@currentlabel{\refmarkup{#1}}{\label{#3}}\fi%
    \@esphack%
    \labelmarkup{#2}% visible printed text.
}
\makeatother

\begin{document}
Some text. This is text. \labeltext{This is the labeled text with lab1}{lab1}. More text.\\
\labeltext[shorter text 2]{Long labeled text 2}{lab2}\\
\labeltext[HP]{homogeneity in preferences (HP)}{hyp3}

This reference shows lab1: \ref{lab1}.\\
This reference shows lab2: \ref{lab2}.\\
Reference to \ref{hyp3}.
\end{document}

答案2

看起来您正在使用 ref-mechanism 来处理诸如首字母缩略词之类的内容,因此您可能需要考虑使用包glossaries。这还可以让您自动创建使用首字母缩略词/缩写的列表。

下面是一个如何使用包打印首字母缩略词的示例:第一次打印全文,然后只打印缩写/首字母缩略词。

\documentclass[
   english,
]{scrartcl}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}

\usepackage{glossaries}

\newacronym{hp}{HP}{homogeneity in preferences}

\begin{document}

This is the first sentence about \gls{hp}.

Somewhere later in the doc it is used again as \gls{hp}.

\end{document}

在此处输入图片描述

顺便说一句:请不使用下划线!

相关内容