类似于此问题我想使用电子表格区域内的函数,但我不想在单独的文件中使用它,而只是简化使用和可读性。
\newcommand
不幸的是,使用\def
和\edef
不会将文本扩展到该区域,因此文本不能被 Spreadtab 正常识别。
我的第一个想法是能够制作一个文本宏,例如在 C 语言编程中#define
我当前处于非工作状态的命令是这样的:
\newcommand*{\pos}[4]{ :={#1} &@ #2 &@ #3 & :={#4}\,\EUR & :={[-4,0]*[-1,0]}\,\EUR\\}
这正是我想要插入到电子表格区域的内容。它对应于表格的一行。使用时的pos
输出
\pos{5}{text}{description}{10}
那么
:=5 @text @description 10€ :=[-4,0]*[-1,0]€
而不是我将文本直接插入到电子表格区域时得到的预期行:
5.00 text description 10.00€ 50.00€
是否有可能创建类似 C 宏的东西,将文本插入“编译”之前?或者是否有任何其他命令可以用来简化使用,而不必一次又一次地编写所有格式问题?
提前致谢。
答案1
如果表格主体包含\+{<argument>}
,则<argument>
展开一次:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{spreadtab,xpatch,eurosym}
\def\EUR{\geneuro}
\makeatletter
\def\spreadtab@ii{\IfSubStr\ST@tab{\noexpand\+}{\expandafter\spreadtab@iii\ST@tab\@nil}{}}
\def\spreadtab@iii#1\+#2#3\@nil{\edef\ST@tab{\unexpanded{#1}\unexpanded\expandafter{#2#3}}\spreadtab@ii}%
\xpretocmd\spreadtab@i\spreadtab@ii{}{}
\makeatother
\begin{document}
\newcommand*\pos[4]{ :={#1} &@ #2 &@ #3 & :={#4}\,\EUR & :={[-4,0]*[-1,0]}\,\EUR\\}
\begin{spreadtab}{{tabular}{*5c}}\hline
\+{\pos{5}{text}{description}{10}}
\+{\pos{9}{foo}{bar}{31}}\hline
\end{spreadtab}
\end{document}