我正在做一本特定书籍的作业,每个问题都在页码和问题编号后进行编号。例如 52.2、52.9、53.13 等。(请注意,它们不是连续的。)
我该如何做一些事情来使它像enumerate
环境一样工作,但不是在每个上面都放 1、2、3 等,而是\item
放一个自定义数字?
答案1
你可以简单地使用可选参数\item
\documentclass{scrartcl}
\begin{document}
\begin{itemize}
\item [2.9] Foo
\item [53.2] Bar
\item [69.11]
\end{itemize}
\end{document}
我希望这就是你想做的……
答案2
真正疯狂的做法如下:
\documentclass{article}
\usepackage{enumitem}
\makeatletter
\newcommand*{\wackyenum}[1]{%
\expandafter\@wackyenum\csname c@#1\endcsname%
}
\newcommand*{\@wackyenum}[1]{%
$\ifcase#1\or52.2\or52.9\or53.13\or42%
\else\@ctrerr\fi$%
}
\AddEnumerateCounter{\wackyenum}{\@wackyenum}{53.13}
\makeatother
\begin{document}
\begin{enumerate}[label=\wackyenum*]
\item One
\item Two
\item Three
\end{enumerate}
\end{document}
这允许您定义枚举将循环的任意数字列表。这有一个(非常小的)优点,就是间距表现得更好一些。这基本上就是在moreenum
包。文档解释该过程。
答案3
根据多少\addtocounter
您的数字是“非连续的”,并且您需要多少快速而肮脏的解决方案而不是具有精致和自动化的东西,您可能会与涉及该包的一些临时方法相处enumitem
:
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=52.\arabic*,start=2]
\item Answer % 52.2
\addtocounter{enumi}{6}
\item Answer % 52.9
\end{enumerate}
\begin{enumerate}[label=53.\arabic*,start=13]
\item Answer % 53.13
\end{enumerate}
\end{document}
再多做一些工作,您就可以将页码(52, 53)变成它自己的计数器,并将其全部包装到可重复使用的环境定义中,但我认为这可以让您了解所有这一切。
答案4
要自动获取页码,您可以执行以下操作
\documentclass[a4paper]{article}
\usepackage{enumitem,refcount}
\newcounter{qcount}
\newenvironment{questions}
{\refstepcounter{qcount}\label{qcount\theqcount}%
\begin{itemize}[label=\protect\getpagerefnumber{qcount\theqcount}.\protect\qcountnum]}
{\end{itemize}}
\newcommand{\qitem}[1]{\def\qcountnum{#1}\item}
\begin{document}
\begin{questions}
\qitem{2} A
\qitem{25} B
\end{questions}
\newpage
\begin{questions}
\qitem{3} C
\qitem{7} D
\end{questions}
\end{document}
在每个questions
环境中都会生成一个新标签,因此我们可以使用它来对问题进行编号。该\qitem
命令需要将问题编号作为参数。由于该机制利用了\label
-系统,因此需要\ref
运行两次。latex