我最近开始使用该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}