提问于:
浏览数:
11182
不同的编译方式呈现的pdf文件是一样的格式吗? 选择的时候根据什么选择呢? 小白请教 谢谢大家 是这个问题太傻了嘛...没人答呢为啥
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` 进行编译了,没必要兜个大圈子。
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 回复
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。