编译 LaTeX 文件期间在 MetaPost 中进行文本处理

编译 LaTeX 文件期间在 MetaPost 中进行文本处理

在 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 picpdflatex 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 绘图文档也很庞大,在这种情况下,我有一种混合的工作流程。

  1. 我用lualatex它来编译主文档——并且它很高兴地包含了我所有的旧.mps图形,没有任何改变。

  2. 现在我正在逐步将我的旧.mp源迁移到独立 luamplib图形。

  3. 这是我使用的模板:

     \documentclass[border=5mm]{standalone}
     \usepackage{luamplib}
     \begin{document}
     \mplibtextextlabel{enable}
     \begin{mplibcode}
     beginfig(1);
    
     endfig;
     \end{mplibcode}
     \end{document}
    
  4. 除了对于 DwM 我做了一些改变,我将主文档的通用代码放在一个单独的本地样式文件中,名为dwmcommon.sty。就\begin{document}在主文档和这些独立图形中,我必须\usepackage{dwmcommon}加载所有通用定义,这样我只需在一个地方维护它们。

  5. 当然,我必须使用lualatex而不是 来编译这些更新的 MP 文件mpost。这将.pdf直接生成输出文件,而不是.mps.eps,从而节省了该步骤中的又一个过程。

这种混合方法的优点是:

  • 快一点(但只是一点点)
  • 如果将 MP 和 TeX 分开,管理编辑器中的语法高亮会更容易一些。

我确实看到了一个用于 Context 的 Vi 语法文件,该文件尝试定义 MP 范围和 TeX 范围,但效果并不理想。所以我(在 Vim 中)所做的就是根据 需要使用set ft=mp或手动在它们之间切换。set ft=tex

相关内容