这个问题可能属于 Meta,在这种情况下请移动它,我不确定。
这个答案让我再次思考为什么几乎所有人建议加载以防fontspec
万一路拉泰克斯被使用。我只看到很少的答案,它们共享一个中立观点。我认为经常给出的一般性建议具有误导性,并且不应该不提及其缺点就给出。我会尝试解释。
- 自然支持unicode编码的源文件,我知道 pdflatex 也有解决方案,但在某些情况下你无法修复有关变音符号和其他重音字符的任何问题,例如在 bib 文件中。
- 很多有用的 lua 专用包
- 总体上支持 lua 代码
我从来不想使用unicode字体。
在切换到 lualatex 之前,我在 TeX.se 上阅读了很多关于这实际上意味着什么的内容。我总是读到“加载fontspec
”,所以我就这么做了。乍一看,使用 unicode 字体似乎是一个非常好的主意 - 直到涉及到数学。支持的 unicode 数学字体数量很少,无衬线数学字体更少,而且价格昂贵。但即使是我想要的衬线数学字体我花了几天时间尝试解决我遇到的所有问题,但没有成功。除此之外,它fontspec
仍然非常慢(见下面的基准),并且严重妨碍了我的工作流程。
所以我放弃了fontspec
,转而使用luainputenc
和fontenc
,我再也没有遇到任何严重问题,并强烈推荐这个组合给所有人。如果fontspec
向新用户推荐 而不提及其缺点,我会“伤心”。
所以请赐教。除了能够使用各种花哨的 Unicode 字体(因为一百种非 Unicode 字体不会让你开心)之外,除此之外 -人们为什么要使用 有什么真正的理由吗fontspec
?
如果不,我们可以停止推荐它吗?
关于评论
- 我把
fontspec
和unicode-math
扔进了一个水池里,这可能有点超出我略带挑衅的意图。unicode-math
不过,使用数学似乎也是合乎逻辑的结果。*1 - 我同意 Ulrike Fischer 的观点,有些语言或文字需要的
fontspec
。但在这种情况下,用户希望使用fontspec
lualatex 并进行编译。我指的是相反的情况:用户使用 lualatex 进行编译并被告知使用fontspec
- 这本身并不是一个合乎逻辑的结果。
*1 假设您加载了fontspec
,然后输入\setsansfont
和\setmainfont
。对于许多初学者来说,下一步合乎逻辑的步骤是\setmathfont
。然后会出现错误,因此用户可能宁愿加载 unicode-math,也不愿关闭\setmathfont
并加载经典的数学字体包。
基准
评论中对我所要求的指控有一个实际基准,就在这里。
我使用了来自这个答案对编译进行多次计时:
@echo off
@setlocal
set start=%time%
:: runs your command
lualatex.exe -synctex=1 -interaction=nonstopmode -enable-write18 document.tex
set end=%time%
set options="tokens=1-4 delims=:.,"
for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100
for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100
set /a hours=%end_h%-%start_h%
set /a mins=%end_m%-%start_m%
set /a secs=%end_s%-%start_s%
set /a ms=%end_ms%-%start_ms%
if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms%
if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs%
if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins%
if %hours% lss 0 set /a hours = 24%hours%
if 1%ms% lss 100 set ms=0%ms%
:: mission accomplished
set /a totalsecs = %hours%*3600 + %mins%*60 + %secs%
echo command took %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)
pause
我用它来执行文章:
\documentclass[a4paper]{article}
\usepackage[utf8]{luainputenc}
\usepackage[T1]{fontenc}
\usepackage{pxfonts}
%\usepackage{fontspec}
%\setmainfont{Minion Pro}
\usepackage{pgffor}
\usepackage{blindtext}
\begin{document}
\foreach \n in {0,...,100}{
\blindmathpaper
}
\end{document}
和一个投影机演示:
\documentclass{beamer}
\usepackage[utf8]{luainputenc}
\usepackage[T1]{fontenc}
\usepackage{pxfonts}
%\usepackage{fontspec}
%\setmainfont{Minion Pro}
\usepackage{pgffor}
\usepackage{lipsum}
\begin{document}
\foreach \n in {0,...,100}{
\begin{frame}
\lipsum
\end{frame}
}
\end{document}
结果是
- 文章没有字体规范:1.9 秒
- 文章使用 fontspec:7.2 秒
- 投影机没有字体规范:4.3 秒
- 投影机使用 fontspec:8.8 秒
这些秒数在一天内累计起来。
结论
经过这么多评论和回答,我可能显得非常固执,对此我深表歉意。感谢您的意见,我现在同意您的论点。但我还认为这个案例并不那么简单,因为尽管一些手册中有很多警告,但我的初始方法仍然非常有效。我不知道有多少普通用户阅读了字体编码手册或只是复制粘贴了工作代码。
因此,归根结底,使用 fontspec就是这样值得推荐。它比较慢,所以我们希望将来能更快。在此之前,您可以固执地忽略警告并使用 luainputenc,后果自负。
谢谢,我学到了很多。
答案1
依赖fontspec
over 的一个原因luainputenc
来自第二个包的包文档。摘要很简单:
LuaTeX 的输入编码管理,仅用于兼容旧文档。对于新文档,使用 UTF-8 编码和 Unicode 字体是强烈推荐。你已被警告!
然后,文档的第一部分题为“概述:何时(不)使用此包”,内容如下:
此软件包仅用于兼容性。它在以下两种(重叠)情况下很有用:
- 您的源未采用 UTF-8 编码,并且由于某种原因您不想对其进行重新编码。
- 您的文档使用的是传统的 8 位字体(带有 fontenc),而不是现代 Unicode 字体(很可能带有 fontspec 或 luaotfload 和带有选项 EU2 的 fontenc)。
同一节接下来的内容(部分):
luainputenc 有几种操作模式。默认情况下,它基本上将 LuaTEX 变成一个 8 位引擎,这意味着您失去了使用 LuaTEX 的一半好处。
无论如何,我认为很明显,由于软件包的作者本人不建议将其用于luainputenc
“新”文档,因此没有理由其他的将它推荐给其他用户。它似乎不适合你使用该软件包的目的。(这也许很好:你已经花时间探索了最适合你需求的东西。)
当然,人们可能会选择使用这个包fontspec
(我希望基于 LuaTeX 的文档也能编译得更快!),但在 之前,说fontspec
(或luaotfload
)不应该被推荐——尤其是对新用户——似乎有些牵强luainputenc
。我当然不会这么做。
答案2
fontspec 不会将数学设置更改为 unicode 数学字体——这是由 unicode-math 完成的——它只会更改一些数学字母,并且\mathrm
使用该选项no-math
您也可以避免这种情况。因此,如果您有一个适用于 pdflatex 或 lualatex 和 luainputenc 的良好(无衬线)数学设置,您也可以将其与 lualatex 和 fontspec 一起使用。
除此之外,你似乎对其他脚本的看法相当“英语作家”,并不关心。我相信你选择 luatex 是因为 lua 脚本。但大多数人改用 xelatex 或 lualatex 是为了能够使用系统字体并轻松使用非拉丁脚本书写——你只需要查看与 lualatex 相关的问题即可看到这一点。