向 hyperref 生成的链接添加文字

向 hyperref 生成的链接添加文字
\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\usepackage{polski}
\begin{document}
\begin{figure}
.
\caption{A figure}
\label{fff}
\end{figure}
\lipsum[1]

Rysunek~\ref{fff} jest zabawny, bo na rysunku~\ref{fff} nic nie ma.
\end{document}

在此示例中,添加了可点击链接以输出 PDF11。我希望能够将它们更改为Rysunek 1rysunku 1。我希望能够将任何其他文本 + 图形编号放入超链接中。无法将
单词rysunek设置为序言中的默认值,因为波兰语中有变格。
表格、列表、公式、页面()等(基本上是任何参考资料)也存在同样的问题pageref

与我的 MWE 对应的 HTML 版本:

Rysunek <href="fff">1</a> jest zabawny, bo na rysunku <a href="fff">1</a> nic nie ma.

我希望它是:

<href="fff">Rysunek 1</a> jest zabawny, bo na <a href="fff">rysunku 1</a> nic nie ma.

答案1

\labelcref的文档中的解释cleveref不是很清楚,但似乎只生成标签,没有任何附加字符串。

一种可能是说

\crefformat{figure}{#2\templabel~#1#3}
\DeclareRobustCommand{\casecref}[2]{%
  \begingroup\def\templabel{#1}\cref{#2}\endgroup}

这样输出

\casecref{Rysunek}{fff} jest zabawny, bo na
\casecref{rysunku}{fff} nic nie ma.

正是您所期望的。恐怕您必须\crefformat以类似的方式设置所有要使用的引用类型。

答案2

\hyperref还知道一个可选参数。然后它需要一个标签名称,并且唯一的强制参数包含文本:

\hyperref[labelname]{text made to link}

因为我们现在有一个链接,所以我们不需要在内部添加指向\ref同一位置的另一个链接。因此\ref(并且)如果使用则\pageref有一个星号形式。使用星号时,引用无需链接即可设置。hyperref

应用于示例:

\documentclass{article}
\usepackage{hyperref}
\usepackage{lipsum}
\usepackage{polski}
\begin{document}
\begin{figure}
.
\caption{A figure}
\label{fff}
\end{figure}
\lipsum[1]

\hyperref[fff]{Rysunek~\ref*{fff}} jest zabawny,
bo na \hyperref[fff]{rysunku~\ref*{fff}} nic nie ma.
\end{document}

在此处输入图片描述

答案3

您最好的选择可能是使用聪明人包。要将交叉引用的项目的“名称”包含在超链接目标中,您需要使用以下选项加载它nameinlink

\usepackage[nameinlink]{cleveref}

请记住,必须加载cleverefhyperref(以及任何其他操作该\label宏的包)。加载此包后,假设您有两个标记为 和 的方程式{eq:a}{eq:b}您可以通过发出命令 来交叉引用第一个方程式\cref{eq:a},或者使用命令 同时交叉引用两个方程式\cref{eq:a,eq:b}

然而,您的文件语言似乎是波兰语,这一事实至少引发了两个复杂情况。

  • cleveref首先,该软件包对交叉引用项(“方程式”、“图形”、“表格”、“页面”等)使用的默认语言是英语。目前,该软件包包括使用大约十几种其他语言来排版交叉引用项名称的选项,但波兰语(目前)还不是其中之一。另外:如果您联系 Toby Cubitt(该cleveref软件包的作者)并向他发送一份波兰语项名称列表,我相信他会很乐意设置一个新的波兰语选项。(这些项包括:方程式、图形、子图、表格、子表、页面、部分、章节、节、附录、枚举、脚注、定理、引理、推论、命题、定义、结果、示例、备注、注释、算法、列表和行!)

    但与此同时,您必须使用 cleveref 包的一些低级控件来自己提供所有名称(以主格单数和主格复数形式)。例如,在加载包后的序言中,您必须输入以下形式的命令(本例仅使用英语)

    \crefname{equation}{equation}{equations}  %substitute Polish equivalents here...
    \Crefname{equation}{Equation}{Equations} 
    \crefname{figure}{Figure}{Figures}
    \Crefname{figure}{Figure}{Figures}
    

    等等。

  • 其次,波兰语是一种名词变格的语言,也就是说,主格、属格等形式通常不同,对吗? 用户指南对cleveref使用 cleveref 包处理此类语言有如下说明:

请注意,如果您使用的语言中名词变格,则\crefand\cpageref命令可能不太有用,因为它们总是以主格形式生成交叉引用名称。在这样的语言中,您可能更喜欢使用 and \labelcref命令\labelcpageref。与\crefand不同\cpageref,它们不会在交叉引用前面生成名称,因此您必须自己提供它(在适当的大小写中)。但它们仍然可以处理多重引用,因此您仍然可以从使用中获得一些好处cleveref

简而言之,要\labelcref随时准备好使用命令,并在适当的(非主格)情况下自己提供相关名词的名称。或者,重新措辞包含交叉引用的句子,使其仅使用主格。

附录:要使用\labelcref而不是\cref,您需要输入of Figures~\labelcref{fig:a,fig:b}而不是of \cref{fig:a,fig:b}。这种构造的副作用是命令Figures前的名词(此处为 )\labelcref不是即使nameinlink设置了该选项,也成为超链接的一部分。

答案4

您应该看看 cleveref 包: http://mirrors.ircam.fr/pub/CTAN/help/Catalogue/entries/cleveref.html

它会自动确定交叉引用的类型。因此

\ref{apicture}

将给出:图形 N,而不仅仅是图形的编号。

编辑:另一种不太自动化的可能性是使用fncylab包。下面是一个定义浮点数命令行为的示例\ref:图形、表格、方程式和代码源(先前定义的自定义浮点数)。

\usepackage{fncylab}
\labelformat{figure}{\sffamily \figurename~#1}
\labelformat{table}{\tablename~#1}
\labelformat{equation}{\sffamily équation~#1}
\labelformat{codesource}{\sffamily code source~#1}

如果我很好地理解了你想要做的事情,下面是一个输出示例,您可以看到链接包括eqution 4.6在此处输入图片描述

相关内容