我的代码如下:
\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}