% \iffalse meta-comment % % Copyright 1989-2005 Johannes L. Braams and any individual authors % listed elsewhere in this file. All rights reserved. % % This file is part of the Babel system. % -------------------------------------- % % It 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 2003/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainer of this work is Johannes Braams. % % The list of all files belonging to the Babel system is % given in the file `manifest.bbl. See also `legal.bbl' for additional % information. % % The list of derived (unpacked) files belonging to the distribution % and covered by LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % \fi % \CheckSum{1319} % % \iffalse % Tell the \LaTeX\ system who we are and write an entry on the % transcript. %<*dtx> \ProvidesFile{mongolian.dtx} % %\ProvidesLanguage{mongolian} [2008/03/30 v1.2 Mongolian support from the babel system] % %% File `mongolian.dtx' %% Babel package for LaTeX version 2e %% Copyright (C) 1989 - 2005 %% by Johannes Braams, TeXniek % %% Mongolian Language Definition File %% Copyright (C) 2007 - 2008 %% by Dorjgotov Batmunkh bataak at gmail.com % %% derived from the Russianb Language Definition File %% Copyright (C) 1995 - 2005 %% by Olga Lapko cyrtug at mir.msk.su %% Johannes Braams, TeXniek % adapted to the new T2 and X2 Cyrillic encodings % by Vladimir Volovich TeX at vvv.vsu.ru % Werner Lemberg wl at gnu.org % %% Please report errors to: J.L. Braams %% babel at braams.cistron.nl % %<*filedriver> \documentclass{ltxdoc} \usepackage[mongolian,english]{babel} \newcommand\TeXhax{\TeX hax} \newcommand\babel{\textsf{babel}} \newcommand\langvar{$\langle \it lang \rangle$} \newcommand\note[1]{} \newcommand\Lopt[1]{\textsf{#1}} \newcommand\file[1]{\texttt{#1}} \newcommand\pkg[1]{\texttt{#1}} \begin{document} \DocInput{mongolian.dtx} \end{document} % %\fi % \GetFileInfo{mongolian.dtx} % % % \section{The Mongolian language} % % The file \file{\filename}\footnote{The file described in this % section has version number \fileversion. % This file was derived from the \file{russianb.dtx} version 1.1r.} % defines all the language-specific macros for the Mongolian % language. It needs the file \file{cyrcod} for success documentation % with Mongolian encodings (see below). % % For this language the character |"| is made active. In % table~\ref{tab:mongolian-quote} an overview is given of its % purpose. % % \begin{table}[htb] % \begin{center} % \begin{tabular}{lp{8cm}} % \verb="|= & disable ligature at this position. \\ % |"-| & an explicit hyphen sign, allowing hyphenation % in the rest of the word. \\ % |"---| & Cyrillic emdash in plain text. \\ % |"--~| & Cyrillic emdash in compound names (surnames). \\ % |"--*| & Cyrillic emdash for denoting direct speech. \\ % |""| & like |"-|, but producing no hyphen sign % (for compund words with hyphen, e.g.\ |x-""y| % or some other signs as ``disable/enable''). \\ % |"~| & for a compound word mark without a breakpoint. \\ % |"=| & for a compound word mark with a breakpoint, allowing % hyphenation in the composing words. \\ % |",| & thinspace for initials with a breakpoint % in following surname. \\ % |"`| & for German left double quotes % (looks like ,\kern-0.08em,). \\ % |"'| & for German right double quotes (looks like ``). \\%'' % |"<| & for French left double quotes (looks like $<\!\!<$). \\ % |">| & for French right double quotes (looks like $>\!\!>$). \\ % \end{tabular} % \caption{The extra definitions made % by \file{mongolian}}\label{tab:mongolian-quote} % \end{center} % \end{table} % % The quotes in table~\ref{tab:mongolian-quote} (see, also % table~\ref{tab:russian-quote}) can also be typeset by using the commands % in table~\ref{tab:umore-quote} (see, also table~\ref{tab:rmore-quote}). % % \begin{table}[htb] % \begin{center} % \begin{tabular}{lp{8cm}} % |\cdash---| & Cyrillic emdash in plain text. \\ % |\cdash--~| & Cyrillic emdash in compound names (surnames). \\ % |\cdash--*| & Cyrillic emdash for denoting direct speech. \\ % |\glqq| & for German left double quotes % (looks like ,\kern-0.08em,). \\ % |\grqq| & for German right double quotes (looks like ``). \\%'' % |\flqq| & for French left double quotes (looks like $<\!\!<$). \\ % |\frqq| & for French right double quotes (looks like $>\!\!>$). \\ % |\dq| & the original quotes character (|"|). \\ % \end{tabular} % \caption{More commands which produce quotes, defined % by \babel}\label{tab:umore-quote} % \end{center} % \end{table} % % The French quotes are also available as ligatures `|<<|' and `|>>|' in % 8-bit Cyrillic font encodings (\texttt{LCY}, \texttt{X2}, \texttt{T2*}) % and as `|<|' and `|>|' characters in 7-bit Cyrillic font encodings % (\texttt{OT2} and \texttt{LWN}). % % The quotation marks traditionally used in Mongolian and Russian % languages were borrowed from other languages (e.g. French and German) % so they keep their original names. % % \StopEventually{} % % The macro |\LdfInit| takes care of preventing that this file is loaded % more than once, checking the category code of the \texttt{@} sign, etc. % % \begin{macrocode} %<*code> \LdfInit{mongolian}{captionsmongolian} % \end{macrocode} % % When this file is read as an option, i.e., by the |\usepackage| % command, \texttt{mongolian} will be an `unknown' language, in which case % we have to make it known. So we check for the existence of |\l@mongolian| % to see whether we have to do something here. % % \begin{macrocode} \ifx\l@mongolian\@undefined \@nopatterns{Mongolian} \adddialect\l@mongolian0 \fi % \end{macrocode} % % \begin{macro}{\latinencoding} % % We need to know the encoding for text that is supposed to be which is % active at the end of the \babel\ package. If the \pkg{fontenc} package % is loaded later, then\ldots too bad! % % \begin{macrocode} \let\latinencoding\cf@encoding % \end{macrocode} % % \end{macro} % % The user may choose between different available Cyrillic % encodings---e.g., \texttt{X2}, \texttt{LCY}, or \texttt{LWN}.\@ % Hopefully, \texttt{X2} will eventually replace the two latter encodings % (\texttt{LCY} and \texttt{LWN}).\@ If the user wants to use another % font encoding than the default (\texttt{T2A}), he has to load the % corresponding file \emph{before} \file{mongolian.sty}. This may be done % in the following way: % % \begin{verbatim} % % override the default X2 encoding used in Babel % \usepackage[cpctt,OT1]{fontenc} % \usepackage[english,mongolian]{babel} % \end{verbatim} % \unskip % % Note: for the Mongolian language, the \texttt{T2A} encoding is better than % \texttt{X2}, because \texttt{X2} does not contain Latin letters, and % users should be very careful to switch the language every time they % want to typeset a Latin word inside a Mongolian phrase or vice versa. % % We parse the |\cdp@list| containing the encodings known to \LaTeX\ in % the order they were loaded. We set the |\cyrillicencoding| to the % \emph{last} loaded encoding in the list of supported Cyrillic % encodings: \texttt{OT2}, \texttt{X2}, \texttt{T2B}, \texttt{T2A}, % \texttt{CTT}, \texttt{MNK}, \texttt{MLS}, if any. % % \begin{macrocode} \def\reserved@a#1#2{% \edef\reserved@b{#1}% \edef\reserved@c{#2}% \ifx\reserved@b\reserved@c \let\cyrillicencoding\reserved@c \fi} \def\cdp@elt#1#2#3#4{% \reserved@a{#1}{X2}% \reserved@a{#1}{T2B}% \reserved@a{#1}{T2A}} \cdp@list % \end{macrocode} % % Now, if |\cyrillicencoding| is undefined, then the user did not load % any of supported encodings. So, we have to set |\cyrillicencoding| to % some default value. We test the presence of the encoding definition % files in the order from less preferable to more preferable encodings. % We use the lowercase names (i.e., \file{lcyenc.def} instead of % \file{LCYenc.def}). % % \begin{macrocode} \ifx\cyrillicencoding\undefined \IfFileExists{x2enc.def}{\def\cyrillicencoding{X2}}\relax \IfFileExists{t2benc.def}{\def\cyrillicencoding{T2B}}\relax \IfFileExists{t2aenc.def}{\def\cyrillicencoding{T2A}}\relax % \end{macrocode} % % If |\cyrillicencoding| is still undefined, then the user seems not to % have a properly installed distribution. A fatal error. % % \begin{macrocode} \ifx\cyrillicencoding\undefined \PackageError{babel}% {No Cyrillic encoding definition files were found}% {Your installation is incomplete.\MessageBreak You need at least one of the following files:\MessageBreak \space\space x2enc.def, t2aenc.def, t2benc.def, x2enc.def.}% \else % \end{macrocode} % % We avoid |\usepackage[\cyrillicencoding]{fontenc}| because we don't % want to force the switch of |\encodingdefault|. % % \begin{macrocode} \lowercase \expandafter{\expandafter\input\cyrillicencoding enc.def\relax}% \fi \fi % \end{macrocode} % % \begin{verbatim} % \PackageInfo{babel} % {Using `\cyrillicencoding' as a default Cyrillic encoding}% % \end{verbatim} % \unskip % % \begin{macrocode} \DeclareRobustCommand{\Mongolian}{% \fontencoding\cyrillicencoding\selectfont \let\encodingdefault\cyrillicencoding \expandafter\set@hyphenmins\mongolianhyphenmins \language\l@mongolian}% \DeclareRobustCommand{\English}{% \fontencoding\latinencoding\selectfont \let\encodingdefault\latinencoding \expandafter\set@hyphenmins\englishhyphenmins \language\l@english}% \let\Mon\Mongolian \let\Eng\English \let\cyrillictext\Mongolian \let\cyr\Mongolian % \end{macrocode} % % Since the \texttt{X2} encoding does not contain Latin letters, we % should make some redefinitions of \LaTeX\ macros which implicitly % produce Latin letters. % % \begin{macrocode} \expandafter\ifx\csname T@X2\endcsname\relax\else % \end{macrocode} % % We put |\latinencoding| in braces to avoid problems with % |\@alph| inside minipages (e.g., footnotes inside minipages) where % |\@alph| is expanded and we get for example `|\fontencoding OT1|' % (|\fontencoding| is robust). % % \begin{macrocode} \def\@alph#1{{\fontencoding{\latinencoding}\selectfont \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else\@ctrerr\fi}}% \def\@Alph#1{{\fontencoding{\latinencoding}\selectfont \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\else\@ctrerr\fi}}% % \end{macrocode} % % Unfortunately, the commands |\AA| and |\aa| are not encoding dependent % in \LaTeX\ (unlike e.g., |\oe| or |\DH|). They are defined as |\r{A}| and % |\r{a}|. This leads to unpredictable results when the font encoding % does not contain the Latin letters `A' and `a' (like \texttt{X2}). % % \begin{macrocode} \DeclareTextSymbolDefault{\AA}{OT1} \DeclareTextSymbolDefault{\aa}{OT1} \DeclareTextCommand{\aa}{OT1}{\r a} \DeclareTextCommand{\AA}{OT1}{\r A} \fi % \end{macrocode} % % The following block redefines the character class of uppercase Greek % letters and some accents, if it is equal to 7 (variable family), to % avoid incorrect results if the font encoding in some math family does % not contain these characters in places of OT1 encoding. The code was % taken from |amsmath.dtx|. See comments and further explanation there. % % \begin{macrocode} % \begingroup\catcode`\"=12 % % uppercase greek letters: % \def\@tempa#1{\expandafter\@tempb\meaning#1\relax\relax\relax\relax % "0000\@nil#1} % \def\@tempb#1"#2#3#4#5#6\@nil#7{% % \ifnum"#2=7 \count@"1#3#4#5\relax % \ifnum\count@<"1000 \else \global\mathchardef#7="0#3#4#5\relax \fi % \fi} % \@tempa\Gamma\@tempa\Delta\@tempa\Theta\@tempa\Lambda\@tempa\Xi % \@tempa\Pi\@tempa\Sigma\@tempa\Upsilon\@tempa\Phi\@tempa\Psi % \@tempa\Omega % % some accents: % \def\@tempa#1#2\@nil{\def\@tempc{#1}}\def\@tempb{\mathaccent} % \expandafter\@tempa\hat\relax\relax\@nil % \ifx\@tempb\@tempc % \def\@tempa#1\@nil{#1}% % \def\@tempb#1{\afterassignment\@tempa\mathchardef\@tempc=}% % \def\do#1"#2{} % \def\@tempd#1{\expandafter\@tempb#1\@nil % \ifnum\@tempc>"FFF % \xdef#1{\mathaccent"\expandafter\do\meaning\@tempc\space}% % \fi} % \@tempd\hat\@tempd\check\@tempd\tilde\@tempd\acute\@tempd\grave % \@tempd\dot\@tempd\ddot\@tempd\breve\@tempd\bar % \fi % \endgroup % \end{macrocode} % % The user must use the \pkg{inputenc} package when any 8-bit Cyrillic % font encoding is used, selecting one of the Cyrillic input encodings. % We do not assume any default input encoding, so the user should % explicitly call the \pkg{inputenc} package by |\usepackage{inputenc}|. % We also removed |\AtBeginDocument|, so \pkg{inputenc} should be used % before \babel. % % \begin{macrocode} \@ifpackageloaded{inputenc}{}{% \def\reserved@a{LWN}% \ifx\reserved@a\cyrillicencoding\else \def\reserved@a{OT2}% \ifx\reserved@a\cyrillicencoding\else \PackageWarning{babel}% {No input encoding specified for Mongolian language} \fi\fi} % \end{macrocode} % % Now we define two commands that offer the possibility to switch between % Cyrillic and Roman encodings. % % \begin{macro}{\cyrillictext} % \begin{macro}{\latintext} % % The command |\cyrillictext| will switch from Latin font encoding to the % Cyrillic font encoding, the command |\latintext| switches back. This % assumes that the `normal' font encoding is a Latin one. These commands % are \emph{declarations}, for shorter peaces of text the commands % |\textlatin| and |\textcyrillic| can be used. % % \begin{macrocode} %\DeclareRobustCommand{\latintext}{% % \fontencoding{\latinencoding}\selectfont % \def\encodingdefault{\latinencoding}} \let\lat\latintext % \end{macrocode} % % \end{macro} % \end{macro} % % \begin{macro}{\textcyrillic} % \begin{macro}{\textlatin} % % These commands take an argument which is then typeset using the % requested font encoding. % \begin{macrocode} \DeclareTextFontCommand{\textcyrillic}{\cyrillictext} %\DeclareTextFontCommand{\textlatin}{\latintext} % \end{macrocode} % % \end{macro} % \end{macro} % % We make the \TeX % \begin{macrocode} %\ifx\ltxTeX\undefined\let\ltxTeX\TeX\fi %\ProvideTextCommandDefault{\TeX}{\textlatin{\ltxTeX}} % \end{macrocode} % and \LaTeX\ logos encoding independent. % \begin{macrocode} %\ifx\ltxLaTeX\undefined\let\ltxLaTeX\LaTeX\fi %\ProvideTextCommandDefault{\LaTeX}{\textlatin{\ltxLaTeX}} % \end{macrocode} % % The next step consists of defining commands to switch to (and % from) the Mongolian language. % % \begin{macro}{\captionsmongolian} % % The macro |\captionsmongolian| defines all strings used in the four % standard document classes provided with \LaTeX. The two commands |\cyr| % and |\lat| activate Cyrillic resp.\ Latin encoding. % \begin{macrocode} \addto\captionsmongolian{% \def\prefacename{{\cyr\CYROTLD\cyrm\cyrn\cyrotld\cyrh \ \cyry\cyrg}}% \def\refname{% {\cyr\CYRA\cyrsh\cyri\cyrg\cyrl\cyra\cyrs\cyra\cyrn \ \cyrn\cyro\cyrm}}% \def\abstractname{{\cyr\CYRU\cyrd\cyri\cyrr\cyrt\cyrg\cyra\cyrl}}% \def\bibname{{\cyr\CYRN\cyro\cyrm\cyrz\cyry\cyrishrt}}% \def\chaptername{{\cyr\CYRB\cyry\cyrl\cyrerev\cyrg}}% \def\appendixname{{\cyr\CYRH\cyra\cyrv\cyrs\cyrr\cyra\cyrl\cyrt}}% \@ifundefined{thechapter}% {\def\contentsname{{\cyr\CYRA\cyrg\cyru\cyru\cyrl\cyrg\cyra}}}% {\def\contentsname{{\cyr\CYRG\cyra\cyrr\cyrch\cyri\cyrg}}}% \def\listfigurename{{\cyr\CYRZ\cyru\cyrr\cyrg\cyri\cyrishrt\cyrn \ \cyrzh\cyra\cyrg\cyrs\cyra\cyra\cyrl\cyrt}}% \def\listtablename{% {\cyr\CYRH\cyry\cyrs\cyrn\cyrerev\cyrg\cyrt\cyri\cyrishrt\cyrn \ \cyrzh\cyra\cyrg\cyrs\cyra\cyra\cyrl\cyrt}}% \def\indexname{{\cyr\CYRT\cyro\cyrv\cyrhrdsn\cyryo\cyrg}}% \def\authorname{{\cyr\CYRN\cyrerev\cyrr\cyri\cyrishrt\cyrn \ \cyrh\cyrerev\cyrl\cyrh\cyrerev\cyrerev}}% \def\figurename{{\cyr\CYRZ\cyru\cyrr\cyra\cyrg}}% \def\tablename{{\cyr\CYRH\cyry\cyrs\cyrn\cyrerev\cyrg\cyrt}}% \def\partname{{\cyr\CYRH\cyrerev\cyrs\cyrerev\cyrg}}% \def\enclname{{\cyr\CYRI\cyrsh\cyrl\cyrerev\cyrl}}% \def\ccname{{\cyr\cyrerev.\cyrs.}}% \def\headtoname{}% \def\pagename{{\cyr\cyrt\cyra\cyrl}}% \def\seename{{\cyr\cyrt\cyra\cyrl\cyrd\ \cyry\cyrz}}% \def\alsoname{% {\cyr\cyrm\cyrotld\cyrn\ \cyrt\cyra\cyrl\cyrd\ \cyry\cyrz}}% \def\proofname{{\cyr\CYRB\cyra\cyrt\cyra\cyrl\cyrg\cyra\cyra}}% \def\glossaryname{{\cyr\CYRT\cyra\cyrishrt\cyrl\cyrb\cyra\cyrr}}% } % \end{macrocode} % % \end{macro} % % \begin{macro}{\datemongolian} % % The macro |\datemongolian| redefines the command |\today| to produce % Mongolian dates. % % \begin{macrocode} \def\datemongolian{% \def\today{\number\year~\cyro\cyrn\cyrery\ \ifcase\month\or 1-\cyrr\or 2-\cyrr\or 3-\cyrr\or 4-\cyrr\or 5-\cyrr\or 6-\cyrr\or 7-\cyrr\or 8-\cyrr\or 9-\cyrr\or 10-\cyrr\or 11-\cyrr\or 12-\cyrr\fi ~\cyrs\cyra\cyrr\cyrery\cyrn\ \number\day}} % \end{macrocode} % % \end{macro} % % \begin{macro}{\extrasmongolian} % % The macro |\extrasmongolian| will perform all the extra definitions % needed for the Mongolian language. The macro |\noextrasmongolian| % is used to cancel the actions of |\extrasmongolian|. % % The first action we define is to switch on the selected Cyrillic % encoding whenever we enter `mongolian'. % % \begin{macrocode} \addto\extrasmongolian{\cyrillictext} % \end{macrocode} % % When the encoding definition file was processed by \LaTeX\ the current % font encoding is stored in |\latinencoding|, assuming that \LaTeX\ uses % \texttt{T1} or \texttt{OT1} as default. Therefore we switch back to % |\latinencoding| whenever the Mongolian language is no longer `active'. % % \begin{macrocode} \addto\noextrasmongolian{\latintext} % \end{macrocode} % % Next we must allow hyphenation in the Mongolian words with apostrophe % whenever we enter `mongolian'. This solution was proposed by % Vladimir Volovich % % \begin{macrocode} \addto\extrasmongolian{\lccode`\'=`\'} \addto\noextrasmongolian{\lccode`\'=0} % \end{macrocode} % % \begin{macro}{\verbatim@font} % % In order to get both Latin and Cyrillic letters in verbatim text we % need to change the definition of an internal \LaTeX\ command somewhat: % % \begin{macrocode} %\def\verbatim@font{% % \let\encodingdefault\latinencoding % \normalfont\ttfamily % \expandafter\def\csname\cyrillicencoding-cmd\endcsname##1##2{% % \ifx\protect\@typeset@protect % \begingroup\UseTextSymbol\cyrillicencoding##1\endgroup % \else\noexpand##1\fi}} % \end{macrocode} % % \end{macro} % % The category code of the characters `\texttt{:}', `\texttt{;}', % `\texttt{!}', and `\texttt{?}' is made |\active| to insert a little % white space. % % For Mongolian (as well as for Russian and German) the \texttt{"} % character also is made active. % % Note: It is \emph{very} questionable whether the Russian typesetting % tradition requires additional spacing before those punctuation signs. % Therefore, we make the corresponding code optional. If you need it, % then define the \texttt{frenchpunct} docstrip option in % \file{babel.ins}. % % Borrowed from french. % Some users dislike automatic insertion of a space before % `double punctuation', and prefer to decide themselves whether a % space should be added or not; so a hook |\NoAutoSpaceBeforeFDP| % is provided: if this command is added (in file |mongolian.cfg|, or % anywhere in a document) |mongolian| will respect your typing, and % introduce a suitable space before `double punctuation' \emph{if % and only if} a space is typed in the source file before those % signs. % % The command |\AutoSpaceBeforeFDP| switches back to the % default behavior of |mongolian|. % % \begin{macrocode} %<*frenchpunct> \initiate@active@char{:} \initiate@active@char{;} % %<*frenchpunct|spanishligs> \initiate@active@char{!} \initiate@active@char{?} % \initiate@active@char{"} % \end{macrocode} % % The code above is necessary because we need extra active characters. % The character |"| is used as indicated in % table~\ref{tab:mongolian-quote}. % % We specify that the Mongolian group of shorthands should be used. % % \begin{macrocode} \addto\extrasmongolian{\languageshorthands{mongolian}} % \end{macrocode} % % These characters are `turned on' once, later their definition may % vary. % % \begin{macrocode} \addto\extrasmongolian{% % \bbl@activate{:}\bbl@activate{;}% % \bbl@activate{!}\bbl@activate{?}% \bbl@activate{"}} \addto\noextrasmongolian{% % \bbl@deactivate{:}\bbl@deactivate{;}% % \bbl@deactivate{!}\bbl@deactivate{?}% \bbl@deactivate{"}} % \end{macrocode} % % The \texttt{X2} and \texttt{T2*} encodings do not contain % |spanish_shriek| and |spanish_query| symbols; as a consequence, the % ligatures `|?`|' and `|!`|' do not work with them (these characters are % useless for Cyrillic texts anyway). But we define the shorthands to % emulate these ligatures (optionally). % % We do not use |\latinencoding| here (but instead explicitly use % \texttt{OT1}) because the user may choose \texttt{T2A} to be the primary % encoding, but it does not contain these characters. % % \begin{macrocode} %<*spanishligs> \declare@shorthand{mongolian}{?`}{\UseTextSymbol{OT1}\textquestiondown} \declare@shorthand{mongolian}{!`}{\UseTextSymbol{OT1}\textexclamdown} % % \end{macrocode} % % \begin{macro}{\mongolian@sh@;@} % \begin{macro}{\mongolian@sh@:@} % \begin{macro}{\mongolian@sh@!@} % \begin{macro}{\mongolian@sh@?@} % % We have to reduce the amount of white space before \texttt{;}, % \texttt{:} and \texttt{!}. This should only happen in horizontal mode, % hence the test with |\ifhmode|. % % \begin{macrocode} %<*frenchpunct> \declare@shorthand{mongolian}{;}{% \ifhmode % \end{macrocode} % % In horizontal mode we check for the presence of a `space', `unskip' if % it exists and place a |0.1em| kerning. % % \begin{macrocode} \ifdim\lastskip>\z@ \unskip\nobreak\kern.1em \else % \end{macrocode} % If no space has been typed, we add |\FDP@thinspace| % which will be % defined, up to the user's wishes, as an automatic added % thinspace, or as |\@empty|. % % \begin{macrocode} \FDP@thinspace \fi \fi % \end{macrocode} % % Now we can insert a `|;|' character. % % \begin{macrocode} \string;} % \end{macrocode} % % The other definitions are very similar. % % \begin{macrocode} \declare@shorthand{mongolian}{:}{% \ifhmode \ifdim\lastskip>\z@ \unskip\nobreak\kern.1em \else \FDP@thinspace \fi \fi \string:} % \end{macrocode} % % \begin{macrocode} \declare@shorthand{mongolian}{!}{% \ifhmode \ifdim\lastskip>\z@ \unskip\nobreak\kern.1em \else \FDP@thinspace \fi \fi \string!} % \end{macrocode} % % \begin{macrocode} \declare@shorthand{mongolian}{?}{% \ifhmode \ifdim\lastskip>\z@ \unskip\nobreak\kern.1em \else \FDP@thinspace \fi \fi \string?} % \end{macrocode} % % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % % \begin{macro}{\AutoSpaceBeforeFDP} % \begin{macro}{\NoAutoSpaceBeforeFDP} % \begin{macro}{\FDP@thinspace} % |\FDP@thinspace| is defined as unbreakable % spaces if |\AutoSpaceBeforeFDP| is activated or as |\@empty| if % |\NoAutoSpaceBeforeFDP| is in use. % The default is |\AutoSpaceBeforeFDP|. % \begin{macrocode} \def\AutoSpaceBeforeFDP{% \def\FDP@thinspace{\nobreak\kern.1em}} \def\NoAutoSpaceBeforeFDP{\let\FDP@thinspace\@empty} \AutoSpaceBeforeFDP % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\FDPon} % \begin{macro}{\FDPoff} % % The next macros allow to switch on/off activeness of double % punctuation signs. % % \begin{macrocode} \def\FDPon{\bbl@activate{:}% \bbl@activate{;}% \bbl@activate{?}% \bbl@activate{!}} \def\FDPoff{\bbl@deactivate{:}% \bbl@deactivate{;}% \bbl@deactivate{?}% \bbl@deactivate{!}} % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\system@sh@:@} % \begin{macro}{\system@sh@!@} % \begin{macro}{\system@sh@?@} % \begin{macro}{\system@sh@;@} % % When the active characters appear in an environment where their % Mongolian behaviour is not wanted they should give an `expected' % result. Therefore we define shorthands at system level as well. % % \begin{macrocode} \declare@shorthand{system}{:}{\string:} \declare@shorthand{system}{;}{\string;} % %<*frenchpunct&!spanishligs> \declare@shorthand{system}{!}{\string!} \declare@shorthand{system}{?}{\string?} % % \end{macrocode} % % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % To be able to define the function of `|"|', we first define a couple of % `support' macros. % % \begin{macro}{\dq} % % We save the original double quote character in |\dq| to keep it % available, the math accent |\"| can now be typed as `|"|'. % % \begin{macrocode} \begingroup \catcode`\"12 \def\reserved@a{\endgroup \def\@SS{\mathchar"7019 } \def\dq{"}} \reserved@a % \end{macrocode} % % \end{macro} % % Now we can define the doublequote macros: german and french quotes. % We use definitions of these quotes made in babel.sty. % The french quotes are contained in the \texttt{T2*} encodings. % % \begin{macrocode} \declare@shorthand{mongolian}{"`}{\glqq} \declare@shorthand{mongolian}{"'}{\grqq} \declare@shorthand{mongolian}{"<}{\flqq} \declare@shorthand{mongolian}{">}{\frqq} % \end{macrocode} % % Some additional commands: % % \begin{macrocode} \declare@shorthand{mongolian}{""}{\hskip\z@skip} \declare@shorthand{mongolian}{"~}{\textormath{\leavevmode\hbox{-}}{-}} \declare@shorthand{mongolian}{"=}{\nobreak-\hskip\z@skip} \declare@shorthand{mongolian}{"|}{% \textormath{\nobreak\discretionary{-}{}{\kern.03em}% \allowhyphens}{}} % \end{macrocode} % % The next two macros for |"-| and |"---| are somewhat different. % We must check whether the second token is a hyphen character: % % \begin{macrocode} \declare@shorthand{mongolian}{"-}{% % \end{macrocode} % % If the next token is `|-|', we typeset an emdash, otherwise a hyphen % sign: % % \begin{macrocode} \def\mongolian@sh@tmp{% \if\mongolian@sh@next-\expandafter\mongolian@sh@emdash \else\expandafter\mongolian@sh@hyphen\fi }% % \end{macrocode} % % \TeX\ looks for the next token after the first `|-|': the meaning of % this token is written to |\mongolian@sh@next| and |\mongolian@sh@tmp| is % called. % % \begin{macrocode} \futurelet\mongolian@sh@next\mongolian@sh@tmp} % \end{macrocode} % % Here are the definitions of hyphen and emdash. First the hyphen: % % \begin{macrocode} \def\mongolian@sh@hyphen{% \nobreak\-\bbl@allowhyphens} % \end{macrocode} % % For the emdash definition, there are the two parameters: we must `eat' % two last hyphen signs of our emdash\dots : % \begin{macrocode} \def\mongolian@sh@emdash#1#2{\cdash-#1#2} % \end{macrocode} % \begin{macro}{\cdash} % \dots\ these two parameters are useful for another macro: % |\cdash|: % \begin{macrocode} %\ifx\cdash\undefined % should be defined earlier \def\cdash#1#2#3{\def\tempx@{#3}% \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}% \ifx\tempx@\tempa@\@Acdash\else \ifx\tempx@\tempb@\@Bcdash\else \ifx\tempx@\tempc@\@Ccdash\else \errmessage{Wrong usage of cdash}\fi\fi\fi} % \end{macrocode} % second parameter (or third for |\cdash|) shows what kind of emdash % to create in next step % \begin{center} % \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}} % |"---| & ordinary (plain) Cyrillic emdash inside text: % an unbreakable thinspace will be inserted before only in case of % a \textit{space} before the dash (it is necessary for dashes after % display maths formulae: there could be lists, enumerations etc.\ % started with ``--- where $a$ is ...'' i.e., the dash starts a line). % (Firstly there were planned rather soft rules for user: he may put % a space before the dash or not. But it is difficult to place this % thinspace automatically, i.e., by checking modes because after % display formulae \TeX{} uses horizontal mode. Maybe there is a % misunderstanding? Maybe there is another way?) After a dash % a breakable thinspace is always placed; \\ % \end{tabular} % \end{center} % \begin{macrocode} % What is more grammatically: .2em or .2\fontdimen6\font ? \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi \cyrdash\hskip.2em\ignorespaces}% % \end{macrocode} % \begin{center} % \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}} % |"--~| & emdash in compound names or surnames % (like Mendeleev--Klapeiron); this dash has no space characters % around; after the dash some space is added % |\exhyphenalty| \\ % \end{tabular} % \end{center} % \begin{macrocode} \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}% % \end{macrocode} % \begin{center} % \begin{tabular}{@{}p{.1\hsize}@{}p{.9\hsize}@{}} % |"--*| & for denoting direct speech (a space like |\enskip| % must follow the emdash); \\ % \end{tabular} % \end{center} % \begin{macrocode} \def\@Ccdash{\leavevmode \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}% %\fi % \end{macrocode} % \end{macro} % % \begin{macro}{\cyrdash} % Finally the macro for ``body'' of the Cyrillic emdash. % The |\cyrdash| macro will be defined in case this macro hasn't been % defined in a fontenc file. For T2* fonts, cyrdash will be placed in % the code of the English emdash thus it uses ligature |---|. % \begin{macrocode} % Is there an IF necessary? \ifx\cyrdash\undefined \def\cyrdash{\hbox to.8em{--\hss--}} \fi % \end{macrocode} % \end{macro} % % Here a really new macro---to place thinspace between initials. % This macro used instead of |\,| allows hyphenation in the following % surname. % % \begin{macrocode} %\declare@shorthand{mongolian}{",}{\nobreak\hskip.2em\ignorespaces} % \end{macrocode} % % \begin{macro}{\mdqon} % \begin{macro}{\mdqoff} % All that's left to do now is to define a couple of commands % for |"|. % \begin{macrocode} \def\mdqon{\bbl@activate{"}} \def\mdqoff{\bbl@deactivate{"}} % \end{macrocode} % \end{macro} % \end{macro} % % The Mongolian hyphenation patterns can be used with |\lefthyphenmin| % and |\righthyphenmin| set to~2. % \begin{macrocode} \providehyphenmins{\CurrentOption}{\tw@\tw@} % temporary hack: \ifx\englishhyphenmins\undefined \def\englishhyphenmins{\tw@\thr@@} \fi % \end{macrocode} % % Now the action |\extrasmongolian| has to execute is to make sure that the % command |\frenchspacing| is in effect. If this is not the case the % execution of |\noextrasmongolian| will switch it off again. % % \begin{macrocode} \addto\extrasmongolian{\bbl@frenchspacing} \addto\noextrasmongolian{\bbl@nonfrenchspacing} % \end{macrocode} % % \end{macro} % % Next we add a new enumeration style for Mongolian manuscripts with % Cyrillic letters, and later on we define some math operator names in % accordance with Mongolian and Russian typesetting traditions. % % \begin{macro}{\Useg} % % We begin by defining |\Useg| which works like |\Alph|, but produces % (uppercase) Cyrillic letters intead of Latin ones. The letters CYRGUP, % and SFTSN are skipped, as usual for such enumeration. % % \begin{macrocode} \def\Useg#1{\expandafter\@Useg\csname c@#1\endcsname} \def\@Useg#1{\ifcase#1\or \CYRA\or\CYRB\or\CYRV\or\CYRG\or\CYRD\or\CYRE\or\CYRYO\or\CYRZH\or \CYRZ\or\CYRI\or\CYRISHRT\or\CYRK\or\CYRL\or\CYRM\or\CYRN\or\CYRO\or \CYROTLD\or\CYRP\or\CYRR\or\CYRS\or\CYRT\or\CYRU\or\CYRY\or\CYRF\or \CYRH\or\CYRC\or\CYRCH\or\CYRSH\or\CYRSHCH\or\CYRHRDSN\or\CYRERY\or \CYRSFTSN\or\CYREREV\or\CYRYU\or\CYRYA\else\@ctrerr\fi} % \end{macrocode} % % \end{macro} % % \begin{macro}{\useg} % % The macro |\useg| is similar to |\alph|; it produces lowercase % Mongolian letters. % % \begin{macrocode} \def\useg#1{\expandafter\@useg\csname c@#1\endcsname} \def\@useg#1{\ifcase#1\or \cyra\or\cyrb\or\cyrv\or\cyrg\or\cyrd\or\cyre\or\cyryo\or\cyrzh\or \cyrz\or\cyri\or\cyrishrt\or\cyrk\or\cyrl\or\cyrm\or\cyrn\or\cyro\or \cyrotld\or\cyrp\or\cyrr\or\cyrs\or\cyrt\or\cyru\or\cyry\or\cyrf\or \cyrh\or\cyrc\or\cyrch\or\cyrsh\or\cyrshch\or\cyrhrdsn\or\cyrery\or \cyrsftsn\or\cyrerev\or\cyryu\or\cyrya\else\@ctrerr\fi} % \end{macrocode} % % \end{macro} % % Set up default Cyrillic math alphabets. The math groups for cyrillic % letters are defined in the encoding definition files. First, declare % a new alphabet for symbols, |\cyrmathrm|, based on the symbol font % for Cyrillic letters defined in the encoding definition file. Note, % that by default Cyrillic letters are taken from upright font in math % mode (unlike Latin letters). % \begin{macrocode} %\RequirePackage{textmath} \@ifundefined{sym\cyrillicencoding letters}{}{% \SetSymbolFont{\cyrillicencoding letters}{bold}\cyrillicencoding \rmdefault\bfdefault\updefault \DeclareSymbolFontAlphabet\cyrmathrm{\cyrillicencoding letters} % \end{macrocode} % And we need a few commands to be able to switch to different variants. % \begin{macrocode} \DeclareMathAlphabet\cyrmathbf\cyrillicencoding \rmdefault\bfdefault\updefault \DeclareMathAlphabet\cyrmathsf\cyrillicencoding \sfdefault\mddefault\updefault \DeclareMathAlphabet\cyrmathit\cyrillicencoding \rmdefault\mddefault\itdefault \DeclareMathAlphabet\cyrmathtt\cyrillicencoding \ttdefault\mddefault\updefault % \SetMathAlphabet\cyrmathsf{bold}\cyrillicencoding \sfdefault\bfdefault\updefault \SetMathAlphabet\cyrmathit{bold}\cyrillicencoding \rmdefault\bfdefault\itdefault } % \end{macrocode} % % Some math functions in Mongolian and Russian math books have other % names: e.g., \texttt{sinh} in Russian is written as \texttt{sh} etc. % So we define a number of new math operators. % % |\sinh|: % \begin{macrocode} \def\sh{\mathop{\operator@font sh}\nolimits} % \end{macrocode} % |\cosh|: % \begin{macrocode} \def\ch{\mathop{\operator@font ch}\nolimits} % \end{macrocode} % |\tan|: % \begin{macrocode} \def\tg{\mathop{\operator@font tg}\nolimits} % \end{macrocode} % |\arctan|: % \begin{macrocode} \def\arctg{\mathop{\operator@font arctg}\nolimits} % \end{macrocode} % arcctg: % \begin{macrocode} \def\arcctg{\mathop{\operator@font arcctg}\nolimits} % \end{macrocode} % The following macro conflicts with |\th| defined in Latin~1 encoding: % % |\tanh|: % \begin{macrocode} \addto\extrasmongolian{% \babel@save{\th}% \let\ltx@th\th \def\th{\textormath{\ltx@th}% {\mathop{\operator@font th}\nolimits}}% } % \end{macrocode} % |\cot|: % \begin{macrocode} \def\ctg{\mathop{\operator@font ctg}\nolimits} % \end{macrocode} % |\coth|: % \begin{macrocode} \def\cth{\mathop{\operator@font cth}\nolimits} % \end{macrocode} % |\csc|: % \begin{macrocode} \def\cosec{\mathop{\operator@font cosec}\nolimits} % \end{macrocode} % % And finally some other Mongolian and Russian mathematical symbols: % \begin{macrocode} \def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits} \def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits} \def\nsd{\mathop{\cyrmathrm{\cyrn.\cyrs.\cyrd.}}\nolimits} \def\nsk{\mathop{\cyrmathrm{\cyrn.\cyrs.\cyrk.}}\nolimits} \def\NSD{\mathop{\cyrmathrm{\CYRN\CYRS\CYRD}}\nolimits} \def\NSK{\mathop{\cyrmathrm{\CYRN\CYRS\CYRK}}\nolimits} \def\nod{\mathop{\cyrmathrm{\cyrn.\cyro.\cyrd.}}\nolimits} \def\nok{\mathop{\cyrmathrm{\cyrn.\cyro.\cyrk.}}\nolimits} \def\NOD{\mathop{\cyrmathrm{\CYRN\CYRO\CYRD}}\nolimits} \def\NOK{\mathop{\cyrmathrm{\CYRN\CYRO\CYRK}}\nolimits} \def\Proj{\mathop{\cyrmathrm{\CYRP\cyrr}}\nolimits} % \end{macrocode} % % \begin{macrocode} \DeclareRobustCommand{\No}{% \ifmmode{\nfss@text{\textnumero}}\else\textnumero\fi} % \end{macrocode} % % The macro |\ldf@finish| takes care of looking for a configuration file, % setting the main language to be switched on at |\begin{document}| and % resetting the category code of \texttt{@} to its original value. % % \begin{macrocode} \ldf@finish{mongolian} % % \end{macrocode} % % \Finale %% %% \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 \~} %% \endinput