修改输出文件中枚举的存储值

修改输出文件中枚举的存储值

这个问题参考了上一个问题:将枚举的值写入输出文件

我想更进一步采取解决方案,但我无法让它发挥作用。

\documentclass{article}

\makeatletter
\newwrite\solutions@file
\newcommand{\collectSolutions}{\immediate\openout\solutions@file=\jobname.sol}
\newcommand{\sol@enumi}{\theenumi}
\newcommand{\sol@enumii}{\theenumi.\theenumii}
\newcommand{\sol@enumiii}{\theenumi.\theenumii.\theenumiii}
\newcommand{\solution}[1]{%
  \immediate\write\solutions@file{%
    \csname sol@\@enumctr\endcsname: \unexpanded{#1}%
  }%
}

\newcommand{\printSolutions}{%
  \immediate\closeout\solutions@file
  \noindent\input{\jobname.sol}
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\collectSolutions

\begin{enumerate}
\item Text 
\begin{enumerate}
  \item Part Q 1 \solution{Ans}
  \item Part Q 1 \solution{Ans}
  \item Part Q 1 \solution{Ans}
\end{enumerate}
\item Another Q \solution{Ans}
\end{enumerate}

\printSolutions
\end{document}

这会导致解决方案的排版如下:1.a:答案 1.b:答案 1.c:答案 2:答案

理想情况下,我希望有 1.a:答案,b:答案,c:答案。2:答案。

有两点不同:1:前导枚举数字仅被提及一次;2:各部分之间有逗号,最后一个有句号。

因此,我似乎需要重新定义 \sol@enumi、\sol@enumii 和 \sol@enumiii 宏。我想,我想要的是宏在特定情况下取一个值(第一个为 1:,最后一个为 2:)

我尝试使用该包进行以下操作ifthen

\renewcommand{\sol@enumi}{\theenumi.\let\OLDtheenumi\theenumi}
\renewcommand{\sol@enumii}{\ifthenelse{\equal{\theenumi}{\OLDtheenumi}}{theenumii}{\theenumi(\theenumii)}.}

但我得到了错误;可能是由于什么被扩展到了哪里。有办法实现这个吗?

答案1

在此处输入图片描述

\documentclass{article}

\makeatletter
\newwrite\solutions@file
\newcommand{\collectSolutions}{\immediate\openout\solutions@file=\jobname.sol}
\newcommand{\sol@enumi}{{\theenumi}}
\newcommand{\sol@enumii}{{\theenumi.}\theenumii}
\newcommand{\sol@enumiii}{{\theenumi.\theenumii.}\theenumiii}
\newcommand{\solution}[1]{%
  \immediate\write\solutions@file{%
    \noexpand\solsep\csname sol@\@enumctr\endcsname: \unexpanded{#1\ignorespaces}%
  }%
}

\def\solsep{\afterassignment\@solsep\def\@tempa}

\def\@solsep{%
\ifx\@tempa\sol@lastsec,
\else
\global\let\sol@lastsec\@tempa
\sol@stop\gdef\sol@stop{. }%
\@tempa
\fi
}

\newcommand{\printSolutions}{%
  \let\sol@stop\@empty
  \gdef\sol@lastsec{0.}%
  \immediate\closeout\solutions@file
  \noindent\input{\jobname.sol}\sol@stop
}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\collectSolutions

\begin{enumerate}
\item Text 
\begin{enumerate}
  \item Part Q 1 \solution{Ans}
  \item Part Q 1 \solution{Ans}
  \item Part Q 1 \solution{Ans}
\end{enumerate}
\item Another Q \solution{Ans}
\end{enumerate}

\printSolutions
\end{document}

相关内容