XeLaTeX 中每次编译时随机播种

XeLaTeX 中每次编译时随机播种

我找到了两个关于“如何在每次编译时获取新的 PGF 种子?”的答案。1 2,它们在 PdfLaTeX 上运行良好。

但是,这两种方法都不适用于 XeLaTeX。我收到错误

! Undefined control sequence.
<argument> \number \pdfrandomseed
l.6 \pgfmathsetseed{\number\pdfrandomseed}

使用第一种方法时,

! Undefined control sequence.
<argument> \pdfuniformdeviate
10000000
l.7 \pgfmathsetseed{\pdfuniformdeviate 10000000}

使用第二种方法时。如何修复这些方法以用于 XeLaTeX?是否有一种特定的方法可以在 XeLaTeX 中每次获取随机种子?

平均能量损失

\documentclass{article}
\usepackage{tikz}

% Two ways to get a new seed every compilation
\pgfmathsetseed{\number\pdfrandomseed} % https://tex.stackexchange.com/a/144623
%\pgfmathsetseed{\pdfuniformdeviate 10000000} % http://tex.stackexchange.com/questions/212738/making-a-random-number

\pgfmathsetmacro\numr{rand}% Print a random number

\begin{document}

\numr

\end{document}

答案1

pdfTeXpdf为其引入的大多数(所有?)原语采用了前缀,因此\pdf<name>即使它们与 PDF 输出无关,也会被调用。在 XeTeX 中,这些原语是在 2019 年添加的,但它们仅被称为\<name>,因此您的代码变为(和 都\randomseed有效\uniformdeviate):

\documentclass{article}
\usepackage{tikz}

% Two ways to get a new seed every compilation
\pgfmathsetseed{\number\randomseed} % https://tex.stackexchange.com/a/144623
% \pgfmathsetseed{\uniformdeviate 10000000} % http://tex.stackexchange.com/questions/212738/making-a-random-number

\pgfmathsetmacro\numr{rand}% Print a random number

\begin{document}

\numr

\end{document}

如果您希望引擎独立,则可以使用expl3\sys_rand_seed:它将在expl3(pdfTeX、XeTeX、LuaTex、epTeX 和 eupTeX) 支持的所有引擎上运行:

\documentclass{article}
\usepackage{tikz}
\usepackage{expl3}

\ExplSyntaxOn
\cs_new_eq:NN \RandomSeed \sys_rand_seed:
\ExplSyntaxOff

% Two ways to get a new seed every compilation
\pgfmathsetseed{\RandomSeed} % https://tex.stackexchange.com/a/144623
% \pgfmathsetseed{\uniformdeviate 10000000} % http://tex.stackexchange.com/questions/212738/making-a-random-number

\pgfmathsetmacro\numr{rand}% Print a random number

\begin{document}

\numr

\end{document}

相关内容