编辑2

编辑2

我正在编写练习及其详细答案,我想重置每个练习之间的公式编号。这可能吗?如果可以,该怎么做?我在手册或 wiki 上找不到类似的东西……

编辑2

我知道我可以使用该bysection选项,但重点是我不使用部分来标记练习标题:我已经将它们用于课程本身。我的文档结构如下(我大量使用条件处理来创建仅包含问题、问题和答案、提示、有或没有课程等的文档...)

我终于有时间发布一个合适的 MWE。我在一个单独的目录中对其进行了测试。

\enablemode[lesson]

\starttext

%% The lesson itself
\startmode[lesson]
   \section{Bla}

   ...

\stopmode

%% The exercises
\def\exs{
  \exercisepath[/home/adrien/dev/test]  %% to be adapted
  \inputexercise[exercise_file]
  \inputexercise[exercise_file2]
}

\hairline
\enablemode[exercise]
\exs
\disablemode[exercise]

\hairline
\enablemode[answers]
\exs
\disablemode[answers]

\stoptext

每个文件均exercise_file具有以下结构:

\exercisetitle[The title]

\startmode[exercise]
  questions
\stopmode

\startmode[answers]
  detailed answers

  \placeformula[eq:test]
  \startformula
    a = b
  \stopformula

  The eq is \eqref[eq:test]

\stopmode

个人命令如下(在环境文件中定义,可以粘贴在starttext测试目的之前):

%% eq ref
\definereferenceformat[eqref][left={$(},right={)$}]

%% manage the exercise files directories 
\unprotect
\def\exercisepath[#1]{
  \gdef\@exercisepath{#1}
  \setupexternalfigures[directory={#1}]
}
\def\inputexercise[#1]{
  \ReadFile{\@exercisepath/#1}\flushsidefloats
}   
\protect

%% format the exercise title with a possible precision (eg the difficulty) 
\def\doExercisetitle[#1][#2]{
  \blank\noindenting
  {\hskip 1cm \bs #1
    \ifsecondargument \\ \tf \it [#2] \fi
  }
  \blank[small,samepage]
}

\def\exercisetitle{\dodoubleempty\doExercisetitle}

我希望每个练习文件在公式编号方面都是“独立的”。这可能吗?

答案1

简单的方法是使用\resetcounter命令重置给定计数器的值,例如\resetcounter[formula]重置formula数字。

\usemodule[visual]

\setuppapersize[A5]

\startbuffer[formula]
    \startplaceformula
        \startformula
            \fakeformula
        \stopformula
    \stopplaceformula
\stopbuffer

\starttext

\dorecurse{3}{\getbuffer[formula]}

\blank[2*line] \resetcounter[formula]

\dorecurse{3}{\getbuffer[formula]}

\stoptext

配方计数器手动复位

更好的解决方案是section为练习创建一个新的,并formula在每次练习开始时重置计数器。要在每个新练习时重置计数器,请将部分的名称作为参数传递给way中的键\setupformula

\usemodule[visual]

\setuppapersize[A5]

\definehspace [exercise] [1cm]

\definehead [exercisetitle] [subject]

\define[2]\ExerciseTitleCommand
  {\vbox\bgroup
     \dontleavehmode\hspace[exercise]\structuretitle
     \doifsomething{\structureuservariable{subtitle}}
       {\par{\tf\it[\structureuservariable{subtitle}]}}%
   \egroup}

\setuphead
  [exercisetitle]
  [command=\ExerciseTitleCommand,
   style=boldslanted]

\startbuffer[formula]
    \startplaceformula
        \startformula
            \fakeformula
        \stopformula
    \stopplaceformula
\stopbuffer

% \setupformula
%   [way=bysection]

\setupformula
  [way=byexercisetitle]

\starttext

\startexercisetitle [title={First exercise}]
    \dorecurse{3}{\getbuffer[formula]}
\stopexercisetitle

\startexercisetitle [title={Second exercise}] [subtitle={Counter reset}]
    \dorecurse{3}{\getbuffer[formula]}
\stopexercisetitle

\stoptext

配方计数器自动复位

相关内容