使用 biblatex-chicago 时,\mathchardef\@m 会影响 \cite 标签后的标点符号

使用 biblatex-chicago 时,\mathchardef\@m 会影响 \cite 标签后的标点符号

我的代码如下:

\documentclass{book}
\usepackage[natbib,authordate,backend=biber]{biblatex-chicago}%

\addbibresource{test.bib}

\makeatletter
\mathchardef\@m=1500
\makeatother

\begin{document}

Test,.;: for the reference cross link \citet{Glymour16},.;: Also this is end
of the paragraph checking \citet{Glymour16}.


\printbibliography

\end{document}

%%%test.bib的内容%%%

% Encoding: UTF-8


@Article{Glymour16,
  author  = {C. Glymour},
  title   = {Responses},
  journal = {Synthese},
  year    = {2016},
  volume  = {193},
  pages   = {1251--1285},
}

@Comment{jabref-meta: databaseType:bibtex;}

上面的代码运行正常,但\cite命令后的标点符号(句号、命令、冒号等)消失了。如果我删除标签\mathchardef\@m=1500,那么一切都会正常工作。

删除标签是否正确\mathchardef\@m=1500,请提出建议……

另外,请告知该标签的用途\mathchardef\@m=1500...

答案1

\@m是一个核心的 latex 命令,这意味着如果你改变它,那么 latex 基本上就被破坏了,什么都不能正常工作。

它的定义中用到的\frenchspacing标点符号如此影响也就不足为奇了:

\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m
  \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m}
\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000%
  \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 }

同样在定义中\@

\def\@{\spacefactor\@m{}}%

所以这将不再强制正常间距(即 1000 空间因子)

它还会破坏抑制行距的命令,该命令依赖于 TeX 在其内部垂直空间算法中用作标志的 -1000pt 的“魔法”值。

\def\nointerlineskip{\prevdepth-\@m\p@}
\def\offinterlineskip{\baselineskip-\@m\p@
  \lineskip\z@ \lineskiplimit\maxdimen}

相关内容