TeX 评估序言中的“文档”代码

TeX 评估序言中的“文档”代码

我有错误

! LaTeX Error: Missing \begin{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.30 \AddDemo{text}{Sample Text}

在下面的代码中

\documentclass{scrbook}

\makeatletter

\providecommand\AddDemo[2]{%
  % #1 : package/identifier
  % #2 : content
  \providecommand{\demo@content@#1}{#2}%
}

\AddDemo{text}{Sample Text}%
\makeatother
\listfiles

\begin{document}
%\PrintDemo{text}
\end{document}

我不明白。

基本上,我想保存(大)文本部分,这些部分将根据要求以乳胶和列表的组合形式打印。

答案1

你误解了 TeX 如何构造宏名。在代码中

\providecommand\AddDemo[2]{%
  % #1 : package/identifier
  % #2 : content
  \providecommand{\demo@content@#1}{#2}%
}

TeX 看到一个宏,\demo@content@后面跟着以 提供的文本#1。结果,后者被放置在输入流中,并且您会看到有关前言中文本的错误。您需要使用 来\csname构造宏名:

\providecommand\AddDemo[2]{%
  % #1 : package/identifier
  % #2 : content
  \expandafter\providecommand\csname demo@content@#1\endcsname{#2}%
}

您需要\expandafter这里,以便在“执行”\csname之前构建\providecommand

答案2

\expandafter\providecommand\csname demo@content@#1\endcsname{#2}

您不能通过这种方式将字母附加到控制序列名称,因为\demo@content@它本身已经是一个标记。

相关内容