LuaLaTeX 变量扩展

LuaLaTeX 变量扩展

我在 LuaLaTeX 的不同发行版(主要是 MikTeX 和 TeXLive)中遇到了变量扩展问题。在 TeXLive(2014 和 2016)中,我可以使用以下内容引用我的主目录:

\newcommand{\home}{$HOME}

随后使用如下命令允许我引用我的 Windows(工作)和 Linux(家庭)文件系统。

\graphicspath{{\home/LaTeX/logos/}{\home/LaTeX/signature}}

我遇到的问题是我不知道如何让 MikTeX 版本的 LuaLaTeX 扩展路径变量。

我尝试过几乎所有的组合

\newcommand{\home}{${HOME}}
\newcommand{\home}{${$HOME}}
\newcommand{\home}{\%HOME\%}
\newcommand{\home}{${\%HOME\%}}

miktex-lualatex --enable-write18
miktex-lualatex -enable-write18
miktex-lualatex --shell-escape
miktex-lualatex -shell-escape

但我什么都没做,找不到我试图引用的字体。我得到了不同版本的

luaotfload | db : Reload initiated (formats: otf,ttf,ttc); reason: "File not found: ${$HOME}/LaTeX/fonts/

取决于我尝试如何组合上述选项。

如果有人能阐明我所遗漏的内容,或者提出比我所做的更好的解决方案,我将不胜感激。我使用 pdfLaTeX 和 LuaLaTeX 进行编译,具体取决于我是否需要 OTF 字体。

答案1

如果您传入\newcommand{\home}{$HOME}命令行,那么 shell 将解释该变量,但在 TeX 文件中它将不起作用。

您可以使用catchfilekpsewhich我相信它在 MiKTeX 中也可以使用。

\documentclass{article}
\usepackage{catchfile}

\CatchFileEdef{\home}{|"kpsewhich -var-value=HOME"}{\endlinechar=-1 }

\begin{document}

\texttt{\home}

\end{document}

真实数据已被屏蔽:

在此处输入图片描述

如果你害怕反斜杠,那就

\CatchFileEdef{\home}{|"kpsewhich -var-value=HOME"}{%
  \endlinechar=-1
  \catcode`\\=12
}

答案2

我真的不敢相信 $HOME 可以工作,但在 Windows 上,你可以使用类似这样的方法(为了避免路径中的反斜杠出现问题,应该使用另一个 catcode 表打印路径):

\documentclass{article}
%
\usepackage{graphicx}


%log all values of os.env:

\directlua{for k, v in pairs( os.env ) do
   texio.write_nl ("key: "..k .. " value: ".. v)
end}

\begin{document}
\includegraphics{\directlua{tex.print(-2,os.getenv("USERPROFILE"))}/Pictures/babel.png}
\end{document}

答案3

Lua提供os.getenv了函数,因此我将使用它:

\documentclass{article}

\newcommand\home{\directlua{tex.print(-2,os.getenv("HOME"))}}

\begin{document}

this is home: \home

\end{document}

在此处输入图片描述

相关内容