![使用“environ”来列出环境列表?](https://linux22.com/image/252650/%E4%BD%BF%E7%94%A8%E2%80%9Cenviron%E2%80%9D%E6%9D%A5%E5%88%97%E5%87%BA%E7%8E%AF%E5%A2%83%E5%88%97%E8%A1%A8%EF%BC%9F.png)
在我的文档中,我使用一个amsthm
名为 的环境question
,我用它来向自己提出问题,以供日后参考。然而,这些问题分散在文本中。
我知道ntheorem
有一个\listoftheorems
命令或类似的东西可以完全满足我的要求。但是,在与其他软件包一起ntheorem
使用时,我有一些不好的经历ntheorem
(只有在我使用时才会发生,我已经忘记了……),这会带来一些非常奇怪的错误,所以我暂时mathtools
想完全避免使用。ntheorem
那么,是否可以这样做,environ
因为它提供了一些有用的钩子?最好是列表还允许我(可选)包含简短描述,当然还有页码。环境定义为\newtheorem{question}{Question}
。
编辑:我发现thmtools
它似乎也有一个命令\listoftheorems
(以及重新定义标题的方法)。是否可以扩展此命令,以便我可以添加简短的描述?
答案1
首先,有一个tocloft
包,它专门用于此类工作,并减轻了 Gonzalo 的回答中的一些工作量。此外,我建议定义一个新环境,这样您就不必使用额外的命令,但可以有一个实际的可选参数:
\documentclass{article}
\usepackage{amsthm}
\usepackage{tocloft}
\newtheorem{xquestion}{Question}
\newcommand\listxquestionsname{List of Questions}
\newlistof{question}{xquestion}{\listxquestionsname}
\newcommand\qdescription[1]{%
\addcontentsline{xquestion}{question}%
{\protect\makebox[2.5cm][l]{Question~\thexquestion\hfill}#1}}
\newenvironment{question}[1][]{\begin{xquestion}\qdescription{#1}}{\end{xquestion}}
\begin{document}
\listofquestion
\bigskip
\begin{question}[Optional description for question one]
Test question One
\end{question}
\begin{question}
Test question Two
\end{question}
\end{document}
答案2
以下示例显示了使用 LaTeX 内核命令\@starttoc
生成新问题列表的一种可能解决方案。该\qdescription
命令用于生成新问题列表中的条目以及提供可选描述:
\documentclass{article}
\usepackage{amsthm}
\makeatletter
\newcommand\listquestionsname{List of Questions}
\newcommand\qdescription[1]{%
\addcontentsline{qst}{question}%
{\protect\makebox[2.5cm][l]{Question~\thequestion\hfill}#1}}
\newcommand\listofquestions{%
\let\listofquestions\relax % (AM)
\section*{\listquestionsname}\@starttoc{qst}%
}
\newcommand*\l@question{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother
\newtheorem{question}{Question}
\begin{document}
\listofquestions
\begin{question}
Test question One
\qdescription{Optional description for question one}
\end{question}
\begin{question}
Test question Two
\qdescription{}
\end{question}
\end{document}