LaTeX 表达式
- 贡献者
绘图过程中,用户可能会需要特殊字符标注或者显示公式。GMT 已经可以实现打印简单的特殊字符和转义序列,但如果想实现更加复杂的特殊字符和公式,则需要借助功能强大的 LaTeX。
语法
GMT 自 6.2 开始支持在文本字符串中嵌入 LaTeX 表达式,这些文本字符串包括使用 -B 选项 在标题、子标题或标签中指定的字符串,也包括通过 text 模块添加的单行文本。GMT 中 LaTeX 表达式可以用两种不同的写法表示:
使用
@[ ... @[
,如Plotting @[\Delta \sigma_{xx}^2@[
使用
<math> ... </math>
,如Plotting <math>\Delta \sigma_{xx}^2</math>
注解
若要在 GMT 6.2 以前的版本使用 LaTeX,请参考 https://blog.seisman.info/gmt-latex/
LaTeX 数学符号可参考:数学符号表
下面展示了一个在 GMT 中使用 LaTeX 表达式的例子
#!/usr/bin/env bash
gmt begin GMT_latex pdf,png
gmt basemap -R-200/200/0/50 -JX15c/4c \
-BSwen+t"Use <math>\Delta g = 2\pi\rho Gh</math>" \
-Bxaf+l"@[\nabla^4 \psi - \Delta \sigma_{xx}^2@[ (MPa)"
gmt text -F+f15p << EOF
0 15 Newton's integral: <math>V = \int_{v} \frac{\mathrm{d}m}{l}</math>
0 30 Euler's formula: @[e^{ix} = \cos x + i \sin x@[
EOF
gmt end show
GMT 字体和 LaTeX
LaTeX 是一个庞大且复杂的排版系统,有许多可选包,用户安装的 LaTeX 需包括所有 GMT 必须的包。通过包管理器安装 LaTeX 的方法请见 GMT Wiki。其中,GMT 必须的包和字体包括:
必需包:fontenc 和 inputenc
必需字体:helvet、mathptmx、courier、symbol、avantgar、bookman、newcent、mathpazo、zapfchan 和 zapfding
上述必需包已经默认包含在所有的 LaTeX 发行版中,必需字体则可以在终端中执行如下命令安装:
tlmgr install collection-fontsrecommended
上述字体列表中的字体均可以匹配 GMT 中的字体。因此,如果用户通过 FONT_TITLE 修改了标题默认的字体,GMT 将在后台生成的 LaTeX 脚本中把该字体设置为默认字体。这种设置可以确保标题最终渲染的字体和用户设置的字体一致。
技术细节
GMT 中显示 LaTeX 表达式的原理:如果在文本字符串中发现特殊标识(即 @[
对或 <math> </math>
对),GMT 将使用 latex
和 dvips
命令(需提前安装 LaTeX 环境)把整行转换为 EPS 文件。然后,将该 EPS 文件放置在对应的位置。
这里通过一个实例来帮助用户排查 LaTeX 安装中可能存在的问题。假设用户使用 basemap 制作的图的标题为
-B+t"Use @[\Delta g = 2\pi\rho Gh@["
。GMT 会为该 LaTeX 表达式创建一个临时目录,其中包含一个名为 gmt_eq.tex
的文件:
\documentclass{article}
\usepackage[T1]{fontenc} \usepackage[utf8]{inputenc}
\usepackage{helvet}
\begin{document}
\thispagestyle{empty}
\fontfamily{phv}\selectfont
Use $\Delta g = 2\pi\rho Gh$
\end{document}
由于 FONT_TITLE 设置为 Helvetica,LaTeX 文件将默认字体修改为 Helvetica( helvet 包, 代码为 phv ),该 tex 文件会被转换为 DVI 文件:
latex -interaction=nonstopmode gmt_eq.tex > /dev/null
接着,进一步将结果转换为 EPS 文件:
dvips -q -E gmt_eq.dvi -o equation.eps
这两个命令通过 gmt_eq.sh
脚本(在 windows 下为 gmt_eq.bat
)执行。如果命令成功执行,GMT 将读取 EPS 文件 equation.eps
并放置在标题的位置。如果脚本由于某些原因执行失败,GMT 将报错并指导用户在临时目录中进行进一步排查。此时,用户可以运行 latex
命令来查看报错信息(但要去除重定向 > /dev/null
)。通常情况下,报错信息会显示问题出现的原因,即缺少某种字体或其他信息。如果用户不能独立解决报错,请在 GMT 官方 GitHub
上提 issue 并提供 LaTeX 脚本和报错信息。