具有默认输出的环境和用于更改它的命令

具有默认输出的环境和用于更改它的命令

过去,我为我的论文编写了一个代码,该代码将每个实验的结果输出为 tex 文件,每次都生成一个新表,但我预期的大多数条目都是相同的。它完成了它的工作,但我乍一看无法在 LaTeX 代码中找到实验与实验之间有什么变化。

我找不到类似的东西,所以我需要问一下。有谁知道一个包可以做类似的事情吗?

假设我正在运行几个实验,我需要为每个实验输出一个表格。

  1. 输入的名称始终相同,但它们的值可能会改变。[大约 40 个输入]
  2. 我预计 90% 的条目总是相同的
  3. 为了便于阅读,我希望能够仅输入我更改的值[因此不是一个包含 40 个数字的数组只是为了更改一个]

是否有一个适用于环境的包(像方程式或费曼之类的东西)可以做类似这样的事情:

\begin{specialtext}
\end{specialtext}

-> 生成默认表

\begin{specialtext}
\variable_X{40}
\end{specialtext}

-> 生成默认表,其中唯一改变的值是变量 X 的值

我并不是在寻找“为我编写代码”的人,我只是好奇是否存在一些我可以研究的现有软件包,或者一些处理类似问题的论文(并且不诉诸“使用外部 python / matlab / C ++代码来生成完整的表格”)

更新:

使用 Lua 的答案解决了我的问题。一个似乎效果很好的替代方案是使用 keycommand 包,它允许以 key:value 方式引入选项并设置默认值

答案1

如果您考虑使用 Lua(嵌入在 LuaTeX 中),那么有一个概念证明。

环境MyEnv会创建一个包含 10 个元素的表(不过可以自定义)。通过 Lua 定义的函数完全符合其名称的含义。因此,每次使用表时都会清理表(如果之前使用过),并根据模式(我选择了)MyEnv用元素填充表,并且会定义一个宏,其中包含两个参数,即要更改的位置和要传递的字符串。它只能在as内部工作,并清理表的内容。i^2+1\DisturbTableMyEnv\begin{MyEnv}\end{MyEnv}

%!TEX program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
userdata = userdata or {}
userdata.MyTable = userdata.MyTable or {}
userdata.CleanTable = function()
    userdata.MyTable = {}
end
userdata.MakeTable = function(num)
    for i=1,num do
        table.insert(userdata.MyTable, "$a_{"..tostring(math.floor(i^2+1)).."}$")
    end
end
userdata.PrintTable = function()
    tex.print([[\begin{tabular}{|c|}\hline ]])
    tex.print(table.concat(userdata.MyTable, [[ \\ \hline ]]))
    tex.print([[ \\ \hline \end{tabular}]])
end

userdata.DisturbTable = function(num,str)
    if (num > 0) and (num <= #userdata.MyTable) then
        userdata.MyTable[num] = str
    end
end
\end{luacode*}
\newcommand{\CleanTable}{\directlua{userdata.CleanTable()}}
\newcommand{\MakeTable}{\directlua{userdata.MakeTable(10)}}
\newcommand{\DisturbTable}[2]{\directlua{userdata.DisturbTable(#1, \luastringN{#2})}}
\newcommand{\PrintTable}{\directlua{userdata.PrintTable()}}
\newenvironment{MyEnv}{\CleanTable\MakeTable}{\PrintTable\CleanTable}
\begin{document}
\begin{MyEnv}
    \DisturbTable{1}{I'm an invader}
\end{MyEnv}
\begin{MyEnv}
    \DisturbTable{2}{Nice} \DisturbTable{10}{Not nice} \DisturbTable{5}{Hello!}
\end{MyEnv}
\begin{MyEnv}
    \DisturbTable{12}{Won't appear}
\end{MyEnv}
\end{document}

在此处输入图片描述

相关内容