我使用答案包作为练习册,并使用西里尔符号作为第二级项目。这是我的 .tex 代码。
\documentclass[10pt, a4paper, openany]{report}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{answers}
\begin{document}
\renewcommand{\theenumii}{\asbuk{enumii}}
\Newassociation{otv}{Otvet}{ans}
\Opensolutionfile{ans}[C1.ans6]
\begin{enumerate}
\item
\begin{enumerate}
\item Excercise 1a)
\begin{otv}
answer 1a) \end{otv}
\item Excercise 1b)
\begin{otv}
answer 1a) \end{otv}
\end{enumerate}
\end{enumerate}
\Closesolutionfile{ans}
Answers:
\input{c1.ans6}
\end{document}
并且发生此错误
...\c1.ans6.tex:1: Undefined control sequence. [\begin{Otvet}{1.1.\T2A\cyra )}]
答案文件包含以下内容:
\begin{Otvet}{1\T2A\cyra }
answer 1a)
\end{Otvet}
\begin{Otvet}{1\T2A\cyrb }
answer 1a)
\end{Otvet}
有人能帮我解决这个问题吗?
答案1
您需要一个\immediate
的版本\protected@write
,因为\cyra
生成的诸如 之类的命令\asbuk
无法存活\write
。
代码如下在 \write 之前替换列表中的一些宏标记,那么我也修补\Newassociation
以使用\protected@iwrite
而不是\immediate\write
。
\documentclass[10pt, a4paper, openany]{report}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{answers}
\usepackage{xpatch}
\makeatletter
% get a copy of `\protected@write
\let\protected@iwrite\protected@write
% patch the copy to add \immediate
\xpatchcmd{\protected@iwrite}{\write}{\immediate\write}{}{}
\xpatchcmd{\Newassociation}
{\immediate\write\@nameuse{#3@file}}
{\protected@iwrite{\@nameuse{#3@file}}{}}
{}{}
\makeatother
\begin{document}
\renewcommand{\theenumii}{\asbuk{enumii}}
\Newassociation{otv}{Otvet}{ans}
\Opensolutionfile{ans}[\jobname.ans6]
\begin{enumerate}
\item
\begin{enumerate}
\item Excercise 1a)
\begin{otv}
answer 1a)
\end{otv}
\item Excercise 1b)
\begin{otv}
answer 1b)
\end{otv}
\end{enumerate}
\end{enumerate}
\Closesolutionfile{ans}
Answers:
\input{\jobname.ans6}
\end{document}