带有“快捷方式”命令的 Latex 版本包

带有“快捷方式”命令的 Latex 版本包

我想创建同一份练习表的多个版本(教师、学生、解决方案、提示……)。因此,我尝试使用“versions”包。

由于我必须每周执行两次,所以我想尽量减少每次所需的工作量,因此我将要打印的所有内容放在“\shortcut”命令中,并在不同版本的设置中多次调用该命令。

这是我期望的工作:

\documentclass{article}
\usepackage{versions}

\newenvironment{envA}{}{}
\newenvironment{envB}{}{}


\newcommand{\shortcut}{
\begin{envA}TEXT\end{envA}
\begin{envB}OTHER TEXT\end{envB}
}

\begin{document}

\excludeversion{envB}
\shortcut

\includeversion{envB}
\excludeversion{envA}
\shortcut

\end{document}

但是我收到了各种错误,如下所示(抱歉,图片太多了): 在此处输入图片描述

非常令人沮丧的是,如果我直接在我想要出现的位置输入内容,它就会起作用并产生预期的结果:

\documentclass{article}
\usepackage{versions}

\newenvironment{envA}{}{}
\newenvironment{envB}{}{}


\begin{document}

\excludeversion{envB}
\begin{envA}TEXT\end{envA}
\begin{envB}OTHER TEXT\end{envB}

\excludeversion{envA}
\includeversion{envB}
\begin{envA}TEXT\end{envA}
\begin{envB}OTHER TEXT\end{envB}

\end{document}

有人可以帮忙吗?

答案1

我不知道您的设置为何失败,而且我也不太想调查原因。因此我设置了一个小的替代方案。它不使用环境,而是一个带有两个参数(\useV)的宏,第一个参数是版本,第二个参数是如果包含该版本则应出现的文本。版本包括\includeV并用排除\excludeV\includeV和都\excludeV接受应包括或排除的版本逗号分隔列表。版本名称可以包含除标记{}和之外的任何内容#

\documentclass{article}

\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_juliafatou_included_tl
\tl_set:Nn \l_juliafatou_included_tl { _ }
\NewDocumentCommand \includeV { m }
  {
    \clist_map_inline:nn { #1 }
      {
        \tl_if_in:NnF \l_juliafatou_included_tl { _##1_ }
          { \tl_put_right:Nn \l_juliafatou_included_tl { ##1_ } }
      }
  }
\NewDocumentCommand \excludeV { m }
  {
    \clist_map_inline:nn { #1 }
      {
        \tl_if_in:NnT \l_juliafatou_included_tl { _##1_ }
          { \tl_replace_once:Nnn \l_juliafatou_included_tl { _##1_ } { _ } }
      }
  }
\NewDocumentCommand \useV { m }
  {
    \tl_if_in:NnT \l_juliafatou_included_tl { _#1_ }
  }
\ExplSyntaxOff

\newcommand*\shortcut
  {%
    \useV{A}{Text}%
    \useV{B}{Other text}%
    \useV{C}{Third text}%
  }

\begin{document}

\includeV{A}
\excludeV{B,C}
\shortcut

\includeV{B,C}
\excludeV{A}
\shortcut

\end{document}

输出:

在此处输入图片描述

相关内容