我在 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 文件中它将不起作用。
您可以使用catchfile
,kpsewhich
我相信它在 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}