如何修改交叉引用表格时打印的文本?

如何修改交叉引用表格时打印的文本?

主要问题:如何更改在文本中交叉引用对象时打印的文本?我想获得\renewcommand仅适用于表格的版本和适用于句子的版本\begin{enumerate}。下面详细介绍了我的问题、我的代码以及相应代码的输出图像。

任何帮助深表感谢!

当我在 LaTeX 中使用交叉引用对象(如表格)时hyperref包,我希望将对象的名称作为链接的一部分。例如,在下面的代码中,我们看到第一个示例\ref{label}没有提到对象的名称。第二个示例只有在我手动添加它时才会命名它,但它不是链接的一部分。第三个示例将整个短语变成链接,但链接的文本需要手动修改。(更多内容见下文)。

\documentclass{article}

\usepackage{caption}
\usepackage[colorlinks]{hyperref}

\begin{document}
    \begin{table}
    \centering
    \caption{Table with text}\vspace{-1em}\label{T1}

    \begin{tabular}{ | c | c | c | }
        \hline
        Column1 & Column2 & Column3\\
        \hline
        \hline
        C1-text1 & C2-text1 & C3-text1\\
        \hline
        C1-text2 & C2-text2 & C3-text2\\
        \hline
        C1-text3 & C2-text3 & C3-text3\\
        \hline
    \end{tabular}

    \end{table}

We can see in \ref{T1} that...

We can see in Table \ref{T1}

We can see in \hyperref[T1]{Table 1} that...

\end{document}

在此处输入图片描述

但是,我不想坚持使用第三种选择,因为它会带来其他问题。例如,如果我在此表之前添加另一个表,我需要确保返回并修改每个项目的链接文本,否则我的文档中会出现错误标记的表。例如:

\documentclass{article}

\usepackage{float} %To make sure the tables display in order.
\usepackage{caption}
\usepackage[colorlinks]{hyperref}

\begin{document}

    \begin{table}
        \caption{Other table}\label{added table}
        \centering
    \begin{tabular}{c c}
        \hline
        C1 & C2\\
        \hline
        T1 & T2\\
        \hline
    \end{tabular}

    \end{table}

We can see in \ref{added table} that


    \begin{table}[H]
        \centering
        \caption{Table with text}\vspace{-1em}\label{T1}

    \begin{tabular}{ | c | c | c | }
        \hline
        Column1 & Column2 & Column3\\
        \hline
        \hline
        C1-text1 & C2-text1 & C3-text1\\
        \hline
        C1-text2 & C2-text2 & C3-text2\\
        \hline
        C1-text3 & C2-text3 & C3-text3\\
        \hline
    \end{tabular}

    \end{table}

We can see in \ref{T1} that...

We can see in Table \ref{T1}

We can see in \hyperref[T1]{Table 1} that...

\end{document}

在此处输入图片描述

我的问题是:我如何提供一个\renewcommand,以便我可以修改在交叉引用文档正文中的对象时打印的文本?我还希望该命令能够使用或命令区分表格和其他对象(例如句子)。\begin{enumerate}\begin{itemize}不想最终调用我的句子Table X,也不想混淆表格和句子之间的枚举。

另外,有人建议使用\centering命令或\begin{center}环境来处理表格吗?为什么?

答案1

cleveref是你的朋友。它开箱即用,满足你的需要,并为交叉引用提供进一步的结构。另一件让你烦恼的事情是标签的编号,其实不应该。通常的做法是给出一个语义标签,让交叉引用系统处理其余的事情。此外,我冒昧地建议你使用更booktabs美观的表格。

\documentclass{article}

\usepackage{float} %To make sure the tables display in order.
\usepackage{caption}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}
\usepackage{booktabs}

\begin{document}

\begin{table}
  \centering
  \caption{Other table}
  \label{tbl:aboutXYZ}

  \begin{tabular}{cc}
    \toprule
    C1 & C2\\
    T1 & T2\\
    \bottomrule
  \end{tabular}

\end{table}

We can see in \cref{tbl:aboutXYZ} that


\begin{table}[H]
  \centering
  \caption{Table with text}
  \label{tbl:aboutABC}

  \begin{tabular}{ccc}
    \toprule
    Column1 & Column2 & Column3\\
    \midrule
    C1-text1 & C2-text1 & C3-text1\\
    C1-text2 & C2-text2 & C3-text2\\
    C1-text3 & C2-text3 & C3-text3\\
    \bottomrule
  \end{tabular}
\end{table}

We can see in \ref{tbl:aboutABC} that...

We can see in Table \ref{tbl:aboutABC}

We can see in \cref{tbl:aboutABC} that...

Or also in \Cref{tbl:aboutXYZ} that...

\end{document}

在此处输入图片描述

答案2

在网上做了更多研究并阅读了hyperrefcleveref软件包(感谢@gusbrs 的建议),我找到了两个解决方案。我将它们发布在这里,以供其他人将来参考。

1)使用hyperref包,该\autoref命令会自动将交叉引用名称(例如表格)添加到超链接。但是,这意味着\autoref每次想要对象名称显示在文本中时都需要使用该命令。此外,无法修改使用此命令打印的文本。

2)使用cleveref包,\cref\Cref命令(这两个命令的区别在于文本的打印方式——小写或大写)将交叉引用名称添加到文本中,但不会使其成为超链接的一部分。要使名称成为超链接的一部分,您需要nameinlink在序言中列出包时添加选项(即\usepackage[nameinlink]{cleveref})。cleveref还允许您修改打印的文本。这在文档中有介绍。

相关内容