% \iffalse meta-comment % % File: linguistix-marathi.dtx % % ---------------------------------------------------------- % The LaTeX bundle LinguisTiX v0.6a % Copyright © 2022, 2023, 2024, 2025 निरंजन % % This program is free software: you can redistribute it % and/or modify it under the terms of the GNU General Public % License as published by the Free Software Foundation, % either version 3 of the License, or (at your option) any % later version. % % This program is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied % warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR % PURPOSE. See the GNU General Public License for more % details. % % You should have received a copy of the GNU General Public % License along with this program. If not, see % . % ---------------------------------------------------------- % % \fi % \iffalse %<*driver> \documentclass{l3doc} \usepackage{linguistix} \usepackage{xcolor} \usepackage{fontawesome5} \usepackage[sc]{gfdl} \usepackage[verbose=silent]{microtype} \usepackage{cleveref} \usepackage{hyperxmp} \makeatletter \def\@xobeysp{\hphantom{X}}% \makeatother \linguistix{old style one} \loadlanguages{british,marathi} \setquotestyle{british} \colorlet{lngxredcolor}{red!50!black} \colorlet{lngxgreencolor}{green!50!black} \colorlet{lngxbluecolor}{blue!50!black} \urlstyle{tt} \hypersetup{% unicode,% colorlinks,% linkcolor = {lngxredcolor}, citecolor = {lngxgreencolor}, urlcolor = {lngxbluecolor}, pdftitle = {linguistix-marathi},% pdfauthor = {निरंजन},% pdfsubject = {% मराठी (Marathi) with LinguisTiX.% },% pdfcreator = {निरंजन},% pdfkeywords = {Linguistics, LaTeX},% pdfcopyright = {% The LaTeX bundle linguistix\textLF Copyright © 2022, 2023, 2024, 2025 निरंजन\textLF Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ‘GNU Free Documentation License’.% },% pdflicenseurl = {% https://www.gnu.org/licenses/fdl-1.3.txt% }% }% \gfdlcopyrightholders{% \texorpdfstring{% {% निरंजन% } (% \href{mailto:hi.niranjan@pm.me}{% \ttfamily hi.niranjan@pm.me% }% )% }{% निरंजन% }% } \gfdlcopyrightableyears{2022, 2023, 2024, 2025} \gfdlcopyrightdescription{The \lngxpkg\ bundle} \colorlet{lngxpurplecolor}{blue!50!red} \def\lngxtval{% \begingroup \color{lngxredcolor} true% \endgroup \,|\,false% } \def\lngxfval{% true% \begingroup \color{lngxredcolor} \,|\,false% \endgroup } \ExplSyntaxOn \msg_redirect_name:nnn { l3doc } { foreign-internal } { none } \ExplSyntaxOff \begin{document} \DocInput{\jobname.dtx} \end{document} % % \fi % \title{मराठी\,--\,\lngxmarathilogo} % \author{निरंजन} % \date{^^A % \today\ (v0.6a)\\[1ex]^^A % {^^A % \small\faIcon{home}\quad % \url{^^A % https://ctan.org/pkg/linguistix^^A % }\\[0.5ex]^^A % \small\faIcon{git-alt}\quad % \url{^^A % https://puszcza.gnu.org.ua/projects/linguistix^^A % }\\[0.5ex]^^A % \small\faIcon[regular]{comments}\quad % \url{^^A % https://matrix.to/\#/\#linguistix:matrix.org^^A % }^^A % }^^A % } % % \maketitle % \begin{implementation} % \noindent I initialise the package with basic information. % \begin{macrocode} %<*marathi> \ProvidesExplPackage{linguistix-marathi} {2025-12-22} {v0.6a} {मराठी (Marathi)} % \end{macrocode} % Average height of Marathi conjuncts could be more than % that of Latin letters with descenders. This requires minor % adjustments in the baseline stretch. To do it uniformly % for footnotes also, I use the \pkg{setspace} package (if % not loaded already). % \begin{macrocode} \IfPackageLoadedF { setspace } { \RequirePackage { setspace } } % \end{macrocode} % We need to set the spacing between lines and words for % which I use internal floating point numbers. They are % declared here. % \begin{macrocode} \fp_gzero_new:N \g_मराठी_शब्दांतील_अंतर_fp \fp_gzero_new:N \g_मराठी_ओळींतील_अंतर_fp % \end{macrocode} % This macro grabs an argument and passes it to the key % |शब्दांतील अंतर| which is used to set the inter-word space % for Marathi. % \begin{macrocode} \cs_new_protected:Npn \मराठी_शब्दांतील_अंतर:n #1 { \lngx_set_keys:n { शब्दांतील~ अंतर = { #1 } } } \cs_gset_eq:NN \शब्दांतीलअंतर \मराठी_शब्दांतील_अंतर:n % \end{macrocode} % This macro grabs an argument, (g-)sets it as the value of % \cs{g_मराठी_ओळींतील_अंतर_fp} and resets the baseline stretch % with \cs{setstretch} command. If the current class is % \cls{memoir}, then there is a method to do that without % any package. I use that. % \begin{macrocode} \cs_new_protected:Npn \मराठी_ओळींतील_अंतर:n #1 { \tl_gset:Nn \g_मराठी_ओळींतील_अंतर_tl { #1 } \IfClassLoadedTF { memoir } { \setSingleSpace { \fp_use:N \g_मराठी_ओळींतील_अंतर_fp } \SingleSpacing } { \setstretch { \fp_use:N \g_मराठी_ओळींतील_अंतर_fp } } } \cs_gset_eq:NN \ओळींतीलअंतर \मराठी_ओळींतील_अंतर:n % \end{macrocode} % Here I define two keys for adjusting the space between % words and lines respectively. Their defaults are also set % here. % \begin{macrocode} \keys_define:nn { मराठी } { शब्दांतील~ अंतर .fp_gset:N = \g_मराठी_शब्दांतील_अंतर_fp, शब्दांतील~ अंतर .initial:n = { 1.25 }, ओळींतील~ अंतर .code:n = { \मराठी_ओळींतील_अंतर:n { #1 } } } % \end{macrocode} % The \pkg{babel} package defines |\extrasxxxx| commands for % languages where the additional code that should go with a % particular language (|xxxx| in this case) is set. The % |\addto| command is used for appending to the same. I % start with defining additional macros for Marathi. % \begin{macrocode} \addto { \extrasmarathi } { % \end{macrocode} % I have added the command for using the socket for native % numbering. It will pickup its value from the current % assignment of the plugs and produce the results % accordingly. % \begin{macrocode} \socket_use:n { lngx / native-numbering } % \end{macrocode} % By default, \LaTeX\ prints roman numeral (in capital) as % part numbers. They are not suitable for Marathi. Thus we % change them to arabic instead. % \begin{macrocode} \cs_set:Npn \thepart { \lngx_counter:n { part } } % \end{macrocode} % The default \LaTeX\ produces Latin numerals, roman (small % and capital both) alphabets and a-z alphabets with % enumerate at different levels of nesting. In Marathi, both % are irrelevant. Thus I renew all of the concerned commands % and change them to print Marathi numbers. Since Marathi % doesn’t have much variety available for counters, I have % chosen a simpler style, i.e. 1, 1.1, 1.1.1 and 1.1.1.1. % \begin{macrocode} \cs_set:Npn \theenumi { \lngx_counter:n { enumi } } \cs_set:Npn \theenumii { \lngx_counter:n { enumi } . \lngx_counter:n { enumii } } % \end{macrocode} % A period is added after each ‘label’ in enumerate. In % default \LaTeX, the label for second level enumeration is % printed inside brackets. We don’t need it in Marathi. So % I change the \cs{labelenumii} command and add a period. % It is not added for the first level because that’s % \LaTeX-default too. Similarly, this is extended to all the % other levels. % \begin{macrocode} \cs_set:Npn \labelenumii { \theenumii . } \cs_set:Npn \theenumiii { \lngx_counter:n { enumi } . \lngx_counter:n { enumii } . \lngx_counter:n { enumiii } } \cs_set:Npn \labelenumiii { \theenumiii . } \cs_set:Npn \theenumiv { \lngx_counter:n { enumi } . \lngx_counter:n { enumii } . \lngx_counter:n { enumiii } . \lngx_counter:n { enumiv } } \cs_set:Npn \labelenumiv { \theenumiv . } % \end{macrocode} % The \pkg{expex} package has an independent mechanism of % defining and using counters. I define a set called % |देवनागरी| here and make it the default when Marathi is % used. Note that this change will go with the % \cs{lngx_misc_reset:} command. Refer to |linguistix.pdf| % for more information on this. % \begin{macrocode} \IfPackageLoadedT { expex } { \definelabeltype { देेवनागरी } { labelgen = { list }, labellist = { अ, आ, इ, ई, उ, ऊ, ए, ऐ, ओ, औ, अं, अः, ॲ, ऋ, ॠ, ऌ, ॡ, ऑ }, labelformat = {A.}, fullrefformat = {XA}, labelalign = {left}, labelwidth = {1.5em} } \lingset { labeltype = { देवनागरी } } } % \end{macrocode} % Marathi doesn’t distinguish between Italic and Upright. So % I redefine \cs{emph} to produce the argument in bold % instead. This also goes when \cs{lngx_misc_reset:} is % used. % \begin{macrocode} \cs_gset_eq:NN \emph \textbf } % \end{macrocode} % With the following code, I add the date conversion % settings and the parameters to |onchar| command inside % \cs{babelprovide}. This is done only if Marathi is the % main language of the document. I also set the numbering % style to |strict|ly native if Marathi is the main % language. % \begin{macrocode} \tl_if_eq:NnTF \g_lngx_main_language_tl { marathi } { \lngx_set_keys:n { native~ numbering = { strict } } \babelprovide [ onchar = { ids~ fonts }, date.gregorian / date.long = { [d|digits]~ [MMMM],~ [y|digits] }, % \end{macrocode} % We need numbers in words when in frontmatter. They are % added in a special counter |आकडे| and used with a hook for % frontmatter. The settings are reset after mainmatter is % started. % \begin{macrocode} counters / आकडे = एक~ दोन~ तीन~ चार~ पाच~ सहा~ सात~ आठ~ नऊ~ दहा~ अकरा~ बारा~ तेरा~ चौदा~ पंधरा~ सोळा~ सतरा~ अठरा~ एकोणीस~ वीस~ एकवीस~ बावीस~ तेवीस~ चोवीस~ पंचवीस~ सव्वीस~ सत्तावीस~ अठ्ठावीस~ एकोणतीस~ तीस~ एकतीस~ बत्तीस~ तेहतीस~ चौतीस~ पस्तीस~ छत्तीस~ सदतीस~ अडतीस~ एकोणचाळीस~ चाळीस~ एकेचाळीस~ बेचाळीस~ त्रेचाळीस~ चव्वेचाळीस~ पंचेचाळीस~ शेहेचाळीस~ सत्तेचाळीस~ अठ्ठेचाळीस~ एकोणपन्नास~ पन्नास~ एकावन्न~ बावन्न~ त्रेपन्न~ चौपन्न~ पंचावन्न~ छप्पन्न~ सत्तावन्न~ अठ्ठावन्न~ एकोणसाठ~ साठ~ एकसष्ट~ बासष्ट~ त्रेसष्ट~ चौसष्ट~ पासष्ट~ सहासष्ट~ सदुष्ट~ अडुसष्ट~ एकोणसत्तर~ सत्तर~ एकाहत्तर~ बाहत्तर~ त्र्याहत्तर~ चौऱ्याहत्तर~ पंचाहत्तर~ शाहत्तर~ सत्त्याहत्तर~ अठ्ठ्याहत्तर~ एकोणऐंशी~ ऐंशी~ एक्याऐंशी~ ब्याऐंशी~ त्र्याऐंशी~ चौऱ्याऐंशी~ पंच्याऐंशी~ श्याऐंशी~ सत्त्याऐंशी~ अठ्ठ्याऐंशी~ एकोणनव्वद~ नव्वद~ एक्याण्णव~ ब्याण्णव~ त्र्याण्णव~ चौऱ्याण्णव~ पंचाण्णव~ शहाण्णव~ सत्त्याण्णव~ अठ्याण्णव~ नव्याण्णव~ शंभर ] { marathi } \hook_gput_code:nnn { cmd / frontmatter / after } { . } { \cs_set:Npn \thepage { \localecounter { आकडे } { page } } } \hook_gput_code:nnn { cmd / mainmatter / after } { . } { \cs_set:Npn \thepage { \marathicounter { page } } } % \end{macrocode} % The |\arraystretch| command needs to be reset to a larger % value so that it can incorporate Marathi’s vertical % conjuncts. % \begin{macrocode} \cs_set:Npn \arraystretch { 1.2 } % \end{macrocode} % I have used only the bold and light variant of Mukta for % all the fonts. In sans and mono, the width of the New % Computer Modern fonts is slightly more, so I use the % ‘regular’ variant of Mukta there. Otherwise, Mukta-Light % is a better match for New Computer Modern Book. % \begin{macrocode} \clist_map_inline:nn { upright, italic, slanted, swash } { \lngx_set_keys:n { text~ #1 = { Mukta - Light . ttf }, text~ bold~ #1 = { Mukta - Bold . ttf }, text~ sans~ #1 = { Mukta - Regular . ttf }, text~ sans~ bold~ #1 = { Mukta - Bold . ttf }, text~ mono~ #1 = { Mukta - Regular . ttf }, text~ mono~ bold~ #1 = { Mukta - Bold . ttf } } } % \end{macrocode} % Using the |text extra features| key, I declare % \textsc{nfss} families called |देवनागरी_main|, % |देवनागरी_sans|, |देवनागरी_mono| that will be used % later. Also, I use the key for interword-spacing here. % \begin{macrocode} \lngx_set_keys:n { text~ extra~ features = { NFSSFamily = { देवनागरी_main }, WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp } }, text~ sans~ extra~ features = { NFSSFamily = { देवनागरी_sans }, WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp } }, text~ mono~ extra~ features = { NFSSFamily = { देवनागरी_mono }, WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp } } } } { % \end{macrocode} % In the false branch (i.e., if Marathi is not the main % language), I use the macros that set the ‘other’ % (non-main) fonts for Marathi. The fonts are the same, but % the key-value interface is not available, so the code is % slightly verbose. Before that we load the |onchar| option % with |ids| and |fonts| options. % \begin{macrocode} \babelprovide [ onchar = { ids~ fonts } ] { marathi } \lngx_other_main_font:nnn { marathi } { WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp }, NFSSFamily = { देवनागरी_main }, UprightFont = { Mukta - Light . ttf }, ItalicFont = { Mukta - Light . ttf }, BoldFont = { Mukta - Bold . ttf }, BoldItalicFont = { Mukta - Bold . ttf }, SlantedFont = { Mukta - Light . ttf }, BoldSlantedFont = { Mukta - Bold . ttf }, SwashFont = { Mukta - Light . ttf }, BoldSwashFont = { Mukta - Bold . ttf }, SmallCapsFont = { Mukta - Light . ttf } } { Mukta - Light . ttf } \lngx_other_sans_font:nnn { marathi } { WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp }, NFSSFamily = { देवनागरी_sans }, UprightFont = { Mukta - Regular . ttf }, ItalicFont = { Mukta - Regular . ttf }, BoldFont = { Mukta - Bold . ttf }, BoldItalicFont = { Mukta - Bold . ttf }, SlantedFont = { Mukta - Regular . ttf }, BoldSlantedFont = { Mukta - Bold . ttf }, SwashFont = { Mukta - Regular . ttf }, BoldSwashFont = { Mukta - Bold . ttf }, SmallCapsFont = { Mukta - Regular . ttf } } { Mukta - Regular . ttf } \lngx_other_mono_font:nnn { marathi } { WordSpace = { \fp_use:N \g_मराठी_शब्दांतील_अंतर_fp }, NFSSFamily = { देवनागरी_mono }, UprightFont = { Mukta - Regular . ttf }, ItalicFont = { Mukta - Regular . ttf }, BoldFont = { Mukta - Bold . ttf }, BoldItalicFont = { Mukta - Bold . ttf }, SlantedFont = { Mukta - Regular . ttf }, BoldSlantedFont = { Mukta - Bold . ttf }, SwashFont = { Mukta - Regular . ttf }, BoldSwashFont = { Mukta - Bold . ttf }, SmallCapsFont = { Mukta - Regular . ttf } } { Mukta - Regular . ttf } } % \end{macrocode} % In order to allow Devanagari in math mode, I use the % following code. Since this setting has to be done after % the initialisation, I use a hook for lazy loading. % \begin{macrocode} \hook_gput_code:nnn { begindocument / end } { . } { \DeclareSymbolFont { देवनागरी } { TU } { देवनागरी_main } { m } { n } \int_step_inline:nnn { "0900 } { "097F } { \Umathcode #1 = "0 ~ \use:c { symदेवनागरी } ~ #1 } } % % \end{macrocode} % \end{implementation} % \selectlanguage{english} % \Finale