主要问题:如何更改在文本中交叉引用对象时打印的文本?我想获得\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
在网上做了更多研究并阅读了hyperref
和cleveref
软件包(感谢@gusbrs 的建议),我找到了两个解决方案。我将它们发布在这里,以供其他人将来参考。
1)使用hyperref
包,该\autoref
命令会自动将交叉引用名称(例如表格)添加到超链接。但是,这意味着\autoref
每次想要对象名称显示在文本中时都需要使用该命令。此外,无法修改使用此命令打印的文本。
2)使用cleveref
包,\cref
或\Cref
命令(这两个命令的区别在于文本的打印方式——小写或大写)将交叉引用名称添加到文本中,但不会使其成为超链接的一部分。要使名称成为超链接的一部分,您需要nameinlink
在序言中列出包时添加选项(即\usepackage[nameinlink]{cleveref}
)。cleveref
还允许您修改打印的文本。这在文档中有介绍。