Spreadtab 是否可以在编译之间将状态保存到文件中?

Spreadtab 是否可以在编译之间将状态保存到文件中?

我最近开始使用该spreadtab软件包。它总体上运行良好,但它有以下限制,可能还有其他类似的限制。

如果标记单元格(使用tag),然后想要引用标记值(使用value),则tag需要value在文件中将 放在 之前。如果value放在 之前tag,则不起作用。

TeX 通过将状态保存到文件(通常是文件)来处理此类事情aux。但作者似乎选择不走这条路。

我想知道实施这样的方法是否存在技术困难,或者这仅仅是作者偏好的问题。

除其他好处之外,这还将消除本地标记和全局标记之间的区别。

为了说明标记问题,请参阅

\documentclass[12pt]{scrlttr2}
\usepackage{spreadtab}
\begin{document}

\begin{spreadtab}{{tabular}{c}}
  value(foo)\\
\end{spreadtab}

\begin{spreadtab}{{tabular}{c}}
  tag(foo)1\\
\end{spreadtab}
\end{document}

pdflatex使用0.5进行编译时spreadsheet,会出现错误:

! Undefined control sequence.
<write> 
Package \ST@package@name 
                                   Warning: The tag "\detokenize \expandafte...
l.7 \end{spreadtab}
                   
? 

如果在组内的tag中定义spreadtab,则需要特殊处理才能显示 - 必须将其设为tag全局。但如果要将状态保存到文件中,则也没有必要。

\documentclass[12pt]{scrlttr2}
\usepackage{spreadtab}
\makeatletter
\def\ST@package@name{spreadtab}                               
\makeatother
\begin{document}

\begingroup
\begin{spreadtab}{{tabular}{c}}
  tag(foo)1\\
\end{spreadtab}
\STmakegtag{foo}                                                                                                                            
\endgroup

\begin{spreadtab}{{tabular}{c}}
  value(foo)\\
\end{spreadtab}

\end{document}

经过@touhami 的修正,这给出了警告

Package spreadtab Warning: The tag "foo" does not exists, have you defined it? 
on input line 23.

答案1

您可以将值写入辅助文件,这会在第一次传递时警告标签未定义,但在第二次传递时

\documentclass[12pt]{scrlttr2}
\usepackage{spreadtab}
\makeatletter
\def\ST@package@name{spreadtab}

\def\STsave#1{\immediate\write\@auxout{%
\global\string\@namedef{\string\detokenize{ST@celltag@\detokenize\expandafter{#1}}}%
   {\csname ST@celltag@\detokenize\expandafter{#1}\endcsname}}}

\makeatother
\begin{document}

\begin{spreadtab}{{tabular}{c}}
  value(foo)\\
\end{spreadtab}

\begin{spreadtab}{{tabular}{c}}
  tag(foo)1\\
\end{spreadtab}
\STsave{foo}


\end{document}

相关内容