我可以在 LaTeX 中使用 plantUML 语言吗?

我可以在 LaTeX 中使用 plantUML 语言吗?

我想创建图表。最好使用 LaTeX。通常,我使用 PlantUML 语言。

答案1

可以在 LaTeX 中直接使用 PlantUML 语言植物包裹。

这是一个简单的例子:

\documentclass{scrartcl}
\usepackage{plantuml}
\begin{document}
\begin{plantuml}
  @startuml
  Alice -> Bob: Hello
  Alice <- Bob: Hi!
  @enduml
\end{plantuml}
\end{document}

要使用 PlantUML 构建 LaTeX,PLANTUML_JAR必须设置环境变量并安装 Java。

要构建此文档,请运行lualatex --shell-escape documentname

结果应如下所示:

带有 PlantUML 图的结果

更详细的示例请参见此处:https://koppor.github.io/plantuml/

先决条件

# to get tikz, install pgf
tlmgr install pgf
tlmgr install koma-script
tlmgr install xkeyval
tlmgr install adjustbox
tlmgr install collectbox
tlmgr install luacode
tlmgr install luatexbase

答案2

我使用网站https://www.planttext.com/导出/下载为 SVG(顺便说一下,其中包含 plantuml 代码作为 XML 注释),然后使用以下方式保存为 PDF墨景.这可以与\includegraphics

答案3

您还可以编写植物本地图表并通过无损文件将其转换plantuml -teps your-file为无损eps文件。这些可以通过\includegraphics命令直接包含在 latex 中。

这样,您就不必通过 inkscape 来走这条路了。

答案4

我已经想出了一个pdflatex同样适用的解决方案。它可以生成矢量图形。我用 Ubuntu Linux 20.04 LTS 和 TeX Live 测试了它。应该也可以与 macOS 兼容。

我的代码要求您已安装:

  • PlantUML(因此也是 Java)
  • Inkscape(将 svg 转换为 pdf)

由于调用外部命令,您必须使用该-shell-escape选项进行编译:

pdflatex -shell-escape my-file.tex

根据您安装 PlantUML 的方式,您可能必须像这样调用它:

\immediate\write18{java -jar /home/NAME/Downloads/plantuml.jar -tsvg #1.txt}

... 代替 ...

\immediate\write18{plantuml -tsvg #1.txt}

以下是作为最小示例的完整代码:

\documentclass[a4paper,12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx} % enables us to use graphics
\usepackage{fancyvrb} % enables us to write to disk
\usepackage{float}    % enables us to use [H] for figures

% Define an verbatim environment for PlantUML:
\newenvironment{plantuml}[1]{\VerbatimOut{#1.txt}}{\endVerbatimOut}

% Process a PlantUML code:
\newcommand{\process}[3]{%
    % Call PlantUML to produce a svg vector graphcis:
    \immediate\write18{plantuml -tsvg #1.txt}
    % Call Inkscape to convert the svg to a pdf (pdflatex cannot use svg):
    \immediate\write18{inkscape #1.svg --export-filename=#1.pdf}
    % Include the pdf:
    \begin{figure}[H]
        \includegraphics[width=#2]{#1.pdf}
        \caption{#3}
    \end{figure}
    % Remove all intermediate files:
    \immediate\write18{rm #1.txt #1.svg #1.pdf}
}

\begin{document}

% Note: timeline1 gets used as filename.
%       You must re-use this name for the
%       corresponding \process command!
\begin{plantuml}{timeline1}
    @startgantt
        [Prototype design] lasts 15 days
        [Test prototype] lasts 10 days
    @endgantt
\end{plantuml}
\process{timeline1}{0.8\textwidth}{The proposed timeline.}

\begin{plantuml}{activity1}
    @startuml
        :Hello world;
        :This is on defined on
        several **lines**;
    @enduml
\end{plantuml}
\process{activity1}{5cm}{An activity diagram.}

\end{document}

我希望这对某人有帮助。

相关内容