重新定义回忆录中与缩略词相关的章节冲突

重新定义回忆录中与缩略词相关的章节冲突

我重新定义了\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 的评论,我不太确定这是否是最好的方法)

相关内容