我可以解析从 返回的文本\gls*{...}
并让 latex 将其识别为数值变量,以便可以在计算中使用它吗?可以使用calculator
、fp
或来完成此计算,calc
具体取决于我遇到的有关包冲突的问题。我正在和pgf
中进行编译。XeLaTeX
TeX4HT
我之所以使用包来管理,主要原因glossaries
是.
_
+
-
变量名称中存在诸如 etc 之类的符号。这些符号的存在排除了它们适合用作 的可能性newcommands
。我稍后可能会发布另一个问题,试图弄清楚是否可以从 csv 文件导入表并对其进行迭代,直到找到匹配的字符串参数,然后在 中的特定列的同一行中返回该值newcommand
,但我希望从 gls 调用返回的字符串中解析数字更容易。
在下面的 MWE 中,我尝试过的不同方法被注释掉,以允许编译显示词汇表定义和计算功能的成功。
\documentclass{article}
\usepackage[utf8]{inputenc}
\setlength\parindent{0pt}
\usepackage[nogroupskip,toc,acronym]{glossaries}
\usepackage{scrwfile}
\usepackage{calculator}
\usepackage{fp}
\usepackage{calc}
\usepackage{pgf}
\usepackage{siunitx}
\newglossary[datag]{data}{datat}{datan}{Data}
\newglossaryentry{d.A_Control-0}{ type={data}, name={1.1}, first={1.1}, description={1.1} }
\newglossaryentry{d.B_Sample-2}{ type={data}, name={1.08059784043081}, first={1.08059784043081}, description={1.08059784043081} }
\newcommand{\foldfp}[3]{
\FPeval{result}{round(#1/#2,#3)}
\result
}
\newcommand{\foldcalculator}[3]{
\DIVIDE{#1}{#2}{\dsol}
\dsol
%\DIVIDE{\gls*{#1}}{\gls*{#2}}{\dsol}
%\DIVIDE{{#1}}{{#2}}{\dsol}
%\ROUND[#3]{\dsol}{\rsol}
%\rsol
}
\begin{document}
\begin{itemize}
\item \gls*{d.A_Control-0}
\item \gls*{d.B_Sample-2}
\item \glsentryfirst{d.A_Control-0}
\item \foldfp{33}{2}{2} - proof that the calculation function works fine.
\item \foldcalculator{33}{2}{2} - proof that the calculation function works fine.
%\item \num{\gls*{d.A_Control-0}}
%\item \number{\gls*{d.A_Control-0}}
%\item \foldfp{\gls*{d.A_Control-0}}{\gls*{d.B_Sample-2}}{2}
%\item \foldcalculator{\gls*{d.A_Control-0}}{\gls*{d.B_Sample-2}}{2}
\end{itemize}
\end{document}
答案1
感谢所有评论的人,以下是我对问题演变和解决方案的总结:
- 我错误地将未展开的
\gls*{}
条目解释为数字解析问题。感谢@ChristianHupfer - 我可以用来
\glsentryname{}
获取扩展的定义。感谢@NicolaTalbot - 现在我正确使用了扩展变量,识别定义的术语(excel 中的数字 - 而不是使用 LaTeX 来解析和评估我的内容,我使用 excel 中的公式来控制存储为 gls 输入输出的原始数据的数字/舍入)实际上没有问题。感谢 @cfr。
- 最后,我无法继续使用计算器包,因为它使用经过修改的除法算法,无法返回足够准确的结果。相反,我使用了以下代码。
折叠命令:
\newcommand{\folds}[2]{%
\ifboolexpr{test {\ifdimgreater{\glsentryname{#1} pt}{\glsentryname{#2} pt}}}%
{%
\FPeval{result}{round(\glsentryname{#1}/\glsentryname{#2},\rfndp)}%
\num{\result}%
}% true
{%
\FPeval{result}{round(\glsentryname{#2}/\glsentryname{#1},\rfndp)}%
\num{\result}%
}% false
}