分享

LaTeX教学2.9 交叉引用

 geoallan 2022-09-24 发布于四川

2.9 交叉引用

同样在论文写作中, 我们在前文或者后文会提到某一个公式或定理, 但是如果我们用手敲定理对应的编号时, 一旦编号被前后移动了, 那么改动起来就会很麻烦, LaTeX中交叉引用解决了这个问题.

2.9.1 书签与引用

LaTeX提供了三条交叉引用的命令, 名称与说明如下

交叉引用说明.png

在这里我们用一个简单的例子来说明如何使用交叉引用:

\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
\section{勾股定理}
\newcounter{TH}[section]    %定义新计数器TH
\renewcommand{\theTH}{\thesection.\arabic{TH}}  %重新定义计数器命令\theTH的显示形式
\newcommand{\Theorem}[1][]{\par\textbf{定理}\refstepcounter{TH}\textbf{\theTH}(#1)\quad}  %新定义定理命令
\Theorem[勾股定理]\label{thm:gougu} 勾股定理是一个基本的几何定理,指直角三角形的两条直角边的平方和等于斜边的平方……
\newpage    %新起一页
在第\pageref{thm:gougu}页的定理\ref{thm:gougu}中, 我们知道了……
\end{document}
交叉引用例.png

为了节约空间, 我把两页的内容粘到了一页, 我们在想要引用的地方加上\label{书签名}命令, 在后面想要引用它的时候再使用命令\ref{书签名}\the计数器中的数字显示出来, 而对于书签名, 也不要随便的去起, 应该做到有规律, 易区分.

2.9.2 书签名的样式

给一个对象加书签的时候不能胡乱的, 按照自己当时想到的东西去加, 一般来说, 书签名的形式是类型:内容, 比如在上例中我使用的是thm:gougu, 即类型是定理(Theorem), 内容是勾股定理, 这样给出的书签会更容易引用, 而且不要使用thm:1.1这样的书签名, 这样的书签名会使你的交叉引用变成无用功, 因为这样还不如手动去打上定理1.1, 而且很重要的一点是今天的1.1可能会变成明天的2.3, 这对于作者(也就是我们自己)来说是很不愉快的一件事. 那么下面我们就给出通常使用的类型的简称:

缩写 全称 缩写 全称
part 部分(part) fig 图(figure)
chap 章(chapter) tab 表(table)
sec 节(section) eq 公式(equation)
subsec 小节(subsection) fn 脚注(footnote)
subsubsec 小小节(subsubsection) item 项目(item)
para 段(paragraph) thm 定理
subpara 小段(subparagraph) algo 算法(algorithm)

2.9.3 更多交叉引用

有了上面的说明我们已经会了基本的交叉引用的知识了, 但是好像不是那么自动, 能不能让LaTeX自行判断被引用的内容是什么, 从而自动生成类似"图1"之类的引用呢?答案是可以的, 我们需要调用hyperref宏包或着在ctex中添加可选参数hyperref, 然后使用命令\autoref{书签名}, LaTeX就可以根据被加书签的对象而选择前缀, 如section, equation等等.

\documentclass{article}
\usepackage[hyperref,UTF8]{ctex}
\begin{document}
\section{\LaTeXe 简介}\label{sec:prelatex}
在\autoref{sec:prelatex}中, 我们有……
\end{document}
autoref.png

同时我们可以发现在引用处出现了一个彩色的框, 用鼠标点击引用可以直接跳转到对应的书签处, 这也是hyperref宏包的另一个好处:超链接. 但是我们会发现引用出来的是section 1这样的英文, 与我们的文档不搭, 不过问题不大, hyperref宏包给我们提供了一个可以修改\autoref出现的文字, 用下面的命令:

\renewcommand{\sectionautorefname}{节}

将引用部分变为节1. 但是好像还是有那么点不对, 这种引用说"第一节"会更舒服一点, 当然我们可以自定义一个引用命令\newcommand{\secref}[1]{第 #1 节}其中必要参数是书签名, 来完成上述操作, 或者, prettyref宏包给我们提供了修改引用名称的命令:

\newrefformat{类型}{显示方法}

这里就要求我们的书签名使用类型:内容的形式了, 同样的刚才的文档, 我们用prettyref宏包重新实现一次:

\documentclass{article}
\usepackage[UTF8]{ctex}
\usepackage{prettyref}
\begin{document}
\newrefformat{myref}{第\ref{#1} 节}
\section{\LaTeXe 简介}\label{myref:prelatex}
在\prettyref{myref:prelatex}中, 我们有……
\end{document}
prettyref.png

注意在上述\newrefformat{myref}{第\ref{#1} 节}命令中, 不需要设置参数数量[1], 如果同时使用hyperref宏包, 引用的超链接依然可以使用. 那能不能更进一步, 在引用处出现被引用的章节, 图的名称呢?当然可以, 宏包nameref为我们提供了命令\nameref来实现这个功能. 下面给出图例, 代码略去.

nameref.png

2.9.4 网址链接

虽然打印可能是pdf文件的最终归宿, 但是电子阅读也是必不可少的, 对于一些网站的链接, 我们也可以插入到LaTeX文档中, 以便直接点击. 同样是hyperref宏包, 为我们提供了两个较实用的命令:

\url{链接地址} %地址中的#, /正常输入即可, 不需要转义
\href{链接地址}{显示名称} %地址中的#, /正常输入即可, 不需要转义

使用交叉引用的tex文档都需要编译两次, 第一次将引用信息写入辅助文件.aux, 第二次编译再将引用信息从辅助文件.aux写入文档, 即当引用处出现??时, 可能是书签名错误, 也可能是只编译了一次, 出现第一种错误时自行寻找正确的书签名, 出现第二种错误时只需要再编译一次即可.

使用TeXstudio编译的时候会在消息里发现

编译信息.png

即自动的完成了两次编译, WinEdt中也同样, 也就是说不需要我们手动进行两次编译.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多