我有错误
! 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@
它本身已经是一个标记。