在某些情况下,另一个带星号/无星号的宏定义中的宏的星号看起来像断开连接

在某些情况下,另一个带星号/无星号的宏定义中的宏的星号看起来像断开连接

这个问题是我之前的一个问题的延续:在带星号和不带星号的 \chapter 命令前添加不同的内容

在某些情况下,另一个带星号/不带星号的宏定义中的带星号的宏无法按预期工作。以下 MCE 工作正常,但是,一旦glossaries加载包,星号\resetsecnumdepth看起来就像断开了一样:它出现在文本中。

\documentclass{book}
\usepackage{xparse}
\usepackage{tocvsec2}
% \usepackage{glossaries}
%
\let\ORIchapter\chapter%
\RenewDocumentCommand\chapter{som}{%
  \IfBooleanTF{#1}
    {
     \setsecnumdepth{none}%
    }
    {%
     \resetsecnumdepth*
    }
  \IfNoValueTF{#2}
    {\ORIchapter{#3}}
    {\ORIchapter[#2]{#3}}%
}
%
\setsecnumdepth{chapter}
\begin{document}
\chapter{A chapter}
\end{document}

问题不是来自xparse包,因为以下仅使用 LaTeX 宏的 MCE 也遇到了同样的问题。

\documentclass{book}
\usepackage{tocvsec2}
\usepackage{glossaries}
%
\let\ORIchapter\chapter%
\makeatletter%
\renewcommand\chapter{%
  \@ifstar{\starred@chapter}{\unstarred@chapter}%
}
\newcommand{\starred@chapter}{%
  \setsecnumdepth{none}%
  \ORIchapter%
}%
\newcommand{\unstarred@chapter}{%
  \resetsecnumdepth*
  \ORIchapter%
}%
%
\makeatother%
%
\setsecnumdepth{chapter}
\begin{document}

\chapter{A chapter}
\end{document}

我看了一下glossaries代码,并做了一些测试(修补所 glossaries涉及的宏\chapter以便它们使用\ORIchapter),但我没有成功调试问题(文件中没有警告也没有错误.log)。

答案1

这又是一个伪空间的情况!

\documentclass{book}
\usepackage{xparse}
\usepackage{tocvsec2}
\usepackage{glossaries}

\makeatletter
\renewcommand\resetsecnumdepth{%
  \@ifstar{%
    \setcounter{secnumdepth}{\value{max@secnumdepth}}%
    \edef\stack@secnumdepth{\the\c@secnumdepth\relax}%
  }{%
    \ifx\stack@secnumdepth\@empty
      \PackageWarning{tocvsec2}{There is no previous value for secnumdepth}%
    \else
      \afterassignment\gobble@secnumdepth
      \expandafter\c@secnumdepth\expandafter\numexpr\stack@secnumdepth\@nil
    \fi
  }%<--- Was missing
}
\makeatother

\let\ORIchapter\chapter
\RenewDocumentCommand\chapter{som}{%
  \IfBooleanTF{#1}
    {
     \setsecnumdepth{none}%
    }
    {%
     \resetsecnumdepth*
    }
  \IfNoValueTF{#2}
    {\ORIchapter{#3}}
    {\ORIchapter[#2]{#3}}%
}

\setsecnumdepth{chapter}
\begin{document}
\chapter{A chapter}
\end{document}

会发生什么?在 中amsgen.sty\@ifstar根据 获得一个新定义\new@ifnextchar,它不会像 那样忽略空格\@ifnextchar

%定义中的缺失导致\new@ifnextchar看不到*下一个字符,而是一个空格。

出现该问题是因为通过glossaries加载。amsgenamsmath

相关内容