LuaTeX:拆分路径字符串以用于宏

LuaTeX:拆分路径字符串以用于宏

我想在 Lua 中解析路径,以便将其拆分为文件夹和文件组件。目标是创建一个接受形式参数的宏myfolder/myfile,并能够myfolder在 lua 块内使用,以便将其放入其他宏中。

以下内容不起作用但应该展示我所寻求的内容:

\newcommand*{\splitme}[1]{\directlua{
    local parts=split(#1,'[\\/]+');
    tex.sprint("\graphicspath{",parts[1],"}");
}}

我退房了http://lua-users.org/wiki/SplitJoin但无法在 LuaLaTeX 中将其拼凑起来。有没有可能不用太多麻烦就做到这一点?

答案1

在这种情况下,StackOverflow 可能会有所帮助。

\documentclass{article}

% https://stackoverflow.com/questions/5243179
\newcommand*{\splitme}[1]{\directlua{\unexpanded{
    local parts = string.match([[#1]], "(.-)([^\\/]-)$")
    tex.sprint(parts)
    %tex.sprint("\graphicspath{",parts,"}")
}}}

\begin{document}

\splitme{/home/user/test.jpg}

\splitme{/home/user/}

\splitme{/home/user}

% Print the backslash
\def\\{\textbackslash}

\splitme{C:\\home\\user\\test.jpg}

\splitme{C:\\home\\user\\}

\splitme{C:\\home\\user}

\end{document}

在此处输入图片描述

答案2

由于我对 lua 和 LuaLaTeX 不太熟悉,这里有一些 lua 代码,它应该返回子字符串:

local i = 0
local p = 0
while i <= in_string:len() do
    if in_string:sub(i,i) == "/" then
        p = i
    end
    i = i + 1
end
return in_string:sub(0,p)

可能存在利用 lua 功能的更简单的解决方案,但由于我不知道这些,所以我会这么做。

答案3

如果您只是需要/(并且您永远不需要\作为 Latex 中的路径分隔符),那么该格式已经有一个用于此的文件名解析器:

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcommand\splitme[1]{\filename@parse{#1}\filename@area}
\makeatother
\begin{document}

\splitme{/home/user/test.jpg}

\splitme{/home/user/}

\splitme{/home/user}


\end{document}

相关内容