-
Notifications
You must be signed in to change notification settings - Fork 11
/
plantuml.sty
107 lines (94 loc) · 3.03 KB
/
plantuml.sty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
%% Copyright (C) 2018-2024 Oliver Kopp, https://github.com/koppor
%%
%% SPDX-License-Identifier: LPPL-1.3c+
\NeedsTeXFormat{LaTeX2e}\relax
\ProvidesPackage{plantuml}
[2024/09/17 v0.4.0
Embed PlantUML diagrams in latex documents.]
% Required by PlantUML LaTeX output
\RequirePackage{tikz}
% Enable checking for active -shell-escape
% Source: https://tex.stackexchange.com/a/88620/9075
\RequirePackage{pdftexcmds}
% Prepare writing contents of a self-defined environment to a file
% Source: https://tex.stackexchange.com/a/130298/9075
\RequirePackage{fancyvrb}
\RequirePackage{l3keys2e}
\RequirePackage{xparse}
\RequirePackage{ifthen}
\RequirePackage{adjustbox}
\newcounter{PlantUmlFigureNumberSVG}
\def\UMLcountUp{\stepcounter{PlantUmlFigureNumberSVG} \def\PlantUMLJobname{PlantUML\thePlantUmlFigureNumberSVG}}
% \jobname has an encoding issue if the .tex filename includes a multibyte string.
% One needs to redefine PlantUMLJobname to fix it
\def\PlantUMLJobname{\jobname\thePlantUmlFigureNumberSVG}
\ExplSyntaxOn
\keys_define:nn { plantuml } {
output .choices:nn = {
{latex, png, svg}
{ \tl_gset:NV \l_plantuml_mode \l_keys_choice_tl }
},
output .initial:n = latex
}
\ProcessKeysOptions { plantuml }
\ExplSyntaxOff
%hint from https://tex.stackexchange.com/a/86355/9075
\makeatletter
\def\maxwidth#1{\ifdim\Gin@nat@width>#1 #1\else\Gin@nat@width\fi}
\makeatother
\ExplSyntaxOn
\let\PlantUmlMode\l_plantuml_mode
\ExplSyntaxOff
\newcounter{PlantUmlFigureNumber}
\ifluatex
\RequirePackage{luacode}
\else
\RequirePackage[usefamily=bash]{pythontex}
\fi
\makeatletter
\ifcase\pdf@shellescape
\message{No shell escape. PlantUML cannot be called. Start pdflatex/lualatex with -shell-escape.}
\newenvironment{plantuml}{%
No shell escape. PlantUML cannot be called. Start pdflatex/lualatex with -shell-escape.
}{}
\or
\ifluatex
\directlua{
local plantUmlJar = os.getenv("PLANTUML_JAR")
if not plantUmlJar then
texio.write_nl("Environment variable PLANTUML_JAR not set.")
end
}
\fi
\NewDocumentEnvironment{plantuml}{}{%
\VerbatimOut{\PlantUMLJobname-plantuml.txt}}
{%
\endVerbatimOut
\ifluatex
\directlua{
local jobname=\luastring{\PlantUMLJobname}
local plantUmlMode=\luastring{\PlantUmlMode}
require("plantuml.lua")
convertPlantUmlToTikz(jobname, plantUmlMode)
}
\else
\stepcounter{PlantUmlFigureNumber}
%TODO: Execute pyhton here
\typeout{*** plantuml only works with lualatex ***}
\fi
\ifthenelse{\equal{\PlantUmlMode}{latex}}{
\begin{adjustbox}{max width=\linewidth}
\input{\PlantUMLJobname-plantuml.tex}
\end{adjustbox}
}{
\includegraphics[width=\maxwidth{\textwidth}]{\PlantUMLJobname-plantuml.\PlantUmlMode}
\UMLcountUp
}
}
\or
\message{Restricted shell escape. PlantUML cannot be called. Start pdflatex/lualatex with -shell-escape.}
\newenvironment{plantuml}{%
Restricted shell escape. PlantUML cannot be called. Start pdflatex/lualatex with -shell-escape.
}{}
\fi
\makeatother