更新

更新

我目前正在创建一个个人LaTeX包和基本 .tex 文档,我可以使用它来排版我大学的计算机科学报告。我想要的功能之一是制作UML图表MetaUML

我希望每次运行 latexmk 时都从 .mp 文件生成 .1 文件,而不是手动执行。下面我制作了一个我正在使用的目录结构的最小示例。

是否可以使用 latexmk 自动或按需对图像目录中的 mp 文件运行 mpost?还是我必须使用外部 makefile/脚本?

我的目录结构如下:

|-mainDocument.tex
|-createPDF.sh
|
|\styles
| |-myStyle.sty
| 
|\images
| |-strategyPattern.mp
| 
|\output
| |-generated PDF and fls file
| 
|\tmp
| |-generated aux etc.

这是myStyle.sty的内容:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myStyle}[2014/02/27]

\RequirePackage[a4paper]{geometry}
\RequirePackage[utf8]{inputenc}
\RequirePackage{graphicx}
\graphicspath{{./images/}}

这是 mainDocument.tex 的内容:

\documentclass[a4paper,10pt]{report}
\RequirePackage{./styles/myStyle}
\DeclareGraphicsRule{.1}{mps}{*}{}

\begin{document}
    \begin{figure}
      \centering
        \includegraphics[width=\textwidth]{images/strategyPattern.1}
      \caption{A picture of a uml.}
    \end{figure}
\end{document}

strategiesPattern.mp 包含以下内容此链接 并且 createPDF.sh 是一个包装器latexmk -pdf -shell-escape -auxdir=tmp -output-directory=output mainDocument.tex

更新

在@Thruston 评论之后,我一直在挖掘latexmk存储库并找到了这个文件http://archive.cs.uu.nl/mirror/CTAN/support/latexmk/example_rcfiles/mpost_latexmkrc

我已将其添加到我的latexmkrc文件中,但它似乎从未运行子程序。

更新 2

strategyPattern.1当我放入根目录时就会生成strategyPattern.mp,但是第一次传递时会出现错误latexmk,第二次传递则成功。

我快要解决这个问题了,但我的LaTeX技能Perl还不足以让它与strategyPattern.mp文件一起工作/images

答案1

通过使用更新后的mpost_latexmkrc文件,我能够让它工作。必须做的另一件事是.mk通过路径引用我的文件。这意味着我必须使用images/strategyPattern.1而不是仅仅strategyPattern.1。我已更新问题以反映此更改。

更新后的文件

以下是更新后文件的非注释部分mpost_latexmkrc

add_cus_dep( 'mp', '1', 0, 'mpost' );
sub mpost {
    my $file = $_[0];
    my ($name, $path) =  fileparse( $file );
    my $return = system "mpost \"$file\"";
    # Fix the problem that mpost puts its output and log files
    # in the current directory, not in the auxiliary directory
    # (which is often the same as the output directory):
    move "$name.1", $path;
    move "$name.log", $aux_dir;
    return $return;
}

相关内容