xelatex 以及 latexmk 命令行编译

本文介绍了如何使用命令行工具xelatex和latexmk编译LaTeX文件。重点讨论了latexmk的自动化编译机制,以及如何结合xelatex进行交叉引用等复杂情况的处理。提供了常用命令示例,包括错误处理、同步编辑和文件清理。同时提到了latexmk在MacTeX、MikTeX等发行版中的常见集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近想要用命令行去编译 latex 文件。

最简单的命令,输入

xelatex a.tex

我随便写了一个报错,看看 Overleaf, Online LaTeX Editor 这个平台的表现如何。

因为这个项目是开源的,好奇心的驱使下,让我想看看他背后用什么命令去编译的。

源码文件地址:https://github.com/overleaf/clsi/blob/a883084bba5491ced188db7b32e64c988ffe73ca/app/js/LatexRunner.js#L188

从源码可以看到,他是使用 latexmk + xelatex 命令编译的。

如果你还不了解 Latexmk 是什么东东,这里简单的介绍一下:LaTeX 要生成最终的 PDF 文档,如果含有交叉引用、BibTeX、术语表等等,通常需要多次编译才行。而使用 Latexmk 则只需运行一次,它会自动帮你做好其它所有事情。通常情况下,你安装的 LaTeX 发行版已经包含了 Latexmk,我们并不需要手动安装它。

一般来说,你可能已经在你的计算机上安装了它,因为它是 MacTeX 和 MikTeX 它与许多linux发行版捆绑在一起。

在最简单的情况下,你只需要输入

latexmk

如果你想.pdf文件作为输出,只需输入:

latexmk -pdf

如果你只想编译一个特定的.tex文件在当前目录中,只需提供文件名:

latexmk myfile.tex

如果要预览结果,只需使用

latexmk -pv

如果希望 Latexmk 连续检查所有输入文件中的更改,并在需要时编译整个过程并始终显示结果,请键入

latexmk -pvc

使用 xelatex 引擎编译

latexmk -pvc -xelatex file.tex

Latexmk 有文件监测的机制。

它应该可以做到只需运行一次,然后每次文件保存动作后,自动重新编译。
当然,选项可以组合在一起,例如。

latexmk -pdf -pv myfile.tex

运行LaTeX之后,当前目录被大量临时文件污染;您可以使用这个命令清理

latexmk -c

这不会删除.pdf /.ps /.dvi如果你想删除这些文件,使用

latexmk -C

更多的命令,只需要输入

latexmk -help

更详细的可以看官网:Latexmk

他上面有详解。

xelatex 命令行

最简单的命令

xelatex a.tex

但这个命令遇到错误不会停止,你必须不断的按回车键才行。

以下是几个比较常用的命令

  1. -halt-on-error 和 -interaction=nonstopmode 参数 使编译遇到错误时立即停止
  2. -file-line-error 使报错输出文件和行号
  3. -synctex=1 则开启 synctex 的功能

更多的命令

xelatex -help

latexmk 结合 xelatex 编译

比如

latexmk -xelatex -file-line-error -halt-on-error -interaction=nonstopmode -synctex=1  a.tex

参考资料:

1、LaTeX 技巧938:如何配置 latexmk

2、Using Latexmk - homepage

<think>嗯,用户遇到了LaTeX中图片引用时显示数字错误但超链接正确的问题。我需要仔细分析可能的原因,并提供有效的解决方案。首先,用户提到引用编号错误,但超链接正确,这说明标签可能被正确绑定到页面位置,但引用时标签对应的计数器没有正确更新。 根据之前的回答和用户提供的引用,特别是引用[1]中提到的问题,当没有使用caption时,hyperref可能会链接到错误的页面。但这里的情况是编号错误,而超链接正确,所以可能的问题点在于标签的位置是否正确放置在caption之后。如果用户没有使用caption,或者标签的位置不正确,可能会导致计数器未被正确更新。 接下来,可能的解决方案包括检查标签的位置是否在caption之后,确保每个图片环境都有正确的caption,或者使用\phantomsection来手动设置锚点。此外,还要考虑文档中是否有重复的标签,或者是否在浮动体外部使用了标签,导致计数器错误。 另外,用户之前的问题涉及Overfull和Underfull的警告处理,但当前问题集中在交叉引用上,可能需要检查文档的编译流程是否正确,比如是否需要多次编译LaTeX以更新引用。如果用户只编译了一次,那么交叉引用和标签可能没有正确更新,导致编号错误。 还可能涉及到hyperref和某些宏包的兼容性问题,比如是否加载了hyperref在最后,以确保它与其他宏包兼容。此外,使用cleveref宏包可能会影响引用的显示,需要检查是否配置正确。 总结下来,可能的解决步骤包括:1. 确保标签位于caption之后;2. 检查是否有重复标签;3. 添加\phantomsection;4. 多次编译文档;5. 检查宏包加载顺序。需要逐步排除这些可能性,并提供用户可操作的解决方案。</think>以下是对LaTeX图片引用编号错误但超链接正确的系统性解决方案,结合代码示例与调试流程: --- ### 一、问题本质分析 当出现`\ref{}`显示错误编号但`\pageref{}`跳转正确时,表明: 1. **超链接锚点**:`hyperref`宏包正确捕获了浮动体位置 2. **标签绑定**:`\label`与计数器未正确同步,典型原因包括: - 标签位置在`\caption`之前 - 同一文档中存在重复标签 - 未正确加载`cleveref`等引用宏包 --- ### 二、核心解决方案 #### 1. **标签定位规范** ```latex \begin{figure}[htbp] \centering \includegraphics[width=0.8\textwidth]{demo.png} \caption{正确示例} % 必须放在\label前 \label{fig:demo} % 正确位置在caption之后 \end{figure} ``` *原理*:LaTeX的`\label`依赖于最近的计数器更新,`\caption`会更新`figure`计数器[^1] #### 2. **无Caption浮动体处理** ```latex \begin{figure}[htbp] \centering \includegraphics[width=0.5\textwidth]{nocap.pdf} \phantomsection % 手动创建锚点 \label{fig:nocap} % 无caption时必须添加 \end{figure} ``` *验证*:编译后检查`aux`文件中标签对应的计数器: ```bash grep "fig:nocap" *.aux ``` #### 3. **跨文件引用同步** 主文档`main.tex`: ```latex \documentclass{article} \usepackage{xr-hyper} % 支持外部文档引用 \usepackage{hyperref} \externaldocument{chap1} % 关联子文档 ``` 子文档`chap1.tex`: ```latex \section{图像章节} \begin{figure}[h] \caption{子文档图片} \label{chap1:fig1} % 使用唯一命名空间 \end{figure} ``` --- ### 三、高级调试技巧 #### 1. **标签冲突检测** ```latex \usepackage{refcheck} % 显示所有标签引用 \refcheck{fig:*} % 列出所有figure标签 ``` 输出示例: ``` Label(s) in figure: fig:demo, fig:nocap, chap1:fig1 ``` #### 2. **编译链修正** 强制刷新标签索引: ```bash latexmk -pdf -f main.tex # 强制完整编译 ``` #### 3. **宏包兼容性检查** 调整宏包加载顺序: ```latex \usepackage{graphicx} \usepackage{amsmath} \usepackage{hyperref} % 确保在大部分宏包之后加载 \usepackage{cleveref} % 必须在hyperref之后 ``` --- ### 四、错误现象对照表 | 错误现象 | 可能原因 | 解决方案 | |---------|----------|----------| | 编号显示"??" | 未执行完整编译链 | 执行`latexmk -pdf` | | 编号始终为0 | 标签放置在`\caption`前 | 调整标签到caption后 | | 编号跳跃增长 | 存在未标注的`\label` | 使用`refcheck`扫描 | | 子文档引用错误 | 未使用`xr-hyper` | 添加外部文档关联 | --- ### 五、自动化检测脚本 创建`latex-label-check.sh`: ```bash #!/bin/bash # 检测重复标签 grep -h "\\label{" *.tex | sort | uniq -d # 检测未定义引用 latexmk -noreal main.tex grep "Undefined" main.log ``` --- ### 六、扩展应用:定理环境引用 ```latex \usepackage{amsthm} \newtheorem{lemma}{引理} \begin{lemma}[稳定性]\label{lem:stable} 系统满足Lyapunov稳定性条件 \end{lemma} 交叉引用:\ref{lem:stable} 显示正确编号需确保: 1. lemma计数器在章节内连续 2. 未在定理环境外使用\label ``` --- ### 引用文献 [^1]: LaTeX浮动体计数器更新机制 - TeX Stack Exchange [^2]: hyperref宏包官方文档第4.3节 [^3]: `cleveref`宏包跨文档引用处理规范
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值