2

My codes are follows:

\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}

%%%Content of 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;}

The above coding are works fine, but the punctuation (period, command, colon, etc.) after \cite commands are disappear. If I remove the tag \mathchardef\@m=1500 then all are working fine.

Is this correct to remove the tag \mathchardef\@m=1500, please suggest....

Also, please advise what is the use of the tag \mathchardef\@m=1500...

MadyYuvi
  • 13,693
  • 4
    Usually \@m is defined with \mathchardef\@m=1000, so setting it to 1500 is definitely wrong: code that expects it to be a 1000 will behave unexpectedly. – Phelype Oleinik Aug 12 '20 at 13:19
  • 3
    Er, why are you defining \@m? – Joseph Wright Aug 12 '20 at 13:19
  • @JosephWright It was there in the received TeX file, I didn't include.... – MadyYuvi Aug 12 '20 at 14:05
  • 2
    See also the end of https://tex.stackexchange.com/q/433204/35864. – moewe Aug 12 '20 at 15:04
  • 3
    It's beyond me why the code you were given sets \mathchardef\@m=1500, as there are many places where \@m is used as a shorthand for 1000. But whatever the intentions, this is certainly quite dangerous since (as mentioned above) \@m is used in many different places and blinding changing values has the potential to change the outcome. The problem with biblatex specifically is that it uses \@m when it initialises space factor codes for the punctuation tracker. Assigning different values may lead to undesirable punctuation (as observed here). – moewe Aug 12 '20 at 15:13
  • 3
    redefining \@m is like redefining \def or \newcommand you should not expect latex to work at all after that. – David Carlisle Aug 12 '20 at 16:06
  • @moewe Thanks for your valuable suggestion.... – MadyYuvi Aug 13 '20 at 07:54

1 Answers1

3

\@m is a core latex command that means 1000 if you change that then essentially latex is broken and nothing should be expected to work.

It is used in the definition of \frenchspacing so affecting punctuation is not surprising:

\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 }

Also in the definition of \@

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

so this would no longer force normal spacing (which is 1000 space factor)

It also breaks commands to suppress line spacing, which rely on the "magic" value of -1000pt that TeX uses as a flag in its internal vertical space algorithms.

\def\nointerlineskip{\prevdepth-\@m\p@}
\def\offinterlineskip{\baselineskip-\@m\p@
  \lineskip\z@ \lineskiplimit\maxdimen}
David Carlisle
  • 757,742