打造可列出的环境

打造可列出的环境

我正在使用我在收集文档开头列表的内容 修改名称,以便生成问题列表

\documentclass[a4paper,11pt]{book}

\usepackage[T1]{fontenc}
\usepackage[english]{babel}

\let\originalcontentsline\contentsline
\usepackage{hyperref}

\makeatletter
\newcommand{\printquestions}{%
  \section*{Questions}                     
  \begin{enumerate}
  \let\contentsline\originalcontentsline
  \def\@noitemerr{\@latex@warning{Empty questions list}}%
  \@starttoc{qst}
  \end{enumerate}
}
\newcommand{\l@qst}[3]{#1}
\makeatother

\NewEnviron{questions}
 {%
  \addcontentsline{qst}{qst}{%
    \noexpand\unexpanded{\unexpanded\expandafter{\BODY}}%
  }%
 }


\begin{document}
\chapter{one}
\begin{questions}
\item some question
\end{questions}

\chapter{two}
\begin{questions}
\item some other question
\end{questions}


\end{document}

但我想从几个方面进行调整:

  1. 目前的代码是,它会获取列表中的项目,将其从其位置移除,并将它们放置在我的$\printquestions$所在的任何位置。我希望它将项目复制到该位置而不移除它们,有点像目录(在本例中为问题)。

  2. 我希望能够单击收集的项目,以便它将我带到文件中问题的原始位置,这样我就可以稍后添加问题的答案,而不必查看文档。

  3. $因为理想情况下我会在\begin{questions}... \end{questions}中一次只提出一个问题,$所以最好以子部分的形式使用$\question{some question in here}之类的东西,我使用\newcommand{\question}{\subsubsection}来管理它;它实际上解决了上述大部分问题,只要我添加$$$

    \设置计数器{tocdepth}{3}
    \设置计数器{secnumdepth}{3}

在序言中,但它没有将所有问题收集在一起,而是将它们放在其层次结构的目录中,而这违背了不必在文档中费力寻找它们的目的。

因此,基本上我想创建一个命令,允许我以类似“小节”或“定理”的风格插入问题;并且所有这些实例都收集在$\listofquestions中$,我可以在文档开头显示它,并且它可以与 hyperref 一起使用。

我也尝试实施基于 列出假设以及对假设的引用

% *************** Question ***************
\newtheorem{questionin}{Question}[chapter]
\newtheorem{questionaux}{Question}[chapter]
\usepackage{environ,etoolbox}
\makeatletter
\def\addtoquestionlist{\addtheoremline{questionaux}}
\NewEnviron{question}{%
  \refstepcounter{questionaux}%
  \expandafter\addtoquestionlist\expandafter{\expandafter\ignorespaces\BODY}
  \begin{questionin}\BODY\end{questionin}
}
\patchcmd\listtheorems
  {\begingroup}
  {\begingroup\let\label\@gobble}
  {}{}
\makeatother

但我不太了解它的工作原理,无法除了名称之外做出适当的更改。

当我使用$\listtheorems时$,它会打印 questionaux.1.1 questionin.1.1,

甚至没有标题,这并非我所想的那样。我宁愿它打印问题本身,就像上述两种解决方案一样(使用$\begin{question}\item \end{question} 的解决方案$,以及我将其转换为子部分的解决方案)。

答案1

这是一个使用的解决方案埃托克 包裹。

笔记需要保护脆弱的命令。

\documentclass{book}

\usepackage{chngcntr}%   counter subsubsection(questions) within chapter
\usepackage{etoc}
\usepackage{hyperref}

\let\question\subsubsection
\counterwithin{subsubsection}{chapter}
\setcounter{secnumdepth}{3}
%\setcounter{tocdepth}{2}

\newcommand{\printquestions}{%
\begingroup
\etocsetlevel{subsubsection}{2}%
\etocsetlevel{part}{3}%
%\etocsetlevel{chapter}{3}%
\etocsetstyle{chapter}{}{}{\addvspace{10pt}}{}
\etocsetlevel{section}{3}%
\etocsetlevel{subsection}{3}%
\etocsetstyle{subsubsection}{}{}
{\noindent\etocnumber\hskip.5em\etocname\hfill\etocpage\par}{}
\etocsettocstyle{\section*{Questions}}{}
\tableofcontents
\endgroup}

\begin{document}
\tableofcontents
\printquestions
\chapter{one}
\section{One foo}
\question{some question}

\chapter{Two}
\section{Two foo}
\question{some other question}

\end{document}

另一种解决方案(无需更改中心

\documentclass{book}

\usepackage{etoc}
\usepackage{hyperref}

\setcounter{secnumdepth}{3}
\newcounter{question}[chapter]
\renewcommand\thequestion{\thechapter.\arabic{question}}
\makeatletter 
\newcommand\question{\@startsection{question}{3}{\z@}%
                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
                                     {1.5ex \@plus .2ex}%
                                     {\normalfont\normalsize}}
\let\questionmark\@gobble
\makeatother
\etocsetlevel{question}{3}%

\newcommand{\printquestions}{%
\begingroup
\etocsetlevel{question}{2}%
\etocsetlevel{part}{3}%
%\etocsetlevel{chapter}{3}%
\etocsetstyle{chapter}{}{}{\addvspace{10pt}}{}
\etocsetlevel{section}{3}%
\etocsetlevel{subsection}{3}%
\etocsetstyle{question}{}{}
{\noindent\etocnumber\hskip.5em\etocname\hfill\etocpage\par}{}
\etocsettocstyle{\section*{Questions}}{}
\tableofcontents
\endgroup}

\begin{document}
\tableofcontents
\printquestions
\chapter{one}
\section{One foo}
\question{some question}

\chapter{Two}
\section{Two foo}
\question{some other question}

\end{document}

相关内容