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...

7
  • 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. Commented Aug 12, 2020 at 13:19
  • 3
    Er, why are you defining \@m?
    – Joseph Wright
    Commented Aug 12, 2020 at 13:19
  • 2
    See also the end of tex.stackexchange.com/q/433204/35864.
    – moewe
    Commented Aug 12, 2020 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
    Commented Aug 12, 2020 at 15:13
  • 3
    redefining \@m is like redefining \def or \newcommand you should not expect latex to work at all after that. Commented Aug 12, 2020 at 16:06

1 Answer 1

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}
1
  • Much thanks for your detailed explanation...
    – MadyYuvi
    Commented Aug 13, 2020 at 7:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .