这个问题参考了上一个问题:将枚举的值写入输出文件。
我想更进一步采取解决方案,但我无法让它发挥作用。
\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}