这siunitx 包提供了一种格式化(SI)单位的方法。它具有大量内部设置,用户可以使用 进行设置\sisetup
。例如,
\documentclass{article}
\usepackage{siunitx}
\begin{document}
\sisetup{round-precision=2, round-mode=places, round-half=up}
\end{document}
将导致\num{4.485}
打印4.49
。
我的问题是,如何提取当前设置锡安特克斯? 例如,上面round-precision
设置为2
。我怎样才能获得希尼奇告诉我这些?
(这希尼奇包使用解释3并且我不明白它使用的关键系统...)
答案1
您LuaLaTeX
可以解析导入的文件并访问其siunitx
参数,甚至重新使用它们:
\documentclass{article}
\usepackage{luacode,siunitx}
\begin{luacode}
function SiunitxSplit ( file )
local param
local i = 1
local f = assert(io.open(file, "r"))
local t = f:read("*all")
f:close()
for param in t:gmatch ("\\sisetup(%b{})")
do
param = param:sub(2,-2)
tex.print (i.."--"..param..":\\\\")
param = param:gsub("%s","")
param = param:gsub("([^,]+)",
function (s)
s=s:gsub("([^=]+)=([^=]+)" , "%1 is : %2")
return s
end
)
param = param:gsub(",","\\\\")
tex.print (param.."\\paragraph{}")
i = i + 1
end
end
function UseSiunitxSettings ( nb , file )
local param
local list = {}
local f = assert(io.open(file, "r"))
local t = f:read("*all")
f:close()
for param in t:gmatch ("\\sisetup(%b{})")
do
param = param:sub(2,-2)
table.insert (list, param)
end
tex.print ("\\sisetup{"..list[nb].."}" )
end
\end{luacode}
\newcommand{\SiunitxSplit}[1]{%
\directlua{SiunitxSplit("#1")}
}
\newcommand{\UseSiunitxSettings}[2][1]{%
\directlua{UseSiunitxSettings(#1 , "#2")}
}
\begin{document}
\SiunitxSplit{bob.tex}
\UseSiunitxSettings{bob.tex}
\num{3.14159}
\UseSiunitxSettings[2]{bob.tex}
\num{3.14159}
\end{document}
并且 bob.tex 包含以下部分:
\sisetup{round-precision=2, round-mode=places, round-half=up}
\sisetup{round-precision=3, round-mode=places, round-half=up}
答案2
正如评论中所观察到的,关键设置(大部分)存储在一组标记为的变量中私人的在 中siunitx
。TeX 不会阻止您访问这些数据(它们是按照惯例而不是在任何技术层面上都是私有的),因此您可以阅读代码然后提取值。但是,这些数据是私有的是有原因的:不记录访问数据的接口,并且应该有没有理由来访问它。