有没有办法在 LuaLaTeX 中从文档末尾检索文档开头保存的字符串?

有没有办法在 LuaLaTeX 中从文档末尾检索文档开头保存的字符串?

LuaTeX 中有不同类型的“寄存器”。使用totcount包,您可以从文档中的任何位置保存计数器(数字),并借助.aux文件(可能是其他扩展名)在文档中的任何位置获取其值。但是有没有办法将这个确切(或类似)的功能与(Unicode)字符串一起使用(在 Lua 中)?

例如,我在最后计算了一些不应该预先计算的内容(例如,在序言中),因为那样会造成很大的混乱,并且可读性会大大降低。然后我需要在开头使用这个结果(就像\hyperref某种类型的 a,但只用于字符串值)。当然,这应该可以同时用于多个字符串。

答案1

谢谢大卫·卡莱尔,我对我想要实现的目标做了一个详尽的例子:

\documentclass{article}
\newcommand\lua[1]{\directlua{#1}}

\usepackage{fontspec}

% https://tex.stackexchange.com/questions/572212/
% substituting-fonts-for-emojis-in-lualatex/572220#comment1662059_572220
\lua{luaotfload.add_fallback("FallbackFonts", {
  "Noto Color Emoji:mode=harf",
  "Noto Sans CJK JP:"
})}
\setmainfont{Times New Roman}[RawFeature={fallback=FallbackFonts}]

% Get (command if defined)
\newcommand\Get[1]{\csname #1\endcsname}

% Lua get (if variable is not defined or
% argument is empty then nothing will be printed)
\newcommand\LGet[1]{\lua{tex.print(#1)}}

\makeatletter
% Global definition
\newcommand\Gdef[2]{\immediate\write\@auxout{%
  \unexpanded{\expandafter\gdef\csname #1\endcsname{#2}}%
}}

% Global Lua definition
\newcommand\GLdef[2]{\immediate\write\@auxout{%
  \unexpanded{\lua{#1 = #2}}%
}}

% Global Lua string definition
\newcommand\GLsdef[2]{\immediate\write\@auxout{%
  \unexpanded{\lua{#1 = "#2"}}%
}}
\makeatother
\begin{document}

After 2nd run we get:

\Get{super@ cool!!}

\setlength\parskip{1ex}

\ifdefined\simplename
  \simplename
\fi

\LGet{this1}

\LGet{that2}

% Added nil check
\LGet{complex and complex.foo}

\LGet{complex and complex.bar}

% Later in document...

\GLdef{this1}{69}

\GLsdef{that2}{my Unicode string

相关内容