亲爱的 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}