我找到了两个关于“如何在每次编译时获取新的 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}