我尝试为类别定义一个“变量”。第一次使用它时,该值应该被重置,直到再次设置为止。
这是所需的输出:
Fruit: Apricot
(also in category) Banana
(also in category) Cherry
Vegetable: Zucchini
(also in category) Yam
看一下下面的 LaTeX 代码,它还不起作用。
\documentclass{article}
% no packages allowed, I am actually using ConTeXt
\def\setcateg#1{\gdef\Categ{#1: }}
\def\resetcateg{\def\Categ{(also in category) }}
\def\insertcateg{\Categ\resetcateg}
\begin{document}
The simplified version works:
\setcateg{Fruit}
\insertcateg Apricot
\insertcateg Banana
\insertcateg Cherry
\setcateg{Vegetable}
\insertcateg Zucchini
\insertcateg Yam
But actually, I want to have this working in the toc.
\tableofcontents
\setcateg{Fruit}
\section[\insertcateg Apricot]{Apricot}
\section[\insertcateg Banana]{Banana}
\section[\insertcateg Cherry]{Cherry}
\setcateg{Vegetable}
\section[\insertcateg Zucchini]{Zucchini}
\section[\insertcateg Yam]{Yam}
\end{document}
这会出现 \inaccessible 错误。
它在文本中是如何工作的?(感谢@Guho,简单版本可以工作。)为什么\gdef
?- 它在目录中如何工作?
- 为什么?
这可能和扩张有关。
请不要建议特殊的 LaTeX 包,实际上,我想在 ConTeXt 中使用它。
对于简化的文本版本,以下命令定义(使用\define
而不是\def
)在 ConTeXt 中有效:
\define[1]\setcateg{\def\Categ{#1: }}
\define\resetcateg{\def\Categ{(also in category)}}
\define\insertcateg{\Categ\resetcateg}
答案1
您需要#1
在 之后添加\setcateg
。此外,调用\insertcateg
可选的 TOC 标题会强制\def
在 toc 文件中出现一些丑陋的 ,这是导致错误的原因。您希望在 TOC 中出现的是结果而不是实现它所需的代码。这可以通过将命令放入\section
并将\insertcateg
水果或蔬菜传递给它来实现。这也有一个优点,即只需要输入一次水果或蔬菜。以下是修改后的版本,它可以工作(假设这是你想要的):
\documentclass{article}
% no packages allowed, I am actually using ConTeXt
\def\setcateg#1{\def\Categ{#1:}}
\def\resetcateg{\def\Categ{(also in category)}}
\def\insertcateg#1{\section[\Categ\ #1]{#1}\resetcateg}
\begin{document}
% Actually, I want to have this working in the toc.
\tableofcontents
%\setcateg{Fruit}
%\section[\insertcateg Apricot]{Apricot}
%\section[\insertcateg Banana]{Banana}
%\section[\insertcateg Cherry]{Cherry}
%\setcateg{Vegetable}
%\section[\insertcateg Zucchini]{Zucchini}
%\section[\insertcateg Yam]{Yam}
The simplified version here does not work too.
\setcateg{Fruit}
\insertcateg{Apricot}
\insertcateg{Banana}
\insertcateg{Cherry}
\setcateg{Vegetable}
\insertcateg{Zucchini}
\insertcateg{Yam}
\end{document}