% \iffalse meta-comment % % File: marathi.dtx % --------------------------------------------------------------------------- % आज्ञासंच: marathi % लेखक: निरंजन % माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी. % दुवा: https://gitlab.com/niranjanvikastambe/marathi % अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues % परवाना: लाटेक् प्रकल्प परवाना. आवृत्ती १.३सी किंवा त्यापुढील. % --------------------------------------------------------------------------- % हे काम लाटेक् प्रकल्प परवान्याच्या अटींचे पालन करून वितरित केले जाऊ शकते % तसेच सुधारले जाऊ शकते. % % The latest version of this license is in % % http://www.latex-project.org/lppl.txt. % % हा आज्ञासंचाची लाटेक् प्रकल्पाच्या नियमांनुसार देखरेख केली जात आहे. % % ह्या आज्ञासंचाचा लेखक व पालक निरंजन आहे. % % ह्या कामात marathi.dtx, marathi.ins तसेच त्यांपासून निर्माण केलेली % marathi.sty ही धारिका समाविष्ट आहे. % --------------------------------------------------------------------------- % % \fi % \iffalse %<*internal> \iffalse % %<*readme> आज्ञासंच: marathi लेखक: निरंजन आवृत्ती: ०.१ (२५ मे, २०२०) माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी. दुवा: https://gitlab.com/niranjanvikastambe/marathi अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues परवाना: लाटेक् प्रकल्प परवाना. आवृत्ती १.३सी किंवा त्यापुढील. अधिक माहितीकरिता marathi.dtx ही बीजधारिका पाहा. -------------------------------------------------------------------------- Package: marathi Author: Niranjan Version: 1.0 (25 May, 2020) Description: For conveniently typesetting Marathi language with LuaLaTeX and XeLaTeX. Repository: https://gitlab.com/niranjanvikastambe/marathi Bug tracker: https://gitlab.com/niranjanvikastambe/marathi/-/issues License: The LaTeX Project Public License v1.3c or later. % %<*internal> \fi % %<*driver|package> \def\marathiPackageName{marathi} \def\marathiPackageVersion{१.०} \def\marathiPackageDate{२५ मे, २०२०} \def\marathiPackageDescription{लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.} % %<*driver> \documentclass[10pt]{l3doc} \usepackage{xltxtra} \usepackage{fontspec} \usepackage{xcolor} \usepackage{hyperref} \hypersetup{ colorlinks, linkcolor={red!50!black}, citecolor={blue!50!black}, urlcolor={blue!80!black} } \usepackage[sort=use]{glossaries} \input{glossaries.gls} \setmainfont[Script=Devanagari,Mapping=devanagarinumerals]{Shobhika} \setmonofont[Script=Devanagari]{Mukta} \newfontfamily{\mukta}[Script=Devanagari]{Mukta} \usepackage{minted} \usemintedstyle{bw} \usepackage{fontawesome5} \renewcommand{\glossaryname}{संज्ञासूची} \renewcommand{\abstractname}{सारांश} \renewcommand{\contentsname}{अनुक्रमणिका} \renewcommand{\baselinestretch}{1.5} \makeglossaries \RecordChanges \begin{document} \DocInput{\marathiPackageName.dtx} \end{document} % % \fi % % % % \title{मराठी} % \author{निरंजन} % \date^^A % {^^A % आवृत्ती \marathiPackageVersion\ \textemdash\ \marathiPackageDate\\[1ex]^^A % {\small\faIcon{gitlab}\quad\url{https://gitlab.com/niranjanvikastambe/marathi}}^^A % } % % \maketitle % % \begin{abstract} % \XeLaTeX\ चा वापर करून मराठीत \gls{टंकजुळणी}\footnote{ह्या दस्तऐवजात लाटेक्-मध्ये प्रचलित असणाऱ्या अनेक इंग्रजी संज्ञांसाठी पर्यायी मराठी संज्ञा वापरण्यात आल्या आहेत, हे सर्व प्रयोग तुलनेने नवे असल्याने ह्याच दस्तऐवजातील शेवटच्या संज्ञासूचीत सर्व संज्ञांचे इंग्रजी अर्थ दिले आहेत.} शक्य आहे, परंतु सुलभ नाही. \LaTeX\ सह मराठीत टंकजुळणी करताना आपली \gls{बीजधारिका} अनेक आज्ञांनी भरून जाते. हा \gls{आज्ञासंच} अशा सर्व उपयुक्त आज्ञा आधीच लिहून ठेवतो. त्यामुळे नव्या वापरकर्त्यांना त्या सर्व आज्ञा वेगळ्या शिकाव्या लागत नाहीत. शिवाय blindtext ह्या आज्ञासंचाप्रमाणे मराठीकरिता नमुना मजकूर उत्पन्न करण्यासाठीची सोय करण्यात आली आहे. \LuaLaTeX\ हा अत्याधुनिक \gls{चालक} वापरल्यास अंक रोमी लिपीत येतात, ती अडचणदेखील ह्या आज्ञासंचात सोडवण्यात आली आहे. % \end{abstract} % % \begin{documentation} % \section{प्रस्तावना} % लाटेक्-मध्ये मराठीचा वापर करताना सर्वात महत्त्वाची गरज म्हणजे देवनागरी लिपी नीट दिसणे. लाटेक् विकसित झाले तेव्हा युनिकोड ही प्रणाली अस्तित्वात नसल्याने टेक्, लाटेक् ह्यांसारख्या चालकांसह युनिकोड अक्षरे वापरता येत नाहीत, परंतु लवकरच युनिकोड अक्षरांचा वापर लाटेक्-मध्ये करता यावा ह्याकरिता \XeLaTeX\ (झी-लाटेक्) तसेच \LuaLaTeX\ (लुआ-लाटेक्) ह्या नव्या चालकांचा विकास झाला. {\mukta fontspec} सदृश आज्ञासंचासह एखादा युनिकोड-आधारित \gls{टंक} वापरणे व युनिकोड-मजकूर थेट झी-लाटेक् अथवा लुआ-लाटेक्-सोबत चालवणे हे ह्या नव्या चालकांचे प्रमुख उद्दिष्ट होते, परंतु हे काम अतिशय गुंतागुंतीचे होते. २०२० चे \gls{टेक्-वितरण} येईपर्यंत व त्यात हर्फ़बझ नावाची नवी आज्ञावली येेईपर्यंत लुआ-लाटेक्-ला देवनागरी हाताळता आलेच नाही. झी-लाटेक्-सह मात्र देवनागरी व्यवस्थित दिसणे शक्य झाले. % \subsection{देवनागरी दिसण्यासाठी टाकावयाच्या आज्ञा} % देवनागरी योग्य तऱ्हेने दिसण्यासाठी काही आज्ञांचा वापर करणे अनिवार्य होते. देवनागरी लिपी दस्तऐवजात दाखवण्यासाठी लागणाऱ्या किमान आज्ञा पुढीलप्रमाणे. % \begin{minted}[linenos]{latex} % % !TEX TS-program = xelatex % \documentclass{article} % \usepackage{fontspec} % \setmainfont{Shobhika} % अथवा कोणताही युनिकोड-आधारित देवनागरी टंक % % \begin{document} % नमस्कार % \end{document} % \end{minted} % % ह्या उदाहरणाने देवनागरी दिसत असले तरी फलित हवे तसे दिसत नाही. जोडाक्षरे तुटक दिसतात. त्यासाठी \mintinline{latex}{\setmainfont} ह्या आज्ञेस {\mukta Script=Devanagari} असे \gls{प्राचल} द्यावे लागते. पुढील अडचण म्हणजे लाटेक् आपोआप पुरवणारे आकडे (उदा. पृष्ठक्रमांक, तळटिपांचे क्रमांक) देवनागरीत न येणे. त्याकरिता ह्या आज्ञेस {\mukta Mapping=devanagarinumerals} असे आणखी एक प्राचल द्यावे लागते. इतके करूनही भाषेचा प्रश्न उरतोच! उदा. लाटेक्-ला इंग्रजीव्यतिरिक्त इतर कोणतीही भाषा कळत नसल्यामुळे मूलभूत इंग्रजी शब्दांची भाषांतरे पुरवणारे बेबल अथवा पॉलिग्लॉसिया ह्यांसारखे आज्ञासंच वापरून भाषा निवडावी लागते. रोहित होळकरांच्या \href{https://ctan.org/pkg/latex-mr?lang=en}{\mukta latex-mr} ह्या पुस्तिकेत ह्या सर्व अडचणींची तपशीलवार चर्चा झाली आहे. % सद्यपरिस्थितीत लाटेक्-चे किमान ज्ञान असलेल्या नव्या वापरकर्त्याला मराठी लिहिण्यासाठी हा सगळा प्रपंच करायला लावणे म्हणजे ज्या फांदीवर आपण बसलो आहोत तीच तोडण्यासारखे आहे. त्यामुळे कोणत्याही वापरकर्त्याला केवळ लाटेक्-च्या किमान ज्ञानासह \mintinline{latex}{\usepackage{marathi}} एवढी एक आज्ञा लिहून उत्तम देवनागरी टंकजुळणी करता यावी हा ह्या आज्ञासंचाचा उद्देश आहे. ह्या आज्ञासंचात केवळ दोन आज्ञांचा समावेश आहे. त्या पुढीलप्रमाणे. % \begin{function}{\नमुना} % नमुना ही आज्ञा सर्वप्रथम दिलेला \gls{लाटेक्-वर्ग} पाहते व त्यानुसार त्या वर्गाच्या किमान क्षमता दर्शवणारी एक फलित-धारिका निर्माण करते. उदाहरणादाखल {\mukta article, book, report, beamer व letter} ह्या लाटेक्-वर्गांसह \mintinline{latex}{\नमुना} ही आज्ञा चालवून पाहा. एकाच बीजधारिकेत केवळ लाटेक्-वर्ग बदलत असाल, तर लाटेक्-ने तयार केलेल्या \gls{साहाय्यक धारिका} काही वेळा अनपेक्षित अडचणी दाखवल्या जातात. जुनी माहिती शिल्लक असल्याने त्या दिल्या जातात. घाबरून न जाता, तीच धारिका दोनदा चालवावी. सर्व अडचणी सुटतात. % \end{function} % \begin{function}{\टंक} % \begin{syntax} % \cs{टंक} \marg{टंकाचे नाव} % \end{syntax} % ह्या आज्ञासंचात शोभिका हा टंक \gls{मूलटंक} म्हणून निवडून ठेवला आहे. परंतु तो बदलायचा असेल तर \mintinline{latex}{\टंक} ह्या आज्ञेची सोय करण्यात आली आहे. ह्या आज्ञेसह आपोआप देवनागरी टंकासाठी आवश्यक असणारी {\mukta Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals} ही प्राचले लिहून ठेवली आहेत. शिवाय \mintinline{latex}{\setmainfont{टंकाचे नाव}} ही आज्ञा नेहमीप्रमाणे चालतेच. % \end{function} % \end{documentation} % % \StopEventually{\PrintIndex} % % \begin{implementation} % \section*{आज्ञासंचाची घडण} % आता आपण आज्ञासंचाची घडण व त्यातील आज्ञांचा उपयोग लक्षात घेऊयात. % \begin{macrocode} %<@@=marathi> %<*package> % \end{macrocode} % \begin{macrocode} \ProvidesPackage{marathi} \NeedsTeXFormat{LaTeX2e} % \end{macrocode} % ह्या आज्ञांसह आज्ञासंचाची पायाभूत माहिती पुरवली. % \section{अंतर} % इंग्रजीमधली g, j, y अशी अक्षरे सोडली तर त्यांच्याहून जास्त खोली असणारा मजकूर त्या लिपीत आढळत नाही. देवनागरीचे तसे नाही. क ह्या अक्षराहून क्क थोडे अधिक खोल. ट्ट त्याहून थोडे अधिक व ट्टू त्याहून. अशा असमान उंचीच्या अक्षरांमुळे लाटेक् आपोआप दोन ओळींमधले अंतर बदलते व त्यामुळे ओळींची उंची असमान दिसू लागते. साध्या मजकुरातील ओळींप्रमाणेच कोष्टकेदेखील कुरूप दिसू लागतात. ह्यावर तोडगा काय? ह्याची दोन उत्तरे आहेत. पहिले उत्तर मराठीच्या आजवरच्या छपाईच्या इतिहासाचा अभ्यास करून, मराठी लिहिताना दोन ओळींमध्ये सोडले गेलेले सरासरी अंतर किती ह्याचे संशोधन करणे व त्यानुसार सर्व ठिकाणी ते अंतर लागू करणे. हा मार्ग सहज नाही. हा संशोधनाचा विषय आहे. त्याकरिता टंकाच्या आकाराचे व त्यानुसार बदलणाऱ्या ओळींच्या अंतराचे प्रमाणदेखील काळजीपूर्वक अभ्यासावे लागेल. हे सर्व करणे जरी इष्ट व आवश्यक असले तरी हे संशोधन पूर्ण होईस्तोवर सामान्य वापरकर्त्याला ज्या आज्ञा शिकण्याचे कष्ट पडतात ते कसे टाळावेत? त्यासाठी तात्पुरता तोडगा काढावा लागतो. तो असा की ओळींमधले अंतर दस्तऐवजाच्या सुरुवातीलाच वाढवून ठेवायचे. त्यासाठी पुढील आज्ञा वापरल्या जातात. % \noindent{\mukta\textbackslash renewcommand\{\textbackslash baselinestretch\}\{1.5\}}\par % \noindent{\mukta\textbackslash renewcommand\{\textbackslash arraystretch\}\{1.5\}} % आमच्या काही सहकाऱ्यांच्या मते हा निर्णय अतिशय उग्र आहे. त्यामुळे दस्तऐवजातील इतर काही ठिकाणच्या अंतरांवर सूक्ष्म परिणाम घडतात, जे टाळणे अधिक इष्ट. त्यांच्या ह्या मताचा विचार करून ह्या आज्ञासंचाकरिता \textbf{अंतर} नावाचे प्राचल विकसित केले आहे. हे प्राचल वापरल्यास आज्ञासंचातर्फे ओळींमधल्या अंतरात कोणताही हस्तक्षेप केला जात नाही. त्याकरिता पुढील आज्ञा समाविष्ट केल्या आहेत. % \begin{macrocode} \newif\ifmarathi@अंतर \marathi@अंतरfalse \DeclareOption{अंतर}{\marathi@अंतरtrue} \ProcessOptions \ifmarathi@अंतर \else \renewcommand{\baselinestretch}{1.5} \renewcommand{\arraystretch}{1.5} \fi % \end{macrocode} % \section{standalone लाटेक्-वर्ग} % standalone हा विशेष लाटेक्-वर्ग केवळ दस्तऐवजात दिलेल्या गोष्टींच्या आकाराचे फलित तयार करण्यासाठी वापरला जातो. उदा. article लाटेक्-वर्गात एखादे कोष्टक टाकले तर पानाच्या नेहमीच्या आकाराइतकी जागा कोष्टकाच्या आजूबाजूला सुटतेच. standalone लाटेक्-वर्गात मात्र तसे न होता केवळ कोष्टकाच्या आकाराइतके फलित निर्माण होते, परंतु ह्या वर्गास polyglossia आज्ञासंच व त्यातून पुरवली जाणारी भाषांतरे अनावश्यक आहेत, त्यामुळे ह्या लाटेक्-वर्गाकरिता केवळ fontspec हा आज्ञासंच वापरून, इतर सर्व वर्गांसाठी polyglossia हा आज्ञासंच वापरला आहे. त्यामुळे सर्व लाटेक्-वर्गांमध्ये भाषांतरेही मिळतात व standalone वर्गातदेखील आज्ञासंचामुळे कोणतीही अडचण येत नाही. पुढील आज्ञांनी हे साधले आहे. % \begin{macrocode} \@ifclassloaded{standalone}{\RequirePackage{fontspec}}{ \RequirePackage{polyglossia} \setdefaultlanguage{marathi} } % \end{macrocode} % \section{लुआ-लाटेक्} % लुआ-लाटेक् हा अत्याधुनिक चालक आता देवनागरीसाठी उपलब्ध झाला आहे. हर्फ़बझ ह्या लुआविशिष्ट आज्ञावलीच्या मदतीने देवनागरी व्यवस्थित दाखवली जात आहे. अशा वेळी तिचा पुरेपुर उपयोग का करू नये? परंतु वापर करताना सर्व अडचणी सुटायला हव्यात. लुआ-लाटेक् अजूनही अरबी आकड्यांऐवजी देवनागरी आकडे देत नाही. त्याकरिता पुढीलप्रकारे नवीन आज्ञा पुरवल्या आहेत. % \begin{macrocode} \RequirePackage{devanagaridigits} \def\@arabic#1{\expandafter\devanagaridigits\expandafter{\number#1}} % \end{macrocode} % अशा प्रकारे आकडे बदलल्याचा एक फायदा असा की जिथे अरबी आकडे लिहायचे आहेत तिथे तेदेखील लिहिता येतात. झी-लाटेक् व {\mukta Mapping=devanagarinumerals} वापरल्यामुळे अरबी आकडे वापरण्यासाठी नवा टंक वापरावा लागतो. % \section{टंकनिवड} % शोभिका हा लाटेक्-वितरणासह येणारा व देवनागरीची अतिशय चांगली टंकजुळणी करणारा टंक आहे. तो मूलटंक म्हणून ह्या आज्ञासंचाद्वारे निवडला जातो. अर्थात तो बदलण्याच्या सुविधेसकट. शिवाय कुठल्याही देवनागरी टंकाचे योग्य फलित दिसण्यासाठी {\mukta Script=Devanagari} हे प्राचल वापरावे लागते. ह्या व अशा इतर काही प्राचलांसकट शोभिकाची निवड करून ठेवणे व त्याशिवाय \mintinline{latex}{\टंक} ह्या आज्ञेद्वारे निवडल्या जाणाऱ्या टंकासदेखील तीच प्राचले वापरणे हे पुढील आज्ञांनी साधले जाते. % \begin{macrocode} \setmainfont[Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals]{Shobhika} \newcommand{\टंक}[1] {\setmainfont[Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals]{#1}} % \end{macrocode} % ह्या आज्ञांमुळे धारिका लुआ अथवा झी-लाटेक् ह्यांपैकी कोणत्याही चालकासह चालवता येते. {\mukta Renderer=Harfbuzz} हे प्राचल लुआविशिष्ट आहे. त्यामुळे झी-लाटेक् वापरल्यास ह्या प्राचलाकडे दुर्लक्ष केले जात आहे अशी एक सूचना आपल्याला मिळते. ही अडचण नसून केवळ एक सूचना आहे. झी-लाटेक्-प्रमाणेच आपणही तिच्याकडे दुर्लक्ष करावे! % \section{नमुना मजकूर} % मागे म्हटल्याप्रमाणे नमुना मजकूर तयार करण्यासाठी ह्या आज्ञासंचाचा वापर करता येतो, परंतु त्याकरिता लाटेक्-ला थोडी माहिती पुरवावी लागते. ही माहिती पुरवण्याचे विशिष्ट स्थान आहे. लाटेक्-मध्ये मूळ दस्तऐवज सुरू होण्यापूर्वी ही माहिती पुरविण्याकरिता \gls{आज्ञापीठ} असते. ह्या आज्ञासंचातर्फे पुरवल्या जाणाऱ्या नमुना मजकुराची माहिती पुढील आज्ञांनी पुरवली जाते. (तुमच्या दस्तऐवजात मराठी आज्ञासंचानंतर ती माहिती बदललीत तर आज्ञासंचातील माहिती आपोआप विसरली जाते.) letter ह्या लाटेक्-वर्गाकरिता लागणारी माहिती इतर वर्गांकरिता अप्रासंगिक असल्याने ती वेगळी पुरवली आहे. % \begin{macrocode} \title{नमुना} \author{लेखक} \@ifclassloaded{letter}{ \name{लेखक} \signature{सही} \address{ लेखकाचे नाव\\ अबक मार्ग\\ मुंबई\\ पिन क्र. ४०००००} \location{लेखकाचे स्थान} \telephone{दूरध्वनी - ०२० २२९५ २१०८} } % \end{macrocode} % निरनिराळ्या लाटेक्-वर्गांसाठी स्वतंत्र \gls{धारिका} पुढीलप्रमाणे पुरवल्या आहेत. % \begin{macrocode} \providecommand{\mrarticle}{\input{article}} \providecommand{\mrbook}{\input{book}} \providecommand{\mrreport}{\input{report}} \providecommand{\mrbeamer}{\input{beamer}} \providecommand{\mrletter}{\input{letter}} % \end{macrocode} % निवडलेल्या लाटेक्-वर्गांप्रमाणे धारिका निवडण्यासाठीच्या आज्ञा पुढीलप्रमाणे. % \begin{macrocode} \newcounter{क्र} \@ifclassloaded{article}{\setcounter{क्र}{1}}{} \@ifclassloaded{book}{\setcounter{क्र}{2}}{} \@ifclassloaded{report}{\setcounter{क्र}{3}}{} \@ifclassloaded{beamer}{\setcounter{क्र}{4}}{} \@ifclassloaded{letter}{\setcounter{क्र}{5}}{} \providecommand{\नमुना}{ \ifnum\value{क्र}=1\mrarticle\else \ifnum\value{क्र}=2\mrbook\else \ifnum\value{क्र}=3\mrreport\else \ifnum\value{क्र}=4\mrbeamer\else \mrletter\relax\fi\fi\fi\fi } % \end{macrocode} % beamer लाटेक्-वर्ग वापरताना serif ही टंकछटा निवडावी लागते, त्याशिवाय देवनागरी लिपी दिसत नाही. त्या आज्ञा पुढीलप्रमाणे भरल्या आहेत. % \begin{macrocode} \@ifclassloaded{beamer}{% \usefonttheme{serif}} \endinput % \end{macrocode} % \begin{macrocode} % % \end{macrocode} % \end{implementation} % \pagebreak % \printglossaries % % \Finale