我重新定义了\chapter*
,但是当我使用glossaries
包中的首字母缩写词时,我得到了一堆错误。一个最小(非)工作示例:
\documentclass{memoir}
\usepackage[acronym]{glossaries}
\makeglossaries
\loadglsentries{acronym_file}
\makeatletter
\let\stdchapter\chapter
\renewcommand*\chapter{%
\if@star{\starchapter}{\stdchapter}
\def\starchapter[#1]#2{%
\stdchapter*[{#1}]{#2}}
\makeatother
\begin{document}
\printacronyms
\end{document}
这给了我错误信息! Use of \starchapter doesn't match its definition.
如果我删除\printacronyms
或者使用,就\printglossary
不会\printacronyms
收到错误消息。
此外,如果我\def\starchapter[#1]#2{\stdchapter*[{#1}]{#2}}
用替换\newcommand*\starchapter[1]{\stdchapter*{#1}}
,我不会收到错误消息(请注意,这对我来说不起作用,因为我想要 中的可选参数\chapter[foo]{bar}
)
是否有一种(希望简单)方法来改变我的章节定义,以便我不会遇到首字母缩略词的问题?
答案1
我建议使用来\NewDocumentCommand
检查多种情况:
\chapter[][]{}
和\chapter*[]{}
然后填写您自己的章节风格的新定义。
我在这里的定义将会失败\chapter*[][]{}
->那里应该做什么?
\documentclass{memoir}
\usepackage[acronym]{glossaries}
\usepackage{xparse}
\makeglossaries
%\loadglsentries{acronym_file}
\newacronym{LaTeX}{\LaTeX}{LaTeX is fun}
\makeatletter
\let\stdchapter\chapter
\RenewDocumentCommand{\chapter}{soom}{%
\IfBooleanTF{#1}{% Is it starred -> yes, so check for #2.
\IfValueTF{#2}{%
\stdchapter*[#2]{#4}% -> #2 is heading title
}{%
\stdchapter*{#4}%
}%
}{%
\IfValueTF{#2}{%
\IfValueTF{#3}{%
\stdchapter[#2][#3]{#4}% -> #2 is toc title, #3 is head title
}{%
\stdchapter[#2]{#4}% No head title #3
}%
}{%
% Do not check for #3 since #2 isn't here!
\stdchapter{#4}%
}%
}%
}
\begin{document}
\tableofcontents
\chapter{First}
\chapter[Another one]{Second}
\chapter[Yet Another one][My nice title]{Third}
\gls{LaTeX}
\chapter*{Not in Toc}
\chapter*[Head of unnumbered chapter]{Also not in toc}
\printacronyms
\end{document}
答案2
我找到了一些有用的方法:
\makeatletter
\let\stdchapter\chapter
\renewcommand*\chapter{%
\if@star{\@dblarg\starchapter}{\stdchapter}
\def\starchapter[#1]#2{%
\stdchapter*[{#1}]{#2}}
\makeatother
这似乎可以解决问题(尽管根据 clemens 和 Christian Hupfer 的评论,我不太确定这是否是最好的方法)