LuaLaTex:来自文件的 Plantuml

LuaLaTex:来自文件的 Plantuml

我有一个包含一些文本的 tex 文档和一个包含 plantuml 图表的文件夹。

我需要将图表导入文档。

我尝试使用 plantuml 包 -https://ctan.org/pkg/plantuml?lang=en对我来说它工作得很好。但是,只有当我手动将 uml 文本粘贴到文档中时它才有效。

是否可以使用该包按路径导入文件?或者,我应该使用其他包?或者,也许我应该使用 Lua 来完成我的任务?

我对 TeX 还很陌生 %)

我的限制:

  • 路径包含空格,例如“../文件夹名称/带空格的文件名.md”

  • plantuml 文件是注入了 uml 语法的 markdown 文件,例如(当然,原始文件中的破折号没有空格)

` ` `plantuml
@startuml
skinparam BoxPadding 30
...
@enduml
` ` `

包括或导入都对我没有帮助 :/ 也许,我对 TeX 做错了什么。

答案1

您没有提供测试文件,而是从手册中获取了一个......

在此处输入图片描述

您可以让 lua 获取带有标记的文件,将 latex 环境保存到临时文件中,然后输入(使用临时文件只是简化了 catcode 处理)

主文件

\documentclass{scrartcl}
\usepackage{plantuml}
\def\pumlfile#1{%
\directlua{%
   local f = assert(io.open("#1", "rb"))
    local content = f:read("*all")
    f:close()
    local f2 = io.open("#1" .. ".ltx","w")
    f2:write("\string\\begin{plantuml}\string\n" ..  content .. "\string\\end{plantuml}")
    f2:close()
}%
\input{"#1.ltx"}}

\begin{document}

\pumlfile{p1.txt}

\end{document}

p1.txt

@startuml
Alice -> Bob: test
@enduml

答案2

谢谢你,大卫!https://tex.stackexchange.com/a/483873/185331

效果不错。我做了一些修改

\usepackage{plantuml}

\def\pumlfile#1{%
\directlua{%
   %texio.write_nl("Filename: \luatexluaescapestring{#1}")
   %texio.write_nl("Filename: " .. \luastring{#1})

   local srcname = \luastring{#1}
   srcname = srcname:sub(2,-2)
   % trick with quotes in filename

   %texio.write_nl("srcname=[" .. srcname .. "]")

   local f = assert(io.open(srcname, "rb"))
   local content = f:read("*all")
   f:close()

   tmpfile = "temp-plantuml.uml"
   os.remove(tmpfile)

   local f2 = io.open(tmpfile, "w")
   f2:write("\string\\begin{plantuml}\string\n" ..  content .. "\string\\end{plantuml}")
   f2:close()
}%
\input{"temp-plantuml.uml"}}

并以此方式使用它


\pumlfile{"../workflow diagrams/02. Keys.Activation Request.md"}

如您所见,我的路径中有空格。而且,这是一个未解决的技巧——如果我的 UML 中有西里尔字母,那么 plantuml 就无法处理图表。然而,文件编码是 UTF8 :/

相关内容