Latex 解答枚举环境中的包和西里尔符号

Latex 解答枚举环境中的包和西里尔符号

我使用答案包作为练习册,并使用西里尔符号作为第二级项目。这是我的 .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}

在此处输入图片描述

相关内容