从词汇表变量解析数值

从词汇表变量解析数值

我可以解析从 返回的文本\gls*{...}并让 latex 将其识别为数值变量,以便可以在计算中使用它吗?可以使用calculatorfp或来完成此计算,calc具体取决于我遇到的有关包冲突的问题。我正在和pgf中进行编译。XeLaTeXTeX4HT

我之所以使用包来管理,主要原因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

感谢所有评论的人,以下是我对问题演变和解决方案的总结:

  1. 我错误地将未展开的\gls*{}条目解释为数字解析问题。感谢@ChristianHupfer
  2. 我可以用来\glsentryname{}获取扩展的定义。感谢@NicolaTalbot
  3. 现在我正确使用了扩展变量,识别定义的术语(excel 中的数字 - 而不是使用 LaTeX 来解析和评估我的内容,我使用 excel 中的公式来控制存储为 gls 输入输出的原始数据的数字/舍入)实际上没有问题。感谢 @cfr。
  4. 最后,我无法继续使用计算器包,因为它使用经过修改的除法算法,无法返回足够准确的结果。相反,我使用了以下代码。

折叠命令:

\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
}

相关内容