更改 toc 中变量的内容(在 ConTeXt 中):嵌套 \def s

更改 toc 中变量的内容(在 ConTeXt 中):嵌套 \def s

我尝试为类别定义一个“变量”。第一次使用它时,该值应该被重置,直到再次设置为止。

这是所需的输出:

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 错误。

  1. 它在文本中是如何工作的?(感谢@Guho,简单版本可以工作。)为什么\gdef
  2. 它在目录中如何工作?
  3. 为什么?

这可能和扩张有关。

请不要建议特殊的 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}

在此处输入图片描述

相关内容