我使用 collect 包来存储答案代码。当调用 \includecollection 注释时,问题编号是错误的。请帮我修改以下代码。
\documentclass{article}
\usepackage{collect}
\definecollection{btcol}
\newcounter{cbt}
\newenvironment{bt}{\refstepcounter{cbt}\par\noindent {\bfseries Problem \thecbt}.}{\ignorespaces.}
\newcommand{\loigiai}[1]{
\begin{collect}{btcol}{\par\noindent {\bfseries AP\; \thecbt}.}{}{}{}
\begingroup
#1
\endgroup
\end{collect}
}
\begin{document}
\begin{bt}
Conntent 1
\loigiai{Answer for Pro.1}
\end{bt}
\begin{bt}
Conntent 2
\loigiai{Answer for Pro.2}
\end{bt}
\includecollection{btcol}
\end{document}
答案1
您需要\thecbt
在调用collect
环境之前进行扩展;最方便的方法是使用辅助宏。
\documentclass{article}
\usepackage{collect}
\definecollection{btcol}
\newcounter{cbt}
\newenvironment{bt}
{%
\par
\noindent\refstepcounter{cbt}{\bfseries Problem \thecbt}.%
}
{\unskip.}
\makeatletter
\newcommand{\loigiai}[1]{%
\@bsphack\expandafter\loigiai@aux\expandafter{\expanded{\thecbt}}{#1}\@esphack
}
\newcommand{\loigiai@aux}[2]{%
\begin{collect}{btcol}{\par\noindent{\bfseries AP\; #1}.}{}{}{}
#2%
\end{collect}
}
\makeatother
\begin{document}
\begin{bt}
Content 1
\loigiai{Answer for Pro.1}
\end{bt}
\begin{bt}
Content 2
\loigiai{Answer for Pro.2}
\end{bt}
\includecollection{btcol}
\end{document}
我会避免添加“自动”句点:我提供的代码并不是真正安全的,因为在之前不能有一个空行\loigiai
。