\unexpanded 因未定义的 LaTeX 符号而失败?

\unexpanded 因未定义的 LaTeX 符号而失败?

我其实不确定这篇文章的标题是否正确。然而,发生的事情是,以下 MWE

\documentclass{article}
\begin{document}
\unexpanded{$\undefsym{x}$}
\end{document}

失败

<recently read> \undefsym
l.3 \unexpanded{$\undefsym$}

我希望它能够起作用并简单地将字符串放入输出文件中$\undefsym$

我是否遗漏了什么?如何修复?实际上,我想编写一个宏,格式如下

\newcommand{\addit}[1]
  {\addtostream{outstream}{\unexpanded{#1}}}

并能够向其提供任意字符流以供后续处理(outstream实际上是一个 tex 文件)。

针对 egreg 的最后一条评论,事情是这样的:这本书的作者(不是我)希望我写的解决方案可以穿插在书中的正文中,这样如果问题发生变化,解决方案也可以随之变化。但解决方案显然必须单独处理,因为它们会变成一本单独的书。所以这是我最终想出的解决方案:

\newoutputstream{sol}
\openoutputfile{\jobname_sol.tex}{sol}

\newboolean{firstsection}

% starts the solutions file
\newcommand{\solutionmanuscript}
  {}

% add chapter header lines to solutions
% (must manually add after each chapter command)
\newcommand{\addsolutionchapter}[1]% parameter is the chapter name
  {%
    \addtostream{sol}{\unexpanded{\chapter{#1}}}
    \setboolean{firstsection}{true}
  }

% add section header lines to solutions
% (must manually add after each section command)
 \newcommand{\addsolutionsection}[1]%parameter is the section name
   {
     \ifthenelse{\boolean{firstsection}}{}{\addtostream{sol}{\unexpanded{\end{enumerate}}}}
     \addtostream{sol}{\unexpanded{\section{#1}}}
     \addtostream{sol}{\unexpanded{\begin{enumerate}}}
     \setboolean{firstsection}{false}
   }

% add a solution
\newcommand{\addsolution}[1]
  {\addtostream{sol}{\noexpand\setcounter{enumi}{\theprobcounter}
                     \noexpand\addtocounter{enumi}{-1}}
    \addtostream{sol}{\unexpanded{\item #1}}}

% ends the solutions file
\newcommand{\stopsolutionmanuscript}
  {\addtostream{sol}{\unexpanded{\end{enumerate}}}}

这可能比您需要或想要的更详细。但关键内容在 \addsolution 宏中。其他大部分内容都是簿记。在该宏中,我需要结合使用 \unexpanded 和 \noexpand 才能获得所需的结果(我想扩展文本提供给我的问题计数器)。我很高兴听到任何更好的方法来完成所有这些。

除其他外,这允许我在编写解决方案时使用自己的数学命令和宏。不过,这可能会使原始 tex 源代码(包含交错的文本和解决方案)更难理解,因为它混合了两种风格。

答案1

已添加问题以进一步解释问题和解决方案。

相关内容