% \iffalse meta-comment % % Copyright (C) 2023 by Antoine Missier % % This file may be distributed and/or modified under the conditions of % the LaTeX Project Public License, either version 1.3 of this license % or (at your option) any later version. The latest version of this % license is in: % % http://www.latex-project.org/lppl.txt % % and version 1.3 or later is part of all distributions of LaTeX version % 2005/12/01 or later. % \fi % % \iffalse %<*driver> \ProvidesFile{decimalcomma.dtx} % %<*package> \NeedsTeXFormat{LaTeX2e}[2005/12/01] \ProvidesPackage{decimalcomma} [2023/12/30 v1.4 .dtx Comma for decimal numbers] % %<*driver> \documentclass{ltxdoc} %\usepackage{doc} %\MakeShortVerb| \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[english]{babel} \usepackage[charter]{mathdesign} \usepackage{decimalcomma} \usepackage{sectsty} \usepackage{xcolor} \usepackage{centeredline} \usepackage{metalogo} \definecolor{darkbrown}{rgb}{0.5,0.1,0.1} \allsectionsfont{\color{darkbrown}} \DisableCrossrefs %\CodelineIndex %\RecordChanges \usepackage{hyperref} \hypersetup{% colorlinks, linkcolor=blue, citecolor=red, pdftitle={decimalcomma}, pdfsubject={LaTeX package}, pdfauthor={Antoine Missier} } \MakeShortVerb{"} \begin{document} \DocInput{decimalcomma.dtx} %\PrintChanges %\PrintIndex \end{document} % % \fi % % \CheckSum{18} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \changes{v1.0}{2023/12/06}{Initial version} % \changes{v1.1}{2023/12/19}{Error message when unicode-math loaded after decimalcomma} % \changes{v1.2}{2023/12/20}{Bug correction: bad typo for the boolean DC@unicodemath} % \changes{v1.3}{2023/12/28}{Loading icomma to avoid babel-french + numprint problems} % \changes{v1.4}{2023/12/30}{Code improvement, first boolean unnecessary, thanks to J.F. Burnol} % % \GetFileInfo{decimalcomma.sty} % % \title{The \textsf{decimalcomma} package} % \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}} % \date{\filedate, \fileversion} % \maketitle % % \section{Why this package?} % % In many countries, except notably in the English-speaking countries, % the comma is used as the decimal separator for numbers. % However, in the math mode of \LaTeX, the comma is always, by default, % treated as a punctuation symbol and therefore is followed by a space. % This is appropriate in intervals: "$[a,b]$" results in $[a,b]$, % but is not appropriate for numbers where the comma represents the decimal separator. % For example, "$12,5$" is displayed as $12, 5$ instead of $12,5$. % % \medskip % Two very convenient packages allow handling the decimal comma. In math mode: % \begin{itemize} % \item With \textsf{icomma} (intelligent comma) by Walter Schmidt~\cite{ICOMMA}, % the comma behaves as a punctuation character if it is followed by a space; % otherwise, it is treated as an ordinary character. % \item With \textsf{ncccomma} by Alexander I.~Rozhenko~\cite{NCC}, % the comma behaves as an ordinary character if it is followed by a digit % (without a space); otherwise, it is considered a punctuation character. % \end{itemize} % % It appears that this second approach is preferable because unlike with icomma, % you are not required to add a space after the comma when it's not followed by a digit; % however, \textsf{ncccomma} poses several compatibility issues, % especially when used with \textsf{babel} % in conjunction with \textsf{numprint}~\cite{NUMP} and its \texttt{autolanguage} option % (at least for certain languages such as French and Spanish). % Another issue with \textsf{ncccomma} is that compiling with \LuaLaTeX\ or \XeLaTeX\ % fails when using \textsf{unicode-math} and "\setmathfont". % % Let it be noted that a code proposed by Claudio Beccari~\cite{BECC}, % similar to that of \textsf{ncccomma}, presents the same type of issues. % % \medskip % Therefore, we propose a new package, functionally identical to % \textsf{ncccomma} but with lighter code, and without the % aforementioned incompatibilities. % % \section{Bugs and problems} % % When \textsf{unicode-math} is used, it must be loaded \emph{before} % \textsf{decimalcomma}\footnote{This is also true for \textsf{icomma}.}. % % Here, we are revisiting what Walter Schmidt wrote in the documentation of his % \textsf{icomma} package: % % In case \textsf{decimalcomma} is used together with the \textsf{dcolumn} % package~\cite{DCOL}, a comma to be printed as the decimal separator % in a column of type \texttt{D} % is to be specified as "{\mathord\mathcomma}", rather than "{,}", % since the latter leads to an error. % For instance: % \centeredline{"\begin{tabular}{... D{,}{\mathord\mathcomma}{2} ...}"} % % \medskip % Note that specifying the comma as the related input character works as usual. % Generally, since the \textsf{decimalcomma} package makes the comma ‘active’, % further problems are not unlikely. % % \StopEventually{} % % \section{Implementation} % % This first piece of code aims to generate an appropriate error message, if you load % \textsf{unicode-math} \emph{after} \textsf{decimalcomma}. % To achieve this, first we check if \textsf{unicode-math} has been loaded before. % In that case, we do nothing. % Else, at the end of the preamble, when all the packages have been loaded, % we perform a new verification. If \textsf{unicode-math} has been loaded at that time, % the appropriate error message is displayed. % % Without this code, the compilation would produce an error message mentioning % a problem on "\futurelet", incomprehensible for the novice. % % \begin{macrocode} \@ifpackageloaded{unicode-math}{}{ \AtBeginDocument{% \@ifpackageloaded{unicode-math}{ \PackageError{decimalcomma}{decimalcomma must be loaded after unicode-math}{If you didn't load decimalcomma yourself, check which package uses it.} }{} } } % \end{macrocode} % We have taken up Walter Schmidt's code for looking up the next character, % and define the comma as active in math mode, % but with an execution loop to test all the digits from 0 to 9 instead of "\space". % We could have also used ten nested "\if" \ldots "\else" \ldots "\fi" structures % and that works very well. % %We chose to directly load \textsf{icomma} instead of transcribing % the beginning portion of its code. % This avoids potential conflicts with an extension % that also uses \textsf{icomma}\footnote{The loading of \textsf{icomma} ensures also % proper functioning when using \textsf{babel-french} and \textsf{numprint} % with its \texttt{autolanguage} option % (an issue that does not arise with \textsf{babel-spanish}, for example).}. % \begin{macrocode} \RequirePackage{icomma} % \end{macrocode} % % First we introduce what \textsf{icomma} does. % At |\begin{document}|, the original "\mathcode" of the comma is stored, % in the |\mathcomma| macro, and then the comma is defined as active in math mode. % The active comma checks the next input character. % \begin{verbatim} %\AtBeginDocument{% % \mathchardef\mathcomma\mathcode`\,% % \mathcode`\,="8000 % %} %{\catcode`,=\active % \gdef,{\futurelet\@let@token\sm@rtcomma} %} % \end{verbatim} % % Then \textsf{icomma} defines the |\sm@rtcomma| macro, but this macro % is redefined here to match the expected behavior. % If the next character is in the list 0123456789, % the active comma returns |\mathord| with the saved |\mathcomma|, % so that no space will be added after the comma. % Otherwise, |\mathcomma| is returned without |\mathord|, thus the comma behaves % by default as a |\mathpunct|. % Note that |\@decimal@digit| must be called before |\@let@token| after |\ifx|. % \begin{macrocode} \def\sm@rtcomma{% \@tfor\decimal@digit:=0123456789% \do{\expandafter\ifx\decimal@digit\@let@token\mathord% \@break@tfor\fi}% \mathcomma} % \end{macrocode} % Special thanks to J.F. Burnol for his insightful remarks and valuable advice % and let us pay tribute to Walter Schmidt, who is regrettably deceased. % % \begin{thebibliography}{5} % % \begin{raggedright} % \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}. % Walter Schmidt, CTAN, v2.0 2002/03/10. % \bibitem{NCC} \emph{The \textsf{ncccomma} package}. Alexander I.~Rozhenko, % CTAN, v1.0 2005/02/10. % \bibitem{BECC} \emph{Intelligent commas}. Claudio Beccari, The Prac\TeX\ Journal, % 2011, No.\@1. % \url{https://tug.org/pracjourn/2011-1/beccari/Intcomma.pdf} % \bibitem{NUMP} \emph{The \textsf{numprint} package}. Harald Harders, % CTAN, v1.39 2012/08/20. % \bibitem{DCOL} \emph{The \textsf{dcolumn} package}, David Carlisle. % CTAN, v1.06 2023/07/08. % \end{raggedright} % \end{thebibliography} % \Finale \endinput