版本包产生意外行为

版本包产生意外行为

我想创建一个用于格式化问题集的包。此外,我想要一种简单的方法来生成包含问题陈述和解决方案的版本以及仅包含问题陈述的版本。我有一些几乎像我想要的东西(见下文)。唯一出错的是,当我包含解决方案时,我没有得到“开始解决方案...结束解决方案”(我得到了“解决方案文本在此处”)。请注意,我希望问题环境根据是否包含解决方案而改变,这就是为什么我将自己的\IncludeSolutions命令包裹在\includeversion命令周围。关于如何使其工作有什么建议吗?我也不是特别喜欢这种方法,所以如果有更好的方法来解决这个问题,请告诉我。我自己想到了一个更好的方法来做到这一点,那就是使用将kvoptions参数传递给我的包,然后根据参数定义我的问题/解决方案环境,而不是使用单独的命令来重新定义问题环境,但我也无法让它工作。

我在MyProblemSet中定义命令如下。

\ProvidesPackage{MyProblemSet}

\RequirePackage{versions}

\newenvironment{problem}
{
    \textbf{Begin Problem (without solution)}:\\
}
{
    \\\textbf{End Problem (without solution)}\\
}

\newenvironment{solution}
{
    \textbf{Begin Solution}:\\
}
{
    \\\textbf{End Solution}\\
}
\excludeversion{solution}

\newcommand{\IncludeSolutions}
{
    \renewenvironment{problem}
    {
        \textbf{Begin Problem (with solution)}:\\
    }
    {
        \\\textbf{End Problem (with solution)}\\
    }
    \includeversion{solution}
}

这是我想要如何使用它们的一个例子。

\documentclass{article}
    \usepackage{MyProblemSet}
    \IncludeSolutions

\begin{document}

\begin{problem}
problem text goes here
\end{problem}
\begin{solution}
solution text goes here
\end{solution}

\end{document}

答案1

感谢回复:我一直在使用这个exam包,但我想获得比我想象中更多的控制权,而无需编写自己的包(这并没有反映在我的最小工作示例中)。无论如何,我kvoptions.sty再次尝试使用,这次成功了(我不确定我之前搞砸了什么)。这是我所做的。

这是我的testkv.sty文件

\ProvidesPackage{testkv}

\RequirePackage{verbatim}
\RequirePackage{kvoptions}
\SetupKeyvalOptions
{
    family = TKV,
    prefix = TKV@
}

\DeclareBoolOption[false]{solutions}

\ProcessKeyvalOptions*

\ifTKV@solutions
    \newcommand{\status}{yes solutions}
    \newenvironment{solution}
    {
        \textbf{Begin Solution}\\
    }
    {
        \\\textbf{End Solution}\\
    }
    \newenvironment{problem}
    {
        \textbf{Begin Problem}\\
    }
    {
        \\\textbf{End Problem}\\
    }
\else
    \newcommand{\status}{no solutions}
    \newenvironment{solution}
    {
        \comment
    }
    {
        \endcomment
    }
    \newenvironment{problem}
    {
        \textit{Begin Problem}\\
    }
    {
        \\\textit{End Problem}\\
    }
\fi

这是我的主文件

\documentclass{article}
    % \usepackage[solutions = false]{testkv}
    \usepackage[solutions = true]{testkv}

\begin{document}

\begin{problem}
problem text goes here
\end{problem}
\begin{solution}
solution text goes here
\end{solution}

\end{document}

相关内容