![编辑](https://linux22.com/image/358456/%E7%BC%96%E8%BE%91.png)
我想对练习中的问题使用并行且独立的章节编号系统。我想要实现的效果类似于维基百科的这个页面;但是,我想要多层问题(至少 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)。提前谢谢您。