如何在 for 循环中定义 excludecomment 环境?

如何在 for 循环中定义 excludecomment 环境?

我正在使用for循环以及注释包来定义环境,prob1通过prob5这些环境可以排除我文档的部分内容。下面是 MWE:

\documentclass[12pt]{article}

\usepackage{comment}
\usepackage{forloop}

\newcounter{probnum}
\forloop{probnum}{1}{\value{probnum} < 6}{
    \excludecomment{prob\arabic{probnum}}
}

\begin{document}
\begin{prob1}
hidden
\end{prob1}

shown
\end{document} 

这将引发一个错误:

Runaway argument?
! File ended while scanning use of \next.
<inserted text> 
                \par 

当我使用 Miktex pdfTex 2.9 编译它时。循环不是导致问题的原因,因为如果我删除实际使用环境的代码,它就可以正常工作。

答案1

常见的扩展问题:

\documentclass[12pt]{article}

\usepackage{comment}
\usepackage{forloop}

\newcounter{probnum}
\forloop{probnum}{1}{\value{probnum} < 6}{%
  \begingroup\edef\x{\endgroup
    \noexpand\excludecomment{prob\arabic{probnum}}%
  }\x
}


\begin{document}
\begin{prob1}
hidden
\end{prob1}

shown
\end{document}

替代版本expl3

\documentclass[12pt]{article}

\usepackage{comment}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\exclude}{mmm}
 {% #1 = prefix, #2 = start, #3 = end
  \int_step_inline:nnnn { #2 } { 1 } { #3 }
   {
    \excludecomment{#1##1} % ##1 is the current step
   }
 }
\ExplSyntaxOff

\exclude{prob}{1}{5}

\begin{document}
\begin{prob1}
hidden
\end{prob1}

shown
\end{document}

相关内容