对于我计划编辑的下一本计算机科学书籍,我正考虑从 pdflatex+bibtex 切换到更现代的设置。为了了解内容,请想象一下 Cormen、Leiserson 和 Rivest 所著的《算法导论》风格的 400 页(轻度数学、一些自创的 GCL 类编程语言的伪代码、一些自绘图表、一些图像),但将以 PDF 文件的形式发送给 Springer。这本书的主要语言将是德语,并且会有少量其他语言的排版(包括大多数其他基于拉丁语的语言、俄语和希伯来语数学字母,当我用尽所有拉丁字母时)。我很可能会使用babel
和microtype
如下:(\usepackage[USenglish,british,canadian,finnish,latin,russian,french,dutch,german,ngerman]{babel}
非德语主要用于排版参考书目)和\usepackage[babel=true,verbose=errors,protrusion=true,expansion=true,kerning=true]{microtype}
。我计划制作一个索引(或索引)和一个符号表,理想情况下两者都与软件包一起使用glossaries
。图表和图形可能使用绘制TikZ
。
根据我目前的经验,我考虑选择 XeLaTeX 和/或 biber。就我的测试而言,XeLaTeX 给我带来的直接好处是,现在作为垃圾进入生成的 PDF 文件的文本层的某些字符将成为有意义的可选字符。使用,排版多语言书目将比使用+biber
更容易。bibtex
babelbib
必须说一句题外话。我确实考虑过用 LuaLaTeX 来替代 XeLaTeX。但我的测试表明,LuaLaTeX 在我的输入上比 XeLaTeX 慢得多,这会让我的排版员的日常工作变得更加困难,尤其是对于一本大书。(对于好奇的人,我的实验显示了 pdflatex : xelatex : lualatex 在相同内容上的运行时间的以下商,同时调整了序言以适应编译器:1 : 1.86 : 2.78。所以,lualatex
是 1.5 倍慢点而不是xelatex
我的输入。因此,经常有人声称 lualatex 比 xelatex 更快,这是一般来说误导。)至于现在,用 编写一本内容相似的稍大的书(从头开始,而不是重新编写)需要 2 分钟pdflatex
;用 {xe|lua}latex 可能可以忍受 3 分钟,但不能再多了。我没有使用过 ConTeXt,到目前为止无法发表任何意见。截至今天,SILE 显然没有数学,或者至少我在手册中没有看到它。截至今天,Omega 和 NTS 似乎已经死了。
很有可能SV单声道必须适应 XeLaTeX。主要字体将是 Times New Roman 或类似字体;次要字体(用于章节标题)将是 Arial、Helvetica 或类似字体。因此,我正在研究 TeX Gyre Termes 和 TeX Gyre Heros。此外,我查看了从 pdfLaTeX 转到 XeTeX - 我需要知道什么?,经常加载的包:pdfLaTeX 和 XeLaTeX 之间的区别,tikz、预览包和 xelatex 中的透明度,PSTricks 透明度不适用于 MikTeX 的 XeLaTeX, 和使用 xelatex 的 PDF 图层 (OCG)并认为就我的情况而言,它们不是问题。
现在,是否有人尝试过使用 XeLaTeX+biber 完成与上述类似的任务?如果是,您的体验如何?例如:
将 SVMono 适配到 XeLaTeX 和/或 biber 有多难?
是否存在您无法克服(或不容易克服)的障碍,而不得不投入大量计划外的努力或切换回 pdflatex+bibtex?
应避免哪些陷阱?
有没有你意想不到的免费午餐?
答案1
我已经从您在问题中提供的链接下载了 SVMono 的模板。查看类文件,似乎不需要对 XeLaTeX 进行任何特殊调整。只有主模板文件book.tex
需要调整。
字体
以下几行加载的字体不适用于 Xe/LuaLaTeX。
\usepackage{type1cm}
\usepackage{newtxtext} %
\usepackage{newtxmath} % selects Times Roman as basic font
根据您的问题,您想用 TeX Gyre 字体替换它们(您没有指定单色字体,因此我选择了 Latin Modern Mono)。
\usepackage{amssymb}
\usepackage{unicode-math}
\setromanfont{texgyretermes}[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
BoldItalicFont = *-bolditalic
]
\setsansfont{texgyreheros}[
Extension = .otf,
UprightFont = *-regular,
BoldFont = *-bold,
ItalicFont = *-italic,
BoldItalicFont = *-bolditalic
]
\setmonofont{lmmono10}[
Extension = .otf,
UprightFont = *-regular,
ItalicFont = *-italic,
]
\setmathfont{texgyretermes-math.otf}
使用此设置,模板在 XeLaTeX 和 LuaLaTeX 上排版均无错误。虽然出现了几个溢出的框,但示例文本无论如何都会被替换。
参考书目
SVMono 有一个类选项可以使用natbib
,但默认情况下不启用,这允许您使用您选择的书目处理器。我验证了biblatex
可以通过添加
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\nocite{*}
在序言中和\printbibliography
之前\end{document}
。
微排版
microtype 包也能正常工作,但是该kerning
选项仅在 pdfTeX 中可用,而expansion
在 XeTeX 中不可用。
语言
不幸的是,该babel
软件包与 SVMono 存在一些问题。如果只\usepackage[english]{babel}
在前言中添加aux
,则在第二次运行期间读取文件时会出现错误
! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.5 \newlabel{intro}{{1}{3}}[
None]
这是因为 SVMono 加载了ntheorem
安装其自身版本的 的包\newlabel
。为了解决这个问题,通常会babel
先\documentclass
使用进行加载\RequirePackage
。不幸的是,这种方法效果不佳,因为它会尝试检查在加载类之前不存在的类选项列表。这意味着我们必须在加载之前babel
保存 的定义,然后再将其恢复:\@newl@bel
babel
\makeatletter
\let\ntheoremnewlabel\@newl@bel
\makeatletter
\usepackage[USenglish,british,canadian,finnish,latin,russian,french,dutch,german,ngerman]{babel}
\makeatletter
\let\@newl@bel\ntheoremnewlabel
\makeatletter
概括
这应该可以回答你问题中的第 1 点和第 2 点。对于第 3 点和第 4 点,我无法立即想到任何答案,但一路上总会有一些意想不到的情况。
至于速度,使用上述所有功能排版 SVMono 示例平均需要 2.55 秒(使用 LuaLaTeX),3.02 秒(使用 XeLaTeX),因此在这种情况下 LuaLaTeX 似乎比 XeLaTeX 更快。当然,当添加更多文本和许多 TikZ 图形等时,您的里程可能会有所不同。
答案2
我还没有完成 svmono,但我只需要调整另一个发布者类来使用 lualatex,所以在快速浏览了 svmono 之后我会说
我更喜欢 lualatex 而不是 xelatex,因为它具有微类型功能和更好的图形(pgf)支持(并且由于 expl3 和字体加载器的变化,它现在比去年更快)。
我预计需要 2-4 小时的工作才能将 svmono 移至 lualatex+biber,其中大部分时间需要用于检查代码并考虑是否有问题(大多数情况下不需要进行任何更改)。
我不会指望出现大问题,但仍然希望以后能调整一些小问题,因为在这些相当古老的课程中,人们总会忽略一些东西……