编辑

编辑

我想对练习​​中的问题使用并行且独立的章节编号系统。我想要实现的效果类似于维基百科的这个页面;但是,我想要多层问题(至少 3 或 4 层),同时为我的部分编号保留多层(至少直到子小节),所以我不能按原样使用这个技巧。

我还尝试了一些受手册第 11.5 节启发的方法,即定义

\definehead[one][section=questions-1]
\definehead[two][section=questions-2]

等等,但是我收到一条错误消息,指出问题令牌未初始化(如果我理解正确的话)。

有人知道实现这一目标的正确方法吗?

奖励:是否可以定义一个命令来轻松跳过一个数字(类似于\skipquestion[one])?

编辑

根据 Adytia 在评论中的评论,我将解释为什么我不考虑使用枚举:我希望既能灵活应对小型练习,又能应对大型考试。这是我的第一次尝试(仅限于两个级别,但应该继续),它按我的意愿工作,只是它与标准部分共享计数器;它受到之前文档的启发,因此主要思想不是我提出的。

\def\NumberOne#1{\hbox to 4mm{#1.\ \hfil}}
\def\NumberTwo#1{\hbox to 8mm{#1\ --\hfil}}

\definehead[One][section]
\definehead[OneTitle][section]
\definehead[Two][subsection]
\setuphead[One][
    numbercommand=\NumberOne,
    distance=0mm,
    style=\bf,
    aligntitle=float,
    before=\noindenting,
    after=]
\setuphead[OneTitle][
     numbercommand=\NumberOne,
     conversion=Romannumerals,
     style={\rm\bfb},
     before={\blank[line]\noindenting},
     aligntitle=float,
     after=]
\setuphead[Two][
     numbercommand=\NumberTwo,
     conversion=numbers,
     alternative=text,
     distance=0mm,
     style=\bi,
     aligntitle=float,
     before=\noindenting,
     after=]

\def\T#1{\dodoubleempty\doHead[#1]}
\def\doHead[#1][#2]#3{%
    \ifcase#1 %T0
    \or %T1
      \doifemptyelse{#3}{\def\CurHead{\One}}{\def\CurHead{\OneTitle}}
    \or %T2
      \doifemptyelse{#3}{\def\CurHead{\Two}}{\def\CurHead{\TwoTitle}}
    \fi
  \CurHead[#2]{#3}
}

\T1{One title}  % prints I. One title
\T2 This prints 1.1
\T2 This prints 1.2
\T1 This prints 2

编辑2

由于建议使用枚举,因此我尝试了以下方法:

\defineenumeration[question][headstyle=bold,style=normal,
  indenting=never, indentnext=no, margin=-0.5mm,
  alternative=hanging, distance=0pt,
  width=4mm, stopper={.}, text={},
  before={\blank[none]},

]
\setupenumeration[subquestion][headstyle=bold,style=normal,
  indenting=never, indentnext=no, margin=-0.5mm,
  alternative=hanging, distance=0pt,
  width=6mm, stopper={.}, text={},
  before={\blank[none]},
]
\setupenumeration[subsubquestion][headstyle=sl,style=normal,
  indenting=never, indentnext=no, margin=-0.5mm,
  alternative=hanging, distance=0pt,
  width=8mm, stopper={.}, text={},
  before={\blank[none]},
]
\setupenumeration[subsubsubquestion][headstyle=sl,style=normal,
  indenting=never, indentnext=no, margin=-0.5mm,
  alternative=hanging, distance=0pt,
  width=10mm, stopper={.}, text={},
  before={\blank[none]},
]

\def\doTA[#1]{
  \doifsomethingelse{#1}
    {
      \nextquestion
      \blank[big]\noindenting
      {\rm\bfb\convertedcounter[question][numberconversion=R]. #1}
      \blank[small,samepage]
    }
    {
      \question
    }
}

\def\doTB[#1]{
  \doifsomethingelse{#1}
    {
      \nextsubquestion
      \blank[small]\noindenting
      {\hskip 1cm {\rm\bfa\convertedcounter[question][numberconversion=CCS]. #1}}
      \blank[small,samepage]
    }
    {
      \subquestion
    }
}

\def\doTC[#1]{
  \doifsomethingelse{#1}
    {
      \nextsubsubquestion
      \blank[big]\noindenting
      {\hskip 1cm \sl\convertedcounter[question][numberconversion=n]) #1}
      \blank[small,samepage]
    }
    {
      \subsubquestion
    }
}

\def\doTD[#1]{
  \doifsomethingelse{#1}
    {
      \nextsubsubquestion
      \blank[big]\noindenting
      {\hskip 1cm \sl\convertedcounter[question][numberconversion=n]. #1}
      \blank[small,samepage]
    }
    {
      \subsubsubquestion
    }
}

\def\TA{\dosingleempty\doTA}
\def\TB{\dosingleempty\doTB}
\def\TC{\dosingleempty\doTC}
\def\TD{\dosingleempty\doTD}

\starttext

\section{Bonjour}
\subsection{Rebonjour}
Hello
\subsubsection{Tagada}
y a
\subsubsection{Tsoin tsoin}
quelqu'un
\subsection{Le petit\dots}

\section{Lapin ! \name{Jazz}}


\TA[Big question]

\TB 
blabla
\TB
blabla

\TB[Subquestion]

\TC
Blabla
\TC
Blabla

\TC[Subsubquestion With title]

Blabla
\TD
Hello
\TD
Pouet

\TC
HEllo

\TA
Another question
\TA
Another question


\stoptext

它的行为相当正确,但我问自己如何才能精细地调整问题的对齐方式,以及如何定义转换集以显示子子问题,例如 1.2.a)。提前谢谢您。

相关内容