Texmaker

Texmaker 之所以存在,是因为它的作者离开了另一个 LaTeX 编辑器。Pascal Brachet 是 KDE 桌面上的 LaTeX 环境 Kile 的创始人,2003 年他把维护工作交给了另一位开发者;就在同一年的 5 月 29 日,Texmaker 的第一个版本发布了——这一次是一个只用 Qt 写成、不绑定任何桌面环境的跨平台集成环境。本页依次讲述:把多文件稿子拢在一起的 主文档 机制、F1 背后的 快速构建 链条、随打字而生长的 结构视图,以及 Texmaker 与它自身的分支 TeXstudio 有何不同。

写 Texmaker 的人,也创立了 Kile

这段渊源留在了 Kile 那一侧的记录里。Kile 的 AUTHORS 文件里排在第一位的是 Pascal Brachetkile(1) 手册页也写着「Kile was written by Pascal Brachet and Jeroen Wijnhout」。Wijnhout 本人在 2003 年 10 月的一次访谈中说,他想给 Kile 加功能于是联系了 Brachet,结果「他想停止 Kile 的开发。我得到的比预想的多,项目落到了我手上」。Brachet 放下的是一个与 KDE 紧紧绑在一起的编辑器,而他转手写出的 Texmaker 不需要 KDE 的库,只靠 Qt 就能跑。同一个构想,从桌面环境里剥离了出来。

结果就是一个把整套集成环境塞进一个窗口的编辑器:左边结构视图,中间源码,下方日志与消息,右边 PDF 预览。许可证是 GPL v2,底子是 Qt,Windows、macOS、Linux 的构建都由同一位作者发布。里面装着:Unicode 及多种编码、可折叠 \part\chapter\section\begin{...}…\end{...} 的代码折叠、约 370 个数学符号的调色板、支持连续滚动的内置 PDF 阅读器、拼写检查、补全、矩形块选择、跨文件夹搜索、正则表达式、Asymptote 支持,以及自定义代码片段——也就是说,几乎全是 TeXworks 有意舍弃的那些东西。

Texmaker 与 TeXstudio 的区别:TeXstudio 是 Texmaker 的分支

两者长得像,是因为其中一个是从另一个的源码上分出来的。 2008 年,一个项目从 Texmaker 的代码分叉出去,并于 2009 年 2 月以 TexMakerX 之名发布首个版本。由于名字太容易混淆,它在 2011 年 6 月改名为 TeXstudio。这就是为什么两者的界面布局和设置思路至今仍像兄弟。分叉之后新增的主要在编辑一侧——语法检查、镜像光标、更强的折叠与补全——而 Texmaker 保持着原作的样子:设置更少,更直白。学会其中一个,另一个立刻就能上手,所以实际做法是:先从轻的那个(Texmaker)开始,等它不够用了再转到 TeXstudio

主文档——把多文件稿子拢成一份

把稿子按章拆开之后,第一件事是在「Options」菜单里指定主文档。 这是 Texmaker 处理多文件的枢纽。进入主文档模式后,无论当前打开哪个文件,构建的起点始终是主文档:编辑 chapter3.tex 时按 F1,被编译的仍是 main.tex。退出也在同一个「Options」菜单里,进出集中在一处,因此不容易搞不清自己此刻处在哪种状态。

主文档模式一开,命令参数里那些记号的含义就变了。Texmaker 设置栏里用得最多的 % 表示「去掉扩展名的文件名」,但在主文档模式下它展开为主文档的名字。正因如此,才另有一个 #:即使在主文档模式下,它给出的也是当前打开的那个文件。不知道这两者之别,一旦想按章跑点什么就必然绊倒。同一批字段还接受表示当前行号的 @ 和表示当前目录的 !

记号展开为
%去掉扩展名的文件名;主文档模式下为主文档的名字
#当前打开文件去掉扩展名的名字(主文档模式下也不变)
@光标所在的行号;把正向搜索交给外部阅读器时会用到
!当前目录
%% ## @@ !!想写出记号本身时的写法:写两遍就还原成一个字符

快速构建——决定 F1 到底跑什么

Texmaker 的构建,由 「Options」→「Configure Texmaker」(macOS 上叫 Preferences)中的两个区块决定。Commands 保存「每条命令的实体」——pdflatexdvipdfmx 究竟带什么参数启动;Quick Build 保存「它们按什么顺序跑」。分工干净,所以像切换到日文引擎这种「顺序不变、只换内容」的改动,只需在一处完成。触发链条的是工具栏按钮,或者 F1 键。

Quick Build 区块把常见组合列成一组单选按钮,从中选一个即可。想自己拼装,就用最下面的 User 栏,用 | 把命令连起来。

  • PdfLaTeX + View Pdf —— 用 pdfLaTeX 直接生成 PDF 并显示。出厂默认,以西文为主时够用。
  • LaTeX + dvips + View Ps —— 经由 DVI,用 dvips 转成 PostScript 再显示。
  • LaTeX + dvipdfm + View Pdf —— 经由 DVI,用 dvipdfm(x) 转成 PDF。日文的经典路线。
  • User —— 在上面的栏里用 | 把想要的命令串起来,拼出自己的流程。

Commands 区块里的 PdfLaTeX 栏,默认大致如下。-interaction=nonstopmode 让 LaTeX 遇到错误时不停在交互提示上,-synctex=1 让它输出后文 SyncTeX 需要的信息。无论选哪条路线,这两个都值得保留。

terminal
pdflatex -synctex=1 -interaction=nonstopmode %.tex

要是希望参考文献、索引乃至重跑次数都自动处理,可以在 Quick Build 的 User 栏里只写一条 latexmk。latexmk 会解开依赖并按需要的次数处理,于是这边不必再排列命令。latexmk 自身的细致配置是另一页的主题。

terminal
latexmk -pdf -synctex=1 -interaction=nonstopmode %.tex

日文的构建设置(upLaTeX 与 LuaLaTeX)

日文长期以来的定番是 upLaTeX + dvipdfmx,在 Texmaker 里只需改两处。 在 Commands 区块里,把 LaTeX 栏 改成 uplatexDvipdfm 栏 改成 dvipdfmx,然后在 Quick Build 里选 「LaTeX + dvipdfm + View Pdf」。这样按下 F1,就会按 upLaTeX → dvipdfmx 的顺序处理并打开 PDF。-kanji=utf8 把输入编码钉死为 UTF-8,-no-guess-input-enc 关掉编码的自动猜测。若在此漏掉 -synctex=1,症状会很难辨认:一切正常,唯独反向搜索不动。

terminal
uplatex -no-guess-input-enc -kanji=utf8 -synctex=1 -interaction=nonstopmode %.tex
terminal
dvipdfmx %.dvi

另一条路是 LuaLaTeX。若是从零开始写日文,它步骤更少,不经 DVI 一步到 PDF。确认 Commands 里的 LuaLaTeX 栏没问题,然后在 Quick Build 的 User 栏写上 lualatex -synctex=1 -interaction=nonstopmode %.tex 即可(日文排版本身由 luatexja 宏包或 ltjsarticle 文档类负责)。若想把配置集中在一处,也可以把 upLaTeX 或 LuaLaTeX 的流程写进 .latexmkrc,Texmaker 这边只负责调用 latexmk。

结构视图、补全与向导

最左边的 结构视图(Structure view) 是一张随打字实时刷新的文档地图。\section 之类的 标题\label标签,以及经 \input\include 引入的 文件,都按层级排开,点一下条目就跳过去。在设定了主文档的项目里,章节文件的内容也并入同一棵树,所以再长的稿子也能在不丢失全局的前提下移动。这块「看全局的面板」正是 TeXworks 所没有的,也是让 Texmaker 成其为集成环境的核心之一。

补全能省下不少击键。在 \ 后面打字母,候选命令便列出来,字母越多范围越窄;带参数的命令会显示占位符,于是 { } 里可以逐个填。管用的不止是命令名。写 \ref{...}\pageref{...},文档里的 标签 就会列出来;写 \cite{...},文献数据库里的 键名 会出现——为半记不清的名字而卡住的场面就此消失。此外还有 向导Quick Start 一口气定下 \documentclass、纸张尺寸与编码;TabularTabbing 以及可在 arraymatrixpmatrix 之间选择的 Array,则替你写出那些没人背得下来的骨架。

F1 跑不通时的排查顺序

在改写 Quick Build 的序列之前,先把问题拆成两个:日志说了什么?外部命令究竟启动没启动? 这两者的成因和对策完全不同,可在屏幕上都表现为「按了 F1,没出 PDF」。尤其 Could not start the command 根本不是 LaTeX 的错误,它的意思是 Texmaker 找不到那个可执行文件——所以日志翻多少遍也不会写着它。长论文还是短报告,顺序都一样。

  • 先在 Messages / Log file 面板里找第一个错误。若行号可点,直接跳到出问题的源码处。
  • 遇到 Could not start the command,在终端敲 pdflatex --versionuplatex --version,去修 PATH;这与 Texmaker 的设置无关。
  • 若只是 PDF 不刷新,看看内置阅读器是不是攥着旧文件,以及所选的 Quick Build 里究竟有没有 View Pdf。
  • 若只有日文出错,确认 LaTeX 栏与 Dvipdfm 栏是否配成了 upLaTeX + dvipdfmx 这一对。

让 SyncTeX 生效的两个条件

只需要两样东西:编译命令里带上 -synctex=1,以及用内置阅读器打开 PDF。 第一样是为了让 LaTeX 生成同步文件(.synctex.gz),按上面的命令示例写就够了。第二样是在 Commands 区块的 Pdf Viewer 里选 built-in viewer;若想把它嵌进主窗口,再启用 Embed。用外部阅读器打开的话,双向跳转两个方向都会失灵。

操作很直白。按手册所述,只要编译命令里有 -synctex=1内置阅读器会自己移动到与当前行对应的 PDF 位置——这就是正向搜索,没有按钮可按。反过来,反向搜索是在内置阅读器的某个词上右键单击,从上下文菜单里选择,编辑器便跳到对应行。同步机制本身由另一页讲述。