自动创建自己的目录

自动创建自己的目录

亲爱的 TeX(stackexchange) 社区,我正在尝试自动创建自己的目录:使用\keyword命令我定义自己的目录列表的条目,以便每个属于同一章节的条目都将打印在章节开头\listofkeywords

第一章有问题:没有创建 .key1 文件,也没有打印目录。这是我的 MWE:

\documentclass[oneside,11pt,fleqn]{memoir}
\usepackage{titletoc}
\setcounter{tocdepth}{0}
\usepackage[compact,toctitles]{titlesec}
\titleformat{\chapter}[block]
{\huge}{\chaptertitlename\ \thechapter:\ }{0pt}{\huge}[\addtocounter{cherrychapter}{1}]
\title{H\&R}
%%% COUNTERS
\newcounter{cherrychapter}%[chapte]
\setcounter{cherrychapter}{0}
\newcommand\keyword[1]{%
\noindent%
{#1}%
\phantomsection% comment out if hyperref is noy used
\thecherrychapter\thechapter\addcontentsline{key-\thecherrychapter}{figure}{#1}
}
\makeatletter
\newcommand\listkeywordsname{KEYWORDS}
\newcommand\listofkeywords{%
\thecherrychapter\thechapter
\section*{\listkeywordsname}\@starttoc{key-\thecherrychapter}
\thecherrychapter\thechapter}
\makeatother
\begin{document}%BEGIN
\maketitle
\tableofcontents*
\part{A}
\chapter{aa}
\listofkeywords
\keyword{bb}
\section{aaa}
\keyword{bbb}
\subsection{aaaa}
\keyword{bbbb}
\chapter{cc}
\listofkeywords
\keyword{dd}
\section{ccc}
\keyword{ddd}
\subsection{cccc}
\keyword{dddd}
\end{document}

感谢您的帮助。谨致问候。

答案1

只要需要这个辅助计数器,cherrychapter就可以用 来完成成本计算。xassoccnt

主要问题是memoir重新定义了\@starttoc。一个可能的解决方案是将原始 LaTeX 核心定义存储到\@starttocorig之前\documentclass,并使用该版本代替\@starttoc

对于多于一个章节,它会报告除最后一个章节之外的任何编号。实际上,这看起来像是一个扩展问题,因为memoir的版本\@starttoc尝试写入以在文档末尾生成文件句柄,然后打开相关文件,因此#1扩展到错误的章节编号。

\makeatletter
\let\@starttocorig\@starttoc
\makeatother

\documentclass[oneside,11pt,fleqn]{memoir}

\providecommand{\phantomsection}{}
\usepackage{morewrites}
\usepackage{xassoccnt}
\newcounter{cherrychapter}
\DeclareAssociatedCounters{chapter}{cherrychapter}

\usepackage{titletoc}
\setcounter{tocdepth}{0}
\usepackage[compact,toctitles]{titlesec}
\titleformat{\chapter}[block]
{\huge}{\chaptertitlename\ \thechapter:\ }{0pt}{\huge}%
\title{H\&R}
\newcommand\keyword[1]{%
  \noindent%
  {#1}%
  \phantomsection% comment out if hyperref is not used
  \addcontentsline{key-\thecherrychapter}{figure}{#1}
}
\makeatletter
\newcommand{\listofkeywordsbasic}{%
  \@starttocorig{key-\thecherrychapter}
}
\makeatother
\newcommand\listkeywordsname{KEYWORDS}
\newcommand\listofkeywords{%
  \section*{\listkeywordsname}\listofkeywordsbasic
}



\begin{document}%BEGIN
\maketitle
\tableofcontents*
\part{A}
\chapter{aa}
\listofkeywords
\keyword{bb}
\section{aaa}
\keyword{bbb}
\subsection{aaaa}
\keyword{bbbb}
\chapter{cc}
\listofkeywords
\keyword{dd}
\section{ccc}
\keyword{ddd}
\subsection{cccc}
\keyword{dddd}
\end{document}

答案2

如上所述,内部命令\@starttoc由 重新定义memoir。命令的重新定义\@starttoc用于定义用户命令\newlistof

要利用这些可能性,\newlistof您可以执行以下操作:

\documentclass[oneside,11pt,fleqn]{memoir}

\providecommand{\phantomsection}{}

\usepackage{xassoccnt}
\newcounter{cherrychapter}
\DeclareAssociatedCounters{chapter}{cherrychapter}

\newcommand\keyword[1]{#1\phantomsection\addcontentsline{key-\thecherrychapter}{figure}{#1}}

\providecommand\listofkeywords{}
\newcommand\listkeywordsname{KEYWORDS}
\renewcommand\memendofchapterhook{
  \edef\x{\noexpand\newlistof{listofkeywords}{key-\thecherrychapter}{\listkeywordsname}}\x%
}


\begin{document}%BEGIN
\chapter{aa}
\listofkeywords

\keyword{bb}
\section{aaa}
\keyword{bbb}
\subsection{aaaa}
\keyword{bbbb}

\chapter{cc}
\listofkeywords

\keyword{dd}
\section{ccc}
\keyword{ddd}
\subsection{cccc}
\keyword{dddd}

\chapter{dd}
\listofkeywords

\keyword{ee}
\section{eee}
\keyword{eee}
\subsection{eeee}
\keyword{eeeee}
\end{document}

相关内容