在表格中插入方程参数值

在表格中插入方程参数值

是否可以在 LateX 中创建一个表,用整个文本中方程式中使用的一些参数的值来填充?

需要明确的是,像命名法这样的东西,您可以在命名法部分定义符号并将其打印出来,但这次是一个带有值的表(例如\command{x}{5}{mm},它将创建一行 | x | 5 | mm |)

为了使我更加清楚,请看以下示例:


假设我们有以下等式:

ax + b = 0

并且我希望在表中定义值 a 和 b。如果可能的话,我希望有这样的内容:

\command{a}{100}{mm}
\command{b}{10}{mm}

这将索引一个如下所示的表:

|Parameter | Value | Unit |
--------------------------- 
|a         | 100   | mm   |    
|b         | 10    | mm   |

然后可以根据与每个条目关联的某些键在文本中引用该表中的条目,即\printval{a}打印“100”,\printunit{b}打印“mm”。

答案1

替代答案使用expl3

此示例expl3使用\newparam[$]{alpha}{\alpha}{1.3}{kg}定义一个用键“alpha”保存的参数,该参数\alpha以值1.3和单位的形式打印kg。打印列表中参数周围的 可选[$]位置。 ,并打印与“key”关联的参数、值和单位。键必须仅由字母组成,但打印的参数可以包含数学元素,如或。$\param{key}\paramval{key}\paramunits{key}\alphax_i

参数列表由 打印,这将检查参数是否已被调用,并且只有、或\printparams之一调用的参数。在此代码中应包含在某个环境中,因为它仅打印定义为 的参数。\param\paramval\paramunits\printparamstabular$\alpha$ & 1.3 & kg \\\newparam[$]{alpha}{\alpha}{1.3}{kg}

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \l_param_used_seq
\seq_new:N \l_param_printlist_seq

\NewDocumentCommand{\newparam}{O{}mmmm}
{
    \cs_new:cn {param_enclose_#2:}{#1}
    \cs_new:cn {param_param_#2:}{#3}
    \cs_new:cn {param_value_#2:}{#4}
    \cs_new:cn {param_units_#2:}{#5}
    \bool_new:c {l_param_#2_used_bool}
}

\cs_new:Nn \param_lookup:nn {
    \use:c {param_#1_#2:} 
    \bool_if:cF {l_param_#2_used_bool}
    {
        \seq_put_right:Nn \l_param_used_seq { #2 }
    }
    \bool_set_true:c {l_param_#2_used_bool}
}

\NewDocumentCommand \printparams { }
{
    \seq_map_inline:Nn \l_param_used_seq
    {
        \seq_put_right:Nn \l_param_printlist_seq
        {
            \use:c {param_enclose_##1:} \param_lookup:nn{param}{##1} \use:c {param_enclose_##1:} & \param_lookup:nn{value}{##1} & \param_lookup:nn{units}{##1} \\
        }
    }
    \seq_use:Nn \l_param_printlist_seq { }
}

\NewDocumentCommand{\param}{m}{ \param_lookup:nn{param}{#1} }
\NewDocumentCommand{\paramval}{m}{ \param_lookup:nn{value}{#1} }
\NewDocumentCommand{\paramunits}{m}{ \param_lookup:nn{units}{#1} }

\ExplSyntaxOff

\newparam[$]{x}{x_ i}{10}{mm}
\newparam{length}{L}{13.2}{km}
\newparam[$]{alpha}{$\alpha$}{1.3}{kg}

\begin{document}

Parameter: $\param{x}$
Value: \paramval{x}
Units: \paramunits{x}

\begin{equation}
\param{length}=1320000\param{x}
\end{equation}

The length \param{length} is \paramval{length}\paramunits{length}

Here are the parameters:
\begin{center}
\begin{tabular}{ c  c  c }
Parameter & Value & Units \\ \hline
\printparams \hline
\end{tabular}
\end{center}

\end{document}

这产生了

Code example

使用 datatool 的原始答案

\alpha这对于保存数学运算(例如或)有限制,x_i但对于简单的字符串,这应该是有用的。

据我了解,数据工具包可以满足您的需要,但这绝不是一种完善或智能的方法 - 如果您查看词汇表或数据工具包(或类似的)包文档,您可能会找到更好的方法来做到这一点。

下面的示例定义了一个表,其中的列包含键、参数、值和单位。使用\newparam{length}{L}{13.2}{km}参数、值和单位分别添加条目,其中键为“长度”的参数为\param{length}\paramval{length}\paramunits{length}

\printparamtable打印所有已保存参数的表格。不检查由 定义的参数是否\newparam在文本中实际使用 -\newparam打印所有以 结尾的参数。

序言定义了上述宏,这些宏很可能是您想要在底层数据工具宏方面使用的形式。

\documentclass{article}

\usepackage{datatool}
\usepackage{longtable}

\newcommand{\paramtable}{ParameterLookUp}
\DTLnewdb{\paramtable}

\newcommand{\paramaddcolumn}[2]{
\DTLaddcolumn{\paramtable}{#1}
\DTLsetheader{\paramtable}{#1}{#2}
}

\paramaddcolumn{paramkey}{Parameter Key}
\paramaddcolumn{param}{Parameter}
\paramaddcolumn{value}{Value}
\paramaddcolumn{units}{Units}

\newcommand{\newparam}[4]{
\DTLnewrow{\paramtable}
\DTLnewdbentry{\paramtable}{paramkey}{#1}
\DTLnewdbentry{\paramtable}{param}{#2}
\DTLnewdbentry{\paramtable}{value}{#3}
\DTLnewdbentry{\paramtable}{units}{#4}
}

\newcommand{\param}[1]{\DTLfetch{\paramtable}{paramkey}{#1}{param}}
\newcommand{\paramval}[1]{\DTLfetch{\paramtable}{paramkey}{#1}{value}}
\newcommand{\paramunits}[1]{\DTLfetch{\paramtable}{paramkey}{#1}{units}}

\newcommand{\printparamtable}{\DTLdisplaylongdb[omit=paramkey]{\paramtable}}

\newparam{x}{x}{10}{mm}
\newparam{length}{L}{13.2}{km}

\begin{document}
Parameter: \param{x}
Value: \paramval{x}
Units: \paramunits{x}

\printparamtable

The length \param{length} is \paramval{length}\paramunits{length}

\begin{equation}
\param{length}=1320000\param{x}
\end{equation}

\end{document}

相关内容