不同的编译方式呈现的pdf文件是一样的格式吗? 选择的时候根据什么选择呢? 小白请教 谢谢大家 是这个问题太傻了嘛...没人答呢为啥

4 回答4

10
命令是引擎、格式、输出模式排列组合的结果。 1. `latex` 命令,pdftex 引擎 + latex2e 格式 + dvi 输出模式 1. `pdftex` 命令,pdftex 引擎 + plain tex 格式 + dvi 输出模式 1. `pdflatex` 命令,pdftex 引擎 + latex2e 格式 + pdf 输出模式 1. `xetex` 命令,xetex 引擎 + plain tex 格式(xetex 引擎只有一种输出模式,即输出 `.xdv` 文件,然后由 `xdvipdfmx` 程序转化为 `.pdf` 文件。这个转化过程默认是自动的) 1. `xelatex` 命令,xetex 引擎 + latex2e 格式 引擎的差异在于 primitive、primitive 的语法和功能上有差异,详见相应文档,如 `texdoc pdftex`、`texdoc xetex` 和 `texdoc dvipdfmx`。 格式的差异在于预定义的宏,plain tex 格式是 Knuth _The TeXbook_ 书里介绍的最初格式,latex2e 格式是通常认知和使用的 latex。 输出模式的差异,就是输出为 `.dvi` 还是 `.pdf` 格式的差异。 大多数使用场景,用的都是 latex2e 格式 + pdf 输出模式的组合,差异在于使用的引擎。西文排版,pdftex 功能足够了,所以它用得多一些;中文排版,只有应用 xetex 或 luatex 的独有功能后才更完善,所以有使用 xetex 或 luatex 引擎的需求。另有少数投稿平台,还在使用 pdftex 的 dvi 模式。 如果使用的功能仅限于两个引擎的重合部分,那么用哪个都可以。如果用到了仅某个引擎提供的功能,那么只能用那个引擎。用户通常不直接使用 primitive,而是使用基于 primitive 封装的宏包,所以这种「只能用」的信息往往由宏包文档提供。例如,`xeCJK` 宏包因为使用了仅 xetex 引擎的 char class 功能,所以只支持 `xetex` 引擎。`pdfrender` 因为使用了仅 pdftex(和 luatex)支持的多个色彩栈(color stack)功能,所以只支持 pdftex(和 luatex)引擎。
1
大哉问…… 我只讲实用性。 `latex` 现在用得很少。 `pdflatex` 在我投稿英文期刊时用。 `xelatex` 在我处理中文文档时用。
0
被邀请了就尝试回答一下。个人的一些理解。 这三个编译命令直接的编译成果其实是不一样的: + `latex` : 编译的直接成果是 `dvi`,需要其他驱动如`dvipdfm(x)` 将`dvi` 转换成 `pdf`,实际上,在现在的发行版中,已经没有这个编译引擎了,你在命令行调用的 `latex` 实际上是`pdflatex`,由它编译出 `dvi`格式的文件。 + `pdflatex`:编译的直接成果就是 `pdf`,不需要其他引擎来转换成 `pdf`。 + `xelatex`: 编译的直接成果其实是 `xdv`, 名字上看是 `dvi` 的一种扩展,之不过这个格式的文件默认是在内存中生成,在编译的最后,`xelatex` 将直接调用驱动 `xdvipdfmx`(Mac OS 上在以前曾经用过 `xdv2pdf`,现在使用的也是 `xdivpdfmx`) 将其转换成 `pdf`。 不同的编译方式最终得到的 pdf 文件可能呈现出不同的样式,这是因为不同的引擎和驱动使用字体的方式不一样,而且某些宏包还会指定需要使用的编译引擎。 关于如何选择,首先应该先看使用模板的使用手册或文档,看其要求使用哪种编译引擎;如果是个人使用基本文档类撰写文章,通常情况下,西文文档使用`pdflatex`,中文文档使用`xelatex` 配合中文基础文档类(`ctex*`)。现在几乎很少使用 `latex` 进行编译了,没必要兜个大圈子。
  • 回复 undefined : 哦,是么,我没用过macOS,以前在什么地方看到说macOS 上是用 xdv2pdf 的,大概率是我记错了。 – 拿了桔子跑啊 2019-12-03 17:04 回复
  • macOS 上也是 xdvipdfmx,不是 xdv2pdf – 论坛 github.com/CTeX 2019-12-03 13:59 回复
  • 回复 undefined : 想用也可以,但是很多模板是使用 pdflatex 的,使用 xelatex 字体会变得不一样。 – 拿了桔子跑啊 2019-12-02 20:30 回复
  • 英文能不能优先使用xelatex呢 – 青莲剑仙 2019-12-02 19:33 回复
  • 谢谢您,这样一说明白很多了 – cccc111 2019-12-02 16:01 回复
0
这几天正好发现`sumatrapdf`能查看pdf的制作程序,来回答一下其实我不懂底层原因,但是经过测试,你会发现同一段代码(假定`pdflatex`和`xelatex`都能编译通过的话),用`pdflatex`编译和`xelatex`编译生成的pdf确实有不一样,至少在大小上讲是这样。给个例子吧。 ```tex \documentclass[10pt]{standalone} \usepackage{pgf,tikz,pgfplots} \pgfplotsset{compat=1.16} \begin{document} \begin{tikzpicture} \begin{axis}[ width=4.5in, height=2.7in, scale only axis,%整个轴的范围,而不是图的范围 xlabel={$x$}, ylabel={$y$}, ] \addplot [smooth,blue,domain=-10.0:10.0,samples=2001] {sin(pi*(x)*180/pi)/(pi*(x))}; \addlegendentry{$\frac{\sin \pi x}{\pi x}$}; \end{axis} \end{tikzpicture} \end{document} ``` 用`xelatex`,`pdflatex`,`lualatex`编译生成pdf,在`sumatrapdf`里面查看信息,得到如下结果。![](https://pics.latexstudio.net/data/images/201912/a5af3c8bb48851b.png) ![](https://pics.latexstudio.net/data/images/201912/7505a207d8fb97f.png) ![](https://pics.latexstudio.net/data/images/201912/1c0e4bf409892ce.png) 个人感觉即使pdf版本一样,但是制作pdf的程序,像`xelatex`,`pdflatex`,`lualatex`,`adobe acrobat`,`word`等等不一样生成的pdf也不一样,除了下大小方面的差别,其他的差别在哪我也不知道,关于底层的,文件格式标准的问题太难了,希望大佬指点。
  • 这个「PDF 制作程序」信息是 pdf meta-data 中的一条,可能由引擎和驱动自动填充,但用户也可以手动控制写入任意指定内容(如通过 `hyperref` 包的 `pdfinfo` 选项),所 – 论坛 github.com/CTeX 2019-12-03 14:02 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。