%% Copyright (C) 2018-2023 Oliver Kopp, https://github.com/koppor %% %% SPDX-License-Identifier: LPPL-1.3c+ \NeedsTeXFormat{LaTeX2e}\relax \ProvidesPackage{plantuml} [2023/05/12 v0.3.2 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} % \jobname has an encoding issue if the .tex filename includes a multibyte string. % One needs to redefine PlantUMLJobname to fix it \def\PlantUMLJobname{\jobname} \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} } } \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