我目前正在创建一个个人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;
}