在 LaTeX 文档中,我使用了许多软件包、许多为方便输入而创建的不同命令以及非标准字体。我想在 MetaPost 中使用它们。问题是标签的文本(包括btex
-中的文本etex
)是在命令工作期间渲染的mpos
,而不是pdflatex
。是否可以以某种方式将文本、公式的渲染推迟到 LaTeX 文档的编译阶段?我知道一种使用verbatimtex
- 的方法etex
,但它需要将文本从 LaTeX 复制到 PostScript(这不完全是延迟渲染,但它允许在标签渲染时拥有必要的命令、字体等)。
更新型多巴胺:Marijn 在评论中写道:您能否发布一个小的示例文档和必要的编译链来说明您的问题?我想要实现的目标如下:
pic.mp
:
outputtemplate := "%j-%3c.mps";
beginfig(1);
label(btex $x$ etex, (0, 0));
endfig;
end;
main.tex
:
\documentclass{article}
% All kinds of usepackage, def, etc.
\usepackage{stix}
\begin{document}
\includegraphics{pic-001.mps}
\end{document}
这样,在调用mpost pic
和pdflatex main.tex
命令后,我得到了一个文件,其中$x$
出现了 ,用 stix 字体输入。此外,我想要一个解决方案,其中序言文本不必在 MetaPost 文件中重复,因为几乎不可能维护两个相同的文本。
我在编译 LaTeX 文档时看到了渲染文本的功能,而不是在创建图像时。本文。
答案1
将 Metapost 图表集成到您的 LaTeX 环境中非常简单,如果您可以切换到lualatex
而不是pdflatex
。例如:
\documentclass{article}
\usepackage{stix}
\usepackage{luamplib}
\mplibtextextlabel{enable}
\begin{document}
A document using Stix for maths: $e=mc^2$.
\[
\begin{mplibcode}
beginfig(1);
z0 = 42 dir 12;
drawarrow origin -- z0 cutafter fullcircle scaled 6 shifted z0;
dotlabel.rt("$x$", z0);
endfig;
\end{mplibcode}
\]
\end{document}
编译它lualatex
得到以下内容:
文档是这里以及我自己的第 12 节使用 Metapost 绘图文档。
...但是 lualatex 真的很慢!
事实上,现在真的不再如此了。即使在我 2011 年的旧 Mac Mini 上,也只需几秒钟就能编译出包含 120 页复杂图形的基准文档。pww-2.tex
参见这个项目。
...但是我的文档很大!
好的,我上面提到的使用 Metapost 绘图文档也很庞大,在这种情况下,我有一种混合的工作流程。
我用
lualatex
它来编译主文档——并且它很高兴地包含了我所有的旧.mps
图形,没有任何改变。现在我正在逐步将我的旧
.mp
源迁移到独立luamplib
图形。这是我使用的模板:
\documentclass[border=5mm]{standalone} \usepackage{luamplib} \begin{document} \mplibtextextlabel{enable} \begin{mplibcode} beginfig(1); endfig; \end{mplibcode} \end{document}
除了对于 DwM 我做了一些改变,我将主文档的通用代码放在一个单独的本地样式文件中,名为
dwmcommon.sty
。就\begin{document}
在主文档和这些独立图形中,我必须\usepackage{dwmcommon}
加载所有通用定义,这样我只需在一个地方维护它们。当然,我必须使用
lualatex
而不是 来编译这些更新的 MP 文件mpost
。这将.pdf
直接生成输出文件,而不是.mps
或.eps
,从而节省了该步骤中的又一个过程。
这种混合方法的优点是:
- 它是快一点(但只是一点点)
- 如果将 MP 和 TeX 分开,管理编辑器中的语法高亮会更容易一些。
我确实看到了一个用于 Context 的 Vi 语法文件,该文件尝试定义 MP 范围和 TeX 范围,但效果并不理想。所以我(在 Vim 中)所做的就是根据 需要使用set ft=mp
或手动在它们之间切换。set ft=tex