diff options
Diffstat (limited to 'macros/latex/contrib/babel-contrib/ukrainian/ukraineb.dtx')
-rw-r--r-- | macros/latex/contrib/babel-contrib/ukrainian/ukraineb.dtx | 1674 |
1 files changed, 1674 insertions, 0 deletions
diff --git a/macros/latex/contrib/babel-contrib/ukrainian/ukraineb.dtx b/macros/latex/contrib/babel-contrib/ukrainian/ukraineb.dtx new file mode 100644 index 0000000000..126924480c --- /dev/null +++ b/macros/latex/contrib/babel-contrib/ukrainian/ukraineb.dtx @@ -0,0 +1,1674 @@ +% \iffalse meta-comment +% !TEX program = LuaLaTeX +%<*internal> +\iffalse +%</internal> +%<*readme> +---------------------------------------------------------------- + +Ukrainian language module for Babel, v1.4c + +Released under the LaTeX Project Public License v1.3c or later. +See http://www.latex-project.org/lppl.txt + +The package provides support for use of Babel in documents written in Ukrainian. The support is adapted for use both +under legacy TEX engines, and under X∃TEX and LuaTEX. + +Based on Russian language module v1.3i by Igor A. Kotelnikov <kia999 at mail dot ru>. + +The current maintainer is Sergiy Ponomarenko <sergiy.ponomarenko@gmail.com>. + + +1. INSTALLATION + +- unpack babel-ukrainian.zip +- run "xelatex.exe ukraineb.dtx" (recommended) + or "pdflatex.exe ukraineb.dtx"; + run "tex.exe ukraineb.dtx" + or "tex.exe ukraineb.ins", if you don't need documentation +- move "ukraineb.ldf" to <textmf>/tex/generic/babel/babel-ukrainian/ +- move "ukraineb.pdf" and README to <textmf>/doc/generic/babel-ukrainian/ +- update filename base (see documentation for your TeX system) + + +2. USAGE + +Ukrainian language definition file can be used both with legacy 8-bit engines +(such as latex.exe or pdflatex.exe) and Unicode compilers (xelatex.exe or +lualatex.exe). The Unicode engines can be ran either in Unicode mode or 8-bit +compatibility mode, which emulates the legacy engines. The two modes differ by +a set of packages loaded in the preamble of a source TeX file. It is important +to keep recommended order of the packages loaded, especially when running +Unicode engines in a compatibility 8-bit mode. + +In the examples below, it is assumed that a source file has utf8 input encoding. + +2.1. 8-bit mode + +2.1.1 PDFLATeX, LaTeX + + \usepackage[T1,T2A]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage[english,ukrainian]{babel} + +2.1.2 LuaLaTeX + + \usepackage[T1,T2A]{fontenc} + \usepackage[lutf8]{luainputenc} + \usepackage[english,ukrainian]{babel} + +2.1.3 XeLaTeX + + \XeTeXinputencoding "bytes" + \usepackage[utf8]{inputenc} + \usepackage[T2A]{fontenc} + \usepackage[english,ukrainian]{babel} + +2.2 Unicode mode, LuaLaTeX or XeLaTeX + + \usepackage{fontspec} + \defaultfontfeatures{Ligatures={TeX}} + \setmainfont{CMU Serif} + \setsansfont{CMU Sans Serif} + \setmonofont{CMU Typewriter Text} + \usepackage[english,ukrainian]{babel} + +Instead of the Computer Modern Unicode (CMU) fonts loaded in this example, +you may try any True Type or Open Type font installed on your computer provided +that that font came with Ukrainian letters. + +3. DOCUMENTATION + +See ukraineb.pdf for more information. + + +4. KNOWN PROBLEMS + +Before switching from a legacy 8-bit engine (tex, pdftex) to an Unicode +engine (xetex, luatex) and vise versa delete all .aux, .toc, .lot, .lof +files as they might have stored incompatible internal encodings. + +5. CHANGES + +2018-04-11 version 1.4с + * Fixed unprotected endlines. + +2017-08-10 version 1.4b + + * Default for \cyrdash is provided. + * TU encoding is set as default for XeTeX and LuaTeX; EU1 and EU2 encodings + are kept for backward compatibility. + +2017-06-13 version 1.4a + + * Removing \week<roman number>day macro, since it is should be define in datetime2 class + * Removing revtex4(4-1) classes ukrainization because it unused in ukainian text typesetting + * Adding \acronymname, \lstlistingname and \lstlistlistingname macros to nonunicode captions + +2017-06-10 version 1.4 + + * For compatibility with older Ukrainian packages we leave definition of the \No macro + * Fix Ukrainian translation of babel unicode string \chaptername + * Macros \Asbuk and \asbuk are removed + * Cyrillic alphabetical enumeration is provided by \Alph and \alph macros when Ukrainian loaded + * Used babel's 3.9 (and later) macros for defining caption names and date for Unicode case + +2017-06-08 version 1.3i + + * Corrections according to alphabetical enumeration Ukrainian standart ДСТУ 3008:2015 + * Some math macro from original russian.ldf was removed because of seldom usage + +2017-06-06 version 1.3h + + * Initial version + +Original source: russianb.dtx, + 2017-01-12 v1.3i Russian support from the babel system. + +---------------------------------------------------------------- +%</readme> +%<*internal> +\fi +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else + \expandafter\begingroup +\fi +%</internal> +%<*install> +\input docstrip.tex +\keepsilent +\askforoverwritefalse +\preamble +---------------------------------------------------------------- +Ukrainian Language Support for the Babel package +E-mail: sergiy.ponomarenko@gmailcom +Released under the LaTeX Project Public License v1.3c or later +See http://www.latex-project.org/lppl.txt +---------------------------------------------------------------- +\endpreamble +\postamble +---------------------------------------------------------------- +Copyright 2017 Sergiy М. Ponomarenko +Copyright 2011-2017 Igor A. Kotelnikov. +Copyright 2000 Aleksey Novodvorsky +Copyright 1995-2008 Olga Lapko. +Copyright 1989-2012 Johannes L. Braams. + +This file is a part of the Ukrainian-Babel package. + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License (LPPL), either +version 1.3c of this license or (at your option) any later +version. The latest version of this license is in the file: + + http://www.latex-project.org/lppl.txt + +The package is "maintained" (as per LPPL maintenance status) by +Sergiy М. Ponomarenko. + +The package consists of the file ukraineb.dtx +and the derived files ukraineb.ins, + ukraineb.ldf, + ukraineb.pdf, + README. +---------------------------------------------------------------- +\endpostamble +\usedir{tex/generic/babel/contrib} +\generate{ + \file{\jobname.ldf}{\from{\jobname.dtx}{code}} +} +%</install> +%<install>\endbatchfile +%<*internal> +\usedir{source/latex/babel-ukrainian} +\generate{ + \file{\jobname.ins}{\from{\jobname.dtx}{install}} +} +\nopreamble\nopostamble +\usedir{doc/latex/babel-ukrainian} +\generate{ + \file{README.}{\from{\jobname.dtx}{readme}} +} +\ifx\fmtname\nameofplainTeX + \expandafter\endbatchfile +\else + \expandafter\endgroup +\fi +%</internal> +%<*code> +\NeedsTeXFormat{LaTeX2e} +%\ProvidesLanguage{\jobname}[2018/04/11 1.4c Ukrainian support for the Babel system] +\ProvidesLanguage{ukraineb}[2018/04/11 1.4c Ukrainian support for the Babel system] +%</code> +%<*driver> +\documentclass[a4paper]{ltxdoc} +%% +%% This document should be compiled by +%% XeLaTeX or LuaLaTex since some cyrillic +%% glyphs are absent in T2* encodings used +%% by LaTeX. +%% +\usepackage[% + a4paper,% + footskip=1cm,% + headsep=0.3cm,% + top=2cm, %поле сверху + bottom=2cm, %поле снизу + left=4cm, %поле ліворуч + right=2cm, %поле праворуч + ]{geometry} +\usepackage{ifxetex,ifluatex} +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi>0 + \usepackage{fontspec} + \defaultfontfeatures{Ligatures={TeX}} + \setmainfont{CMU Serif} + \setsansfont{CMU Sans Serif} + \setmonofont{CMU Typewriter Text} + %\setmonofont[Scale=MatchLowercase]{Courier New} + %\setmonofont[Scale=MatchUppercase]{Courier New} + %\setmonofont{Courier New} +\else + \usepackage[X2,T2A]{fontenc} + \usepackage[utf8]{inputenc} + %% ukrainian letter, looks as a ligature IE, not defined anywhare + %\DeclareUnicodeCharacter{0464}{\CYRESHRT} % no surch cmd in X2 + %% ukrainian letter, looks as a ligature ie, not defined anywhare + %\DeclareUnicodeCharacter{0465}{\cyreshrt} % no surch cmd in X2 + %% therefor, we substitute it with є (#0454, \cyrie) + \DeclareUnicodeCharacter{0464}{\CYRIE}% + %\DeclareTextSymbolDefault{\CYRIE}{X2} + \DeclareUnicodeCharacter{0465}{\cyrie}% + %\DeclareTextSymbolDefault{\cyrie}{X2} +\fi +\usepackage[dvipsnames,usenames]{xcolor} +\usepackage{colortbl} + \definecolor{thered} {rgb}{0.65,0.04,0.07} + \definecolor{thegreen}{rgb}{0.06,0.44,0.08} + \definecolor{thegrey} {gray}{0.8} + \definecolor{theshade}{rgb}{1,1,0.97} + \definecolor{theframe}{gray}{0.6} + \definecolor{theblue}{cmyk}{1.00, 0.50, 0.00, 0.40} +%\usepackage[numbered]{hypdoc} +\usepackage[colorlinks=true + ,linkcolor=violet %theblue % + ,filecolor=purple %thegreen% + ,citecolor=teal %thegreen% + ,pdfpagelayout=TwoPageRight% + ,pdfauthor={Ponomarenko S.M. aka sergiokapone}% + ,pdfdisplaydoctitle=true% + ,pdfencoding=auto% + ]{hyperref} +% ==================================== +\newcommand*\TeXhax{\TeX hax} +\newcommand*\babel{\textsf{babel}} +\newcommand*\Babel{\textsf{Babel}} +\newcommand*\xetex{\textsf{xetex}} +\newcommand*\luatex{\textsf{luatex}} +\providecommand*\m[1]{\mbox{$\langle$\normalfont\itshape#1\/$\rangle$}} +\newcommand*\langlist{% + \meta{language}\texttt{,}\meta{language}\texttt{,}...} +\newcommand*\langvar{\m{lang}} +\newcommand*\note[1]{} +\newcommand*\Lopt[1]{\textsf{#1}} +\newcommand*\Lenv[1]{\textsf{#1}} +\newcommand*\menv[1]{\char`\{#1\char`\}} +\newcommand*\Eenv[1]{% + \quad\ldots\quad + \texttt{\color{thered}\string\end\menv{#1}}} +\newcommand*\file[1]{\texttt{#1}} +\newcommand*\cls[1]{\texttt{#1}} +\newcommand*\pkg[1]{\texttt{#1}} +% -------------------------------------------------- +\IfFileExists{listings.sty}{ + \usepackage{listings} + \lstset{ + gobble=1, + columns=flexible, + keepspaces, + basicstyle=\MacroFont, + keywords=[0]{\selectlanguage,\foreignlanguage + ,\babelhyphen,\babelhyphenation + ,\lefthyphenmin,\righthyphenmin + ,\StartBabelCommands,\SetString,\EndBabelCommands,\shorthandoff,\shorthandon + ,\languageshorthands,\useshorthands,\defineshorthand + ,\AddBabelHook,\SetStringLoop,\SetCase,\AfterBabelLanguage + ,\defaultfontfeatures,\setmainfont,\setsansfont,\setmonofont + ,\Ukrainian,\cyrdash,\cdash + ,\cyr,\cyrillictext,\textcyrillic,\cyrillicencoding + ,\addto,\captionsukrainian,\dateukrainian,\noextrasukrainian,\extrasukrainian + ,\languageattribute + ,\ch,\sh,\tg,\ctg,\arctg,\arcctg\,\th,\cth,\cosec + ,\dq + ,\XeTeXinputencoding + } + ,keywordstyle=[0]\color{thered} + ,keywords=[1]{main,ukrainian,english,german,frenchb + ,shorthands,extrasenglish + ,stringprocess,afterextras + ,soft,empty,nobreak,hard + ,Renderer,Ligatures + ,T1,T2A,lutf8,utf8 + ,fontspec,babel,inputenc,fontenc + }, + keywordstyle=[1]\color{thegreen}, + comment=[l]\%, + commentstyle=\color{thegrey}\itshape, + alsoother={0123456789_}, + frame=single, + backgroundcolor=\color{theshade}, + rulecolor=\color{theframe}, + framerule=\fboxrule, + } + \let\verbatim\relax + \lstnewenvironment{verbatim}[1][]{\lstset{##1}}{} + \AtBeginDocument{% + \DeleteShortVerb{\|}% + \lstMakeShortInline|% + } +}{} +\def\PrintDescribeMacro#1{% + \strut\MacroFont\color{thered}\normalsize\string#1} +\def\Describe#1{% + \par\penalty-500\vskip3ex\noindent + \DescribeMacro{#1}\args} +\def\DescribeOther{\vskip-5.8ex\Describe} +\makeatletter +\def\args#1{% + \def\bbl@tempa{#1}% + \ifx\bbl@tempa\@empty\else#1\vskip1ex\fi\ignorespaces} +\makeatother +% ==================================== +\EnableCrossrefs +%\DisableCrossrefs % Say \DisableCrossrefs if index is ready +\CodelineIndex % Index code by line number +\RecordChanges % Gather update information +%\PageIndex % Index code by page number +% ==================================== +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% +% \GetFileInfo{\jobname.dtx} +% \GetFileInfo{\jobname.ldf} +% +% \title{^^A +% \textsf{Ukrainian} --- description text\thanks{^^A +% This file describes version \fileversion, last revised \filedate.^^A +% }^^A +% } +% \author{^^A +% You\thanks{E-mail: you@your.domain}^^A +% } +% \title{The Ukrainian Language\\ +% in the \babel\ system\\[0.5em] +% \large Version \fileversion} +% +% \author{Sergiy M. Ponomarenko\footnote{E-mail: \href{mailto:sergiy.ponomarenko@gmail.com}{sergiy dot ponomarenko at gmail dot com}.}} +% +% \date{Released \filedate} +% +% \maketitle +% +% {\small\tableofcontents} +% +% +% \section{The Ukrainian Language Definition File} +% +% The file \file{\filename}\footnote{The file described in this document +% has the version number \fileversion\ and was last revised on \filedate.} +% is the source file for the Ukrainian Language Definition file +% \file{\jobname.ldf} to be loaded by the \babel\ package with +% the option \Lopt{ukrainian}. It's based on the Russian language definition +% file \file{russianb.ldf} derived by Igor~A.~Kotelnikov. +% +% \section{Usage} +% +% Typesetting Ukrainian texts implies that a special input and output +% encodings should be used. Input encodings are those which are used in source +% (\file{.tex}) file. Output encoding is also known as the font encoding. It is +% implemented within the font files. +% +% Generally, the user may choose between different available Cyrillic +% encodings. The current support for Cyrillic uses LH family of MetaFont fonts +% and theirs Postscript versions such as \texttt{CM-super}. Lua\LaTeX\ and Xe\LaTeX, +% being the Unicode-based succeeders of \LaTeX, allow also for any Open Type +% (OTF) and True Type (TTF) fonts which has Cyrillic script, e.g. Computer +% Modern Unicode, Linux Libertine, and many other system fonts that came with +% Linux, Mac and Windows operating systems. +% +% With the advent of Unicode, \LaTeX\ community are moving towards eliminating +% all existing encodings in favor of Unicode, but nowadays one should take +% care when switching from \LaTeX\ to Lua\LaTeX\ or Xe\LaTeX\ since +% different packages should be loaded for those compilers. +% +% Since earlier versions \babel{} did not +% support Xe\LaTeX\ (at least for some languages including Ukrainian), the +% \pkg{polyglossia} package was generally recommended in the past for +% use with Xe\LaTeX\ as a replacement for \babel. Nowadays, \babel{} +% can be used with any engines, including \LaTeX, PDF\LaTeX, Lua\LaTeX, and +% Xe\LaTeX. Nevertheless some troubles may occur with some languages which +% have no promptly updated \file{.ldf} files. +% +% +% \subsection{\LaTeX} +% +% When user's document is compiled with \file{latex.exe} or \file{pdflatex.exe}, +% recommended set of packages includes the \pkg{inputenc} and \pkg{fontenc} +% packages. They should be loaded before \babel, for example, +% \begin{verbatim} +% \usepackage[T1,T2A]{fontenc} +% \usepackage[utf8]{inputenc} +% \usepackage[english,ukrainian]{babel} +%\end{verbatim} +% Some variations in the order of loading the packages are allowed in this case +% but it is better to follow one and the same convention at all circumstances: +% the \babel{} package should go last, and \pkg{fontenc} must be the first. +% +% Input encoding should be declared as option to the \pkg{inputenc} +% package. Known Cyrillic encodings include \texttt{cp866} (MS DOS), +% \texttt{cp1251} (Windows), \texttt{koi8-u} (UNIX) and their variants. +% Nowadays, this list is appended with \texttt{utf8} input encoding. +% +% Output encodings (also known as font encodings) are declared as options to +% the \pkg{fontenc} package. Known Cyrillic encodings are \texttt{T2A}, +% \texttt{T2B}, \texttt{T2C}, \texttt{LCY}, and \texttt{X2}; +% \texttt{LWN} is excluded from Ukrainian support of +% \file{\filename} since \texttt{LWN} is excluded from the \pkg{cyrillic} +% bundle of related files. +% +% +% \subsection{Lua\LaTeX} +% +% If Unicode fonts are not available, Lua\LaTeX\ can run in compatibility +% (8-bit) mode to use same font as \LaTeX\ does. However the package +% \pkg{inputenc} does not work with Lua\LaTeX\ and should be substituted with +% \pkg{luainputenc}. Source file is to be converted to \texttt{UTF8} +% (Unicode-8) encoding; it is the only input encoding accepted by +% Lua\LaTeX. The 8-bit mode is invoked by the following sequence of packages: +% \begin{verbatim} +% \usepackage[T1,T2A]{fontenc} +% \usepackage[lutf8]{luainputenc} +% \usepackage[english,ukrainian]{babel} +% \end{verbatim} +% The order of the packages is crucial for Lua\LaTeX\ in 8-bit mode. Since both +% \pkg{luainputenc} and \babel{} should know what is a selected font encoding, +% the \pkg{fontenc} package should be loaded first. Input encoding management for +% Lua\TeX\ is needed only for compatibility with old documents. For new +% documents, using UTF-8 encoding and Unicode fonts is strongly recommended. +% \emph{You've been warned!} See +% \href{http://tex.stackexchange.com/questions/31709/can-one-instruct-lualatex-to-use-t2a-encoded-fonts}% +% {tex.stackexchange.com/questions/31709/can-one-instruct-lualatex-to-use-t2a-encoded-fonts}. +% +% +% To invoke Unicode mode, one needs to load the \pkg{fontspec} package instead +% of \pkg{luainputenc} and \pkg{fontspec} and explicitly indicate which True Type +% or Open Type fonts should be used for romanic, sans-serif and monospaced types. +% The following example shows how to load Computer Modern Unicode (CMU) fonts, +% which is a part of all modern \LaTeX\ distributions: +% \begin{verbatim} +% \usepackage{fontspec} +% \defaultfontfeatures{Renderer=Basic,Ligatures={TeX}} +% \setmainfont{CMU Serif} +% \setsansfont{CMU Sans Serif} +% \setmonofont{CMU Typewriter Text} +% \usepackage[english,ukrainian]{babel} +% \end{verbatim} +% The |\defaultfontfeatures| declares default font features for subsequent +% |\setmainfont| (which sets romanic fonts), |\setsansfont| (sans-serif) and +% |\setmonofont| (monospaced font). Font features can be set up on per font +% bases; for example +% \begin{verbatim} +% \usepackage{fontspec} +% \setmainfont[Renderer=Basic,Ligatures={TeX}]{CMU Serif} +% \setsansfont[Renderer=Basic,Ligatures={TeX,Historic}]{CMU Sans Serif} +% \setmonofont{CMU Typewriter Text} +% \usepackage[english,ukrainian]{babel} +% \end{verbatim} +% Here |Renderer=Basic,Ligatures={TeX}| activates ligatures which are existed +% in \LaTeX. +% +% Recall that the language enlisted last in the list of options of the \babel{} +% package is assumed to be the main language of the document, which is also active +% language right after |\begin{document}|. As of version 3.9, the main language +% can be set as a value of the |main| option as follows +% \begin{verbatim} +% \usepackage{fontspec} +% \usepackage[english,main=ukrainian,german]{babel} +% \end{verbatim} +% %\unskip +% +% +% +% \subsection{Xe\LaTeX} +% +% In Xe\LaTeX, there is also a special mode for 8-bit compatibility. +% One can use |\XeTeXinputencoding| to change the input encoding +% temporarily, and the \texttt{"bytes"} encoding makes Xe\LaTeX\ works +% like a 8-bit \LaTeX\ engine: +% \begin{verbatim} +% \XeTeXinputencoding "bytes" +% \usepackage[utf8]{inputenc} +% \usepackage[T2A]{fontenc} +% \usepackage[english,ukrainian]{babel} +% \end{verbatim} +% \unskip +% Xe\TeX\ can use a different input encoding but it always uses the Unicode +% internally, so that |\XeTeXinputencoding| performs a conversion of the input +% into Unicode; +% +% \noindent% +% see \href{http://tex.stackexchange.com/questions/36188/do-xetex-and-luatex-always-use-unicode} +% {tex.stackexchange.com/questions/36188/do-xetex-and-luatex-always-use-unicode}. +% +% +% Unicode mode is set up same way as for Lua\LaTeX, however the option +% |Renderer=Basic| can be dropped: +% \begin{verbatim} +% \usepackage{fontspec} +% \defaultfontfeatures{Ligatures={TeX}} +% \setmainfont{CMU Serif} +% \setsansfont{CMU Sans Serif} +% \setmonofont{CMU Typewriter Text} +% \usepackage[english,ukrainian]{babel} +% \end{verbatim} +% +% \section{User's commands} +% +% In a multilingual document, some typographic rules are language +% dependent and should apply to the whole document. +% +% Regarding local typography, the macro |\selectlanguage{ukrainian}| +% switches to the Ukrainian language, with the following effects: +% \begin{enumerate} +% \item Ukrainian hyphenation patterns are made active; +% \item |\today| prints the date in Ukrainian; +% \item the caption names are translated into Ukrainian +% (\LaTeX{} only); +% \item emdash typed by the ligature |---| might be 20\% shorter when Ukrainian +% is the current language; the result depends on the current encoding; |---| +% always produce long emdash in Lua\TeX\ and Xe\TeX\ since these engines +% use same encodings for all languages; +% \item emdash typed by the ligature |"---| in Ukrainian is 20\% shorter, however +% the ligature |"---| might not be defined in other languges; a +% shorter emdash (i.e. |\cyrdash|) can be typeset in any language using +% special macros enlisted in table \ref{tab:ukrainian-quote}. +% \end{enumerate} +% +% Additional commands are provided to typeset quotes: +% +% \begin{enumerate} +% \item French quotation marks can be entered using the commands +% |\guillemotleft| and |\guillemotright| which work in \LaTeXe\ +% and Plain\TeX. +% \item German quotation marks can be entered using the commands +% |\glqq| and |\grqq| which work in \LaTeXe\ and Plain\TeX. +% \end{enumerate} +% +% The macro |\Ukrainian| defined as an alias for +% |\selectlanguage{ukrainian}|, and its ``opponent'' |\English|, existed +% in \file{\jobname.ldf} has been removed since the Ukrainian +% language definition file is wrong place for definition of macros which +% switch to a distinct other language. +% +% The macro |\textcyrillic|\marg{text} is intended to typeset small chunks of text +% in Ukrainian; it is essentially an alias for |\foreignlanguage{ukrainian}|\marg{text}. +% +% +% \subsection{Active character} +% +% Table~\ref{tab:ukrainian-quote} shows macros and active string which can be +% used to typeset various dashes and quotes. +% In the Ukrainian language, the character |"| is made active. It can be +% considered as second escape character in addition to |\|. Some dashes and +% all quotes can be typed using both active character |"| and ordinary +% macros as indicated in the table. However, some shorthanded hyphenations +% have no macro counterpart. +% +% \begin{table}[!ht]\centering +% \caption{Extra definitions made +% by \file{\jobname.ldf}}\label{tab:ukrainian-quote} +% \medskip +% \begin{tabular}{llp{7cm}} +% \hline\hline\\[-0.5em] +% |\glqq| & |"`| & +% German opening double quote (looks like ,\kern-0.08em,). \\ +% |\grqq| & |"'| & +% German closing double quote (looks like ``). \\ +% |\guillemotleft| & |"<| & +% French opening double quote (looks like $<\!\!<$). \\ +% |\guillemotright| & |">| & +% French closing double quote (looks like $>\!\!>$). \\ +% |\dq| & & +% Original quotes character (|"|). \\[0.5em] +% |\babelhyphen{soft}| +% & |"-| & Optional (soft) hyphen sign, similar to |\-| but allows +% hyphenation in the rest of the word; +% equivalent to |\babelhyphen{soft}| in \babel{} 3.9. \\ +% |\babelhyphen{empty}| +% & |""| & Similar to |"-| but prints no hyphen sign +% (used for compound words with hyphen, e.g. |x-""y|); +% equivalent to |\babelhyphen{empty}| in \babel{} 3.9. \\ +% |\babelhyphen*{nobreak}| +% & |"~| & Compound word mark without a breakpoint, prints hyphen +% prohibiting hyphenation at the point; +% equivalent to |\babelhyphen*{nobreak}| in \babel{} 3.9. \\ +% |\babelhyphen{hard}| +% & |"=| & A compound word mark with a breakpoint, prints hyphen +% allowing hyphenation in the composing words. +% equivalent to |\babelhyphen{hard}| in \babel{} 3.9. \\ +% |\babelhyphen{nobreak}| +% & \verb="|= & Disables ligature at this position; +% equivalent to |\babelhyphen{nobreak}| (??) in \babel{} 3.9. +% \\[0.5em] +% |\cyrdash| & & Row Cyrillic emdash (does not care +% spaces around). \\ +% |\cdash---| & |"---| & +% Cyrillic emdash in plain text. \\ +% |\cdash--~| & |"--~| & +% Cyrillic emdash in compound names +% (as in |Mendeleev"--~Klapeiron|). \\ +% |\cdash--*| & |"--*| & +% Cyrillic emdash for denoting direct speech. \\ +% & |",| & Thin space +% (allows further hyphenation as in |D.",Mendeleev|). \\[0.5em] +% \hline\hline +% \end{tabular} +% \end{table} +% Note that the standard soft hyphen |\-| is equivalent to |\babelhyphen*{soft}|. +% +% \medskip +% +% The quotation marks traditionally used in Ukrainian were borrowed from +% other languages (e.g., French and German) so they keep their original +% names. +% +% The French quotes are also available as ligatures `|<<|' and `|>>|' in +% 8-bit Cyrillic font encodings (\texttt{LCY}, \texttt{X2}, \texttt{T2*}) +% and in Unicode encodings (\texttt{EU1} and \texttt{EU2}) +% and as `|<|' and `|>|' characters in 7-bit Cyrillic font encodings +% (\texttt{OT2} and \texttt{LWN}). +% +% In Unicode encodings \texttt{EU1} and \texttt{EU2} cyrdashes and quotes +% can be typed as single character if text editor makes it possible to +% insert characters which absent of standard keyboard. This method works +% as well for 8-bit fonts encoded according to \texttt{T2A} if source file +% is encoded with \texttt{cp1251} or {utf8}. +% +% By default, active double quote is switched on. It can be switched off +% any time using |\shorthandoff{"}| and the switched on again using +% |\shorthandon{"}|. +% +% \subsection{Math commands} +% +% The \file{\filename} defines few macros that can be used independently +% of current language. These are macros to be used in math mode to type +% the names of trigonometric functions common for Ukrainian documents: +% |\sh|, |\ch|, |\tg|, |\ctg|, |\arctg|, |\arcctg|, |\th|, |\cth|, and +% |\cosec|. Cyrillic letters in math mode can be typed with the aid of +% text commands such as |\textbf|, |\textsf|, |\textit|, |\texttt|, e.t.c. +% +% +% \section{\TeX{}nical details} +% +% The packages \pkg{inputenc} and \pkg{luainputenc} +% make Cyrillic letters active so that a compiler converts them into +% corresponding |\cyr<letter>| macro at compilation time. +% For example, Ukrainian letter `a' matches +% macro |\cyra|, and capital Ukrainian letter `A' matches |\CYRA|. The +% package \pkg{fontenc} then matches every macro |\cyr<letter>| to corresponding +% glyph in a font file depending on a declared font encoding. +% +% Nowadays, Unicode makes |\cyr<letter>| macros outdated since both source +% file and font file are encoded consistently. These macros +% should therefore be removed because mixing them with Unicode characters +% breaks sorting mechanism of such utilities as \file{bibtex} and +% \file{makeindex}. For the sake of backward compatibility, |\cyr<letter>| are +% still kept for \LaTeX, but they are bypassed if Lua\LaTeX\ or Xe\LaTeX\ +% are detected. +% +% \section{Known problems} +% +% Before switching from a legacy 8-bit engine (tex, pdftex) to an Unicode +% engine (xetex, luatex) and vise versa delete all |.aux|, |.toc|, |.lot|, +% |.lof| files as they might have stored incompatible internal encodings. +% +% +% \StopEventually{^^A +% \setlength{\postmulticols}{100pt} +% \PrintChanges +% \PrintIndex +% } +% +% \iffalse +%<*code> +% \fi +% +% \section{Implementation} +% \changes{1.4a}{2017/06/13}{Removing \cs{week<roman number>day} macro, since it is should be define in \cls{datetime2} class} +% \changes{1.4a}{2017/06/13}{Removing \cls{revtex4(4-1)} classes ukrainization because it unused in ukainian text typesetting} +% \changes{1.4a}{2017/06/13}{Adding \cs{acronymname}, \cs{lstlistingname} and \csc{lstlistlistingname} macros to nonunicode captions} +% \changes{1.4}{2017/06/10}{For compatibility with older Ukrainian packages we leave definition of the \cs{No} macro} +% \changes{1.4}{2017/06/09}{Fix Ukrainian translation of babel unicode string \cs{chaptername}} +% \changes{1.4}{2017/06/09}{Macros \cs{Asbuk} and \cs{asbuk} are removed} +% \changes{1.4}{2017/06/09}{Cyrillic alphabetical enumeration is provided by \cs{Alph} and \cs{alph} macros when Ukrainian loaded} +% \changes{1.4}{2017/06/09}{Used babel's 3.9 (and later) macros for defining caption names and date for Unicode case} +% \changes{1.3i}{2017/06/08}{Corrections according to alphabetical enumeration Ukrainian standart ДСТУ 3008:2015} +% \changes{1.3i}{2017/06/08}{Some math macro from original russian.ldf was removed because of seldom usage} +% \changes{1.3h}{2017/06/06}{Initial version} +% +% \subsection{Initial setup} +% +% The macro |\LdfInit| performs a couple of standard checks that +% must be made at the beginning of a language definition file, +% such as checking the category code of the \texttt{@}-sign, preventing +% the \file{.ldf} file from being processed twice, etc. +% +% \begin{macrocode} +\LdfInit{ukrainian}{captionsukrainian} +% \end{macrocode} +% +% First, we check if Lua\LaTeX\ or Xe\LaTeX\ is running. If so, we set +% boolean key |\if@ukr@uni@ode| to true. It will be used to eliminate |\cyr...| +% commands, which were introduced in \LaTeX2e\ to handle various +% Cyrillic input encoding. With the advent of Unicode \LaTeX\ is +% moving to universal input encoding, so we consider these |\cyr...| +% commands as obsolete. They are preserved though for backward +% compatibility in case if \LaTeX\ or PDF\LaTeX\ are running. +% +% We don't load the \pkg{ifluatex} or \pkg{ifxetex} package because +% |\RequirePackage| is not allowed at the stage of processing options +% (note that babel loads this file right when it processes its own options) +% but we borrow code from these packages. +% +% \begin{macrocode} +\ifdefined\if@ukr@uni@ode + \PackageError{babel}{if@ukr@uni@ode already defined.\MessageBreak + Please contact author of ukraineb.ldf} + \relax +\fi +\newif\if@ukr@uni@ode +\ifdefined\luatexversion + \@ukr@uni@odetrue +\else + \ifdefined\XeTeXrevision + \@ukr@uni@odetrue + \fi +\fi +% \end{macrocode} +% +% Check if hyphenation patterns for the Ukrainian language have been +% loaded in \file{language.dat}. Namely, we check for the existence of +% |\l@ukrainian|. If it is not defined, we declare Ukrainian as dialect +% for the default language number 0 which almost for sure is English. +% +% \begin{macrocode} +\ifx\l@ukrainian\@undefined + \@nopatterns{Ukrainian} + \adddialect\l@ukrainian0 +\fi +% \end{macrocode} +% Now |\l@ukrainian| is always defined. +% +% \subsection{Output encoding} +% +% We need to know font encoding that is supposed to be +% active at the end of the \babel\ package. Default font encoding, set by +% \LaTeX\ core, is \texttt{OT1}. This can be changed by the \pkg{fontenc} +% package in case of \LaTeX\ and by \pkg{fontspec} package in case of +% Lua\LaTeX. It matters weather these packages are loaded before of after +% \babel. In the latter case or if these packages are not loaded at all, +% \file{ukraineb.ldf} ignores their effect and tries to provide some +% reasonable settings. In particular, \texttt{T2A} will be selected for +% Ukrainian language if \LaTeX\ is running but \texttt{EU1} in case of +% Xe\LaTeX\ and \texttt{EU2} in case of Lua\LaTeX. +% +% +% In Unicode mode, the package \pkg{fontspec} should be loaded instead of +% \pkg{fontenc} to make font preparation; \pkg{fontspec} loads the package +% \pkg{xunicode} which sets current encoding (kept in |\cf@encoding|) to +% \texttt{EU1} for Xe\LaTeX\ and \texttt{EU2} for Lua\LaTeX, and the \babel{} +% package sets the macro |\latinencoding| to |\cf@encoding|. Since \babel{} scan +% for value |\cf@encoding| within |\AtBeginDocument|, |\latinencoding| will +% be set to either \texttt{EU1} for Xe\LaTeX\ or \texttt{EU2} for Lua\LaTeX\ +% no matter which of the packages, \babel{} or \pkg{fontspec} is loaded first. +% +% +% \Describe\cyrillicencoding{} +% There is a limited list of encodings appropriate for Cyrillic text. We +% will look which of them is declared and keep its name in the macro +% |\cyrillicencoding|. +% Correct (but obsolete and now deleted) 7-bit Cyrillic encoding is +% \texttt{LWN}. +% Correct 8-bit Cyrillic encodings are +% \texttt{T2A} (default for 8-bit compilers), \texttt{T2B}, \texttt{T2C}, +% \texttt{LCY} and \texttt{X2}. +% Correct utf8 encodings are +% \texttt{TU} (default for Xe\LaTeX\ and Lua\LaTeX), +% \texttt{EU1} (obsolete, formerly used for Xe\LaTeX), +% \texttt{EU2} (obsolete, formerly used for Lua\LaTeX). +% +% In 8-bit (\LaTeX) mode, user may choose between different non-unicode Cyrillic +% encodings---e.g., \texttt{X2} or \texttt{LCY}.\@ If user wants +% to use another font encoding rather than default (\texttt{T2A}), +% he has to load the corresponding file \emph{before} \file{babel.sty}. +% +% Remember that for the Ukrainian 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 Ukrainian phrase +% or vice versa. +% +% We parse the |\cdp@list| containing encodings known to \LaTeX\ +% in the order they have been loaded by the time \pkg{babel} is called. +% We set the |\cyrillicencoding| to the \emph{last} loaded encoding in the +% list of supported Cyrillic encodings: \texttt{OT2}, \texttt{LCY}, +% \texttt{X2}, \texttt{T2C}, \texttt{T2B}, \texttt{T2A}. In Unicode mode, +% |\cyrillicencoding| is set to \texttt{TU} by \pkg{fontspec}. Nevertheless +% here we provide similar definitions; 8-bit encodings are kept for Unicode +% compilers (Lua\LaTeX\ and Xe\LaTeX) since they can run in compatibility +% (8-bit) mode. +% +% \changes{1.4b}{2017/08/10}{TU encoding added} +% \begin{macrocode} +\def\@setcyrillicencoding{% + \def\sce@a##1##2{% + \edef\sce@b{##1}% + \edef\sce@c{##2}% + \ifx\sce@b\sce@c + \let\cyrillicencoding\sce@c + \fi}% + \def\cdp@elt##1##2##3##4{% + \sce@a{##1}{OT2}% + \sce@a{##1}{LCY}% + \sce@a{##1}{X2}% + \sce@a{##1}{T2C}% + \sce@a{##1}{T2B}% + \sce@a{##1}{T2A}% + \if@ukr@uni@ode + %\sce@a{##1}{EU1}% + %\sce@a{##1}{EU2}% + \sce@a{##1}{TU}% + \fi}% + \cdp@list +} +\ifx\cyrillicencoding\undefined + \@setcyrillicencoding +\fi +\@onlypreamble\@setcyrillicencoding +\@onlypreamble\sce@a +\@onlypreamble\sce@b +\@onlypreamble\sce@c +% \end{macrocode} +% The last lines are to free the memory occupied by the macros +% |\@setcyrillicencoding| and |\sce@x| that are useless in the document. +% The contents of |\@begindocumenthook| is cleared automatically. +% +% If |\cyrillicencoding| is still undefined, we issue warning and provide +% reasonable default value for |\cyrillicencoding|. We then load default +% encoding definitions; we use the lowercase names (i.e., +% \texttt{lcyenc.def} instead of \texttt{LCYenc.def}) when we do that. +% +% \begin{macrocode} +\ifdefined\cyrillicencoding +\else + \if@ukr@uni@ode + \ifdefined\XeTeXrevision + \edef\cyrillicencoding{EU1} + \else + \ifdefined\luatexversion + \edef\cyrillicencoding{EU2} + \fi + \fi + \else + \edef\cyrillicencoding{T2A} + \fi + \PackageWarning{babel}% + {No Cyrillic font encoding has been loaded so far.\MessageBreak + A font encoding should be declared before babel.\MessageBreak + Default `\cyrillicencoding' encoding will be loaded + }% + \lowercase\expandafter{\expandafter\input\cyrillicencoding enc.def\relax}% +% \end{macrocode} +% As final wisdom, we repeat |\@setcyrillicencoding| at |\begin{document}| +% time. We could not avoid previous call to |\@setcyrillicencoding| since +% compiler scan \file{.aux} file before it executes delayed code, and +% \file{.aux} may contain |\set@langauge{ukrainian}|; the latter rises an +% error if |\cyrillicencoding| would not be defined by that time. +% \begin{macrocode} + \AtBeginDocument{\@setcyrillicencoding} +\fi +% \end{macrocode} +% +% \Describe\Ukrainian{} +% \DescribeOther\cyr{} +% \DescribeOther\cyrillictext{} +% For the sake of backward compatibility we keep the macro |\Ukrainian| +% but redefine its meaning; now |\Ukrainian| is simply an alias for +% |\selectlanguage{ukrainian}|. +% +% We define |\cyrillictext| and its alias |\cyr| but remove another alias +% |\Ukr|; these macros are intended for use within \texttt{babel} macros and +% do not perform complete switch of the language. +% In particular, they to do no switch captions and the name of current +% language stored in the macro |\languagename|. This inconsistency might +% break some assumptions embedded into \babel's. +% For example, the |\iflanguage| macro will fail. +% +% Second, |\cyrillictext| does +% not activate shorthands, so that |"<|, |">|, |"`|, |"'|, +% |"---|, e.t.c. will not work. +% +% And third, |\cyrillictext| does not write its trace +% to \file{.aux} file, which might result in wrong typesetting of +% table of content, list of table and list of figures in multilingual +% documents. +% +% Due to any of these reasons the use of the declaration |\cyrillictext| and +% its aliases in ordinary text is strongly discouraged. Instead of the +% declaration |\cyrillictext| it is recommended to use |\Ukrainian| or the +% command |\foreignlanguage| defined in the \babel{} core; their +% functionality is similar to |\selectlanguage{ukrainian}| but they did not +% switch caption names, dates and shorthands. +% +% \begin{macrocode} +\DeclareRobustCommand{\Ukrainian}{\selectlanguage{\ukrainian}} +\DeclareRobustCommand{\cyrillictext}{% + \fontencoding\cyrillicencoding\selectfont + \let\encodingdefault\cyrillicencoding + \expandafter\set@hyphenmins\ukrainianhyphenmins + \language\l@ukrainian}% +\let\cyr\cyrillictext +% \end{macrocode} +% +% \textsc{Next part of code should be moved to \texttt{X2enc.def}, +% \texttt{X2enc.dfu}, if needed.} +% Since the \texttt{X2} encoding does not contain Latin letters, we +% should make some redefinitions of \LaTeX\ macros which implicitly +% produce Latin letters. +% +% 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} +\expandafter\ifx\csname T@X2\endcsname\relax\else + \DeclareTextSymbolDefault{\AA}{OT1} + \DeclareTextSymbolDefault{\aa}{OT1} + \DeclareTextCommand{\aa}{OT1}{\r a} + \DeclareTextCommand{\AA}{OT1}{\r A} +\fi +% \end{macrocode} +% +% +% The macro |\cyrillictext| switches current (e.g., Latin) font encoding +% to a Cyrillic font encoding stored in |\cyrillicencoding|. The macro +% |\latintext| switches back. This method assumes that an font +% encoding is a Latin one. But in fact the latter assumption does not matter +% if any other language is switched on using same method, i.e. +% if corresponding \file{.ldf} file defines required macros to switch that +% language on from same standard (Latin) state. +% Since |\latintext| is defined by the core of babel we do not repeat its +% definition here. +% +% \begin{macrocode} +%\DeclareRobustCommand{\latintext}{% +% \fontencoding{\latinencoding}\selectfont +% \def\encodingdefault{\latinencoding}} +%\let\lat\latintext +% \end{macrocode} +% +%\Describe\textcyrillic{\marg{text}} +% The macros |\cyrillictext| and |\latintext| are declarations. +% For shorter chunks of text the commands |\textcyrillic| and |\textlatin| +% can be used. +% +% The macro |\textcyrillic| takes an argument which is then typeset using the +% requested font encoding. It is thus an equivalent or +% |\foreignlangauge{ukrainian}|. +% +% \begin{macrocode} +\DeclareTextFontCommand{\textcyrillic}{\cyrillictext} +% \end{macrocode} +% +% +% \subsection{Input encoding} +% +% User should 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 \pkg{inputenc} package should be explicitly called by +% |\usepackage{inputenc}| \emph{before} \babel. +% Note however that default font encoding \texttt{T2A} fits +% well enough to Ukrainian version of Windows ANSI encoding which is almost +% equivalent to \texttt{cp1251}. +% +% \begin{macrocode} +\@ifpackageloaded{inputenc}{% + \if@ukr@uni@ode + \PackageWarning{babel}{inputenc should not be used with LuaTeX or XeTeX} + \fi +}{% + %\def\reserved@a{LWN}% + %\ifx\reserved@a\cyrillicencoding\else + \def\reserved@a{OT2}% + \ifx\reserved@a\cyrillicencoding + \else + \def\reserved@a{EU1}% + \ifx\reserved@a\cyrillicencoding\else + \def\reserved@a{EU2}% + \ifx\reserved@a\cyrillicencoding\else + \PackageWarning{babel}% + {No input encoding specified for Ukrainian language} + \fi + \fi + \fi + %\fi +} +% \end{macrocode} +% +% +% \subsection{Shorthands} +% +% The double quote character \texttt{"} is declared to be active in +% Ukrainian language. +% +% \begin{macrocode} +\initiate@active@char{"} +% \end{macrocode} +% +% Initial activation state will set to on later in section \ref{sss:extra}. +% +% \Describe\dq{} +% The active character |"| is used as indicated in +% table~\ref{tab:ukrainian-quote}. We save the original double quote +% character in the |\dq| macro 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} +% +% \subsubsection{Quotes} +% +% We set |"`| and |"'| as shorthands for |\quotedblbase| and +% |\textquotedblleft|, respectively. These shorthands +% were defined through german quotes |\glqq| and |\grqq|, which in their turn +% are defined in \pkg{babel.def} via |\quotedblbase| and |\textquotedblleft|, +% respectively. It occurred, that old definition caused errors in Unicode +% mode if \pkg{fontspec} is loaded. +% +% The shorthands |"<| and |">| were +% declared to be equivalents for the French quotes |\flqq| and |\frqq|, +% respectively. They are defined in \pkg{babel.def} via |\guillemotleft| and +% |\guillemotrigh|. However, |\flqq| and |\guillemotleft| (and their right +% counterparts) are typeset differently if current encoding is not +% \texttt{T1}. Therefore, we define |"<| and |">| directly +% through |\guillemotleft| and |\guillemotrigh|. +% +% \begin{macrocode} +\declare@shorthand{ukrainian}{"`}{\quotedblbase} +\declare@shorthand{ukrainian}{"'}{\textquotedblleft} +\declare@shorthand{ukrainian}{"<}{\guillemotleft} +\declare@shorthand{ukrainian}{">}{\guillemotright} +% \end{macrocode} +% +% Next set of shorthands is intended for variations of standard macro |\-| +% which indicates explicitly breakpoint for hyphenation in a word. Meaning +% of these shorthands is explained in table~\ref{tab:ukrainian-quote}. +% +% \begin{macrocode} +\declare@shorthand{ukrainian}{""}{\hskip\z@skip} +\declare@shorthand{ukrainian}{"~}{\textormath{\leavevmode\hbox{-}}{-}} +\declare@shorthand{ukrainian}{"=}{\nobreak-\hskip\z@skip} +\declare@shorthand{ukrainian}{"|}{% + \textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}} +% \end{macrocode} +% +% \subsubsection{Emdash, endash and hyphenation sign} +% +% To distinguish between |"-| and |"---| we must check whether the next +% after |-| token is a hyphen character. +% If it is, we output an emdash, otherwise a hyphen sign. Therefor +% \TeX\ looks for the next token after the first `|-|', writes +% its meaning to |\ukrainian@sh@next| and finally call for |\ukrainian@sh@tmp|. +% +% \begin{macrocode} +\declare@shorthand{ukrainian}{"-}{% + \def\ukrainian@sh@tmp{% + \if\ukrainian@sh@next-\expandafter\ukrainian@sh@emdash + \else% + \expandafter\ukrainian@sh@hyphen% + \fi}% + \futurelet\ukrainian@sh@next\ukrainian@sh@tmp} +% \end{macrocode} +% Two macros |\ukrainian@sh@hyphen| and |\ukrainian@sh@emdash| called by +% |\ukrainian@sh@tmp| are defined below. The second of +% them has two parameters since it must gobble next two hyphen signs. +% \begin{macrocode} +\def\ukrainian@sh@hyphen{\nobreak\-\bbl@allowhyphens} +\def\ukrainian@sh@emdash#1#2{\cdash-#1#2} +% \end{macrocode} +% +% \Describe\cdash{} +% In its turn, |\ukrainian@sh@emdash| simply calls for |\cdash| which has +% rich use. It analyses 3rd of 3 characters and calls for one of few +% predefined macros |\@Acdash|, |\@Bcdash|, |\@Ccdash|. +% \begin{macrocode} +\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} +% +% All these 3 internal macros call for |\cyrdash|, which type Cyrillic +% emdash, but put different spaces around the dash. +% +% |\@Acdash| is invoked by |"---|. It types Cyrillic emdash to be used +% inside a text and puts an unbreakable thin space before the dash if a +% \textit{space} is placed before |"---| in the source file; +% can be used after display maths formulae, formatted lists, enumerations, etc. +% \begin{macrocode} +\def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi + \cyrdash\hskip.2em\ignorespaces}% +% \end{macrocode} +% +% |\@Bcdash| is invoked by |"--~|. It types Cyrillic emdash in compound +% names (like Mendeleev--Klapeiron); requires no space characters around and +% adds extra space after the dash. +% \begin{macrocode} +\def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi + \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}% +% \end{macrocode} +% +% |\@Ccdash| is invoked by |"--*|. It denotes direct speech and adds small +% space after the dash. +% \begin{macrocode} +\def\@Ccdash{\leavevmode + \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}% +% \end{macrocode} +% +% \Describe\cyrdash{} +% The |\cyrdash| macro is defined in Cyrillic font encodings (LCY, T2*, OT2, +% and |X2|) by means of |\DeclareTextSymbol|. In T2* encodings |\cyrdash| +% refers to same code point 22 as |\textemdash| does so that these two macros +% are equivalent. However the dash at the code point 22 have different length +% in different fonts. The dash in Cyrillic fonts LH is 20\% shorter as +% compared to Latin fonts such as CM (Computer Modern). As a result, the dash +% typed by the ligature |---| or its variations mentioned in Table +% \ref{tab:russian-quote} might change its length after |\selectlanguage|. +% +% The |\cyrdash| macro is not available in Latin encodings such as T1. Therefor +% an explicit or implicit call for |\cyrdash| when current language is English +% causes an error. For such a case, we provide a fake default. A standard check +% such as |\ifx\cyrdash\undefined ...\fi| fails to detect absent definitions +% for Latin encodings since the |\cyrdash| macro is in fact defined. Therefor +% we use the |\ProvideTextCommandDefault| method: +% \changes{1.4b}{2017/08/10}{Default for \cs{cyrdash} is provided} +% \begin{macrocode} +\PackageInfo{babel}{Default for \string\cyrdash\space is provided} +%%\ProvideTextCommandDefault{\cyrdash}{\iflanguage{ukrainian}% +%% {\hbox to.8em{--\hss--}}{\textemdash}} +\ProvideTextCommandDefault{\cyrdash}{\hbox to.8em{--\hss--}} +% \end{macrocode}% +% +% The |\cyrdash| macro is not defined in the Unicode encoding TU. The fake +% definition given above cope with this case. +% +% Finally, we define a shorthand thin space to be placed between initials +% as in |D.",Mendeleev|. When used instead of |\,| as in |D.\,Mendeleev| +% it allows hyphenation in the next word. +% +% \begin{macrocode} +\declare@shorthand{ukrainian}{",}{\nobreak\hskip.2em\ignorespaces} +% \end{macrocode} +% +% +% \subsection{Switching to and from Ukrainian} +% +% Now we define additional macros used to reset current language to +% Ukrainian and back +% to some original state. The package \babel{} based on the assumption +% that original state is characterized by a Latin encoding. Previously, +% for back reset the macro |\OriginalTeX| was used, but now use |\latintext| +% for the same purpose. +% +% +% \subsubsection{Caption names} +% +% First, we define Ukrainian equivalents for Ukrainian caption names. +% +% \Describe\captionsukrainian{} +% The macro |\captionsukrainian| defines caption names used in the +% four standard document classes provided with \LaTeX. The macro |\cyr| +% activates Cyrillic encoding. It could be dropped if we would be sure +% that Ukrainian captions are called only if current language is Ukrainian. +% However, the macros such as |\Ukrainian| do not conform to strict rules +% of the package \babel{} as explained in the above. +% +% We now use \babel{}'s 3.9 |\Set<macro>| macro for defining caption names as well +% as date. If Unicode engine is running, Cyrillic letters are typed +% in by their Unicode code-points. +% +% \begin{macrocode} +% +% ------------------------- Caption Names (Unucode case) ------------------------------- +% +\if@ukr@uni@ode + \PackageInfo{ukrainian.ldf}{Executing the 3.9 or latter} + \StartBabelCommands*{ukrainian}{captions}[unicode, fontenc=EU1 EU2, charset=utf8] + \SetString\prefacename{Вступ}% [babel] + \SetString\refname{Література}% [only article] + \SetString\abstractname{Анотація}% [only article, report] + \SetString\bibname{Бібліоґрафія}% [only book, report] + \SetString\chaptername{Розділ}% [only book, report] + \SetString\appendixname{Додаток}% + \SetString\contentsname{Зміст}% + \SetString\tocname{\contentsname}% + \SetString\listfigurename{Перелік ілюстрацій}% + \SetString\listtablename{Перелік таблиць}% + \SetString\indexname{Предметний покажчик}% + \SetString\authorname{Іменний покажчик}% + \SetString\figurename{Рис.}% + \SetString\tablename{Таблиця}% + \SetString\partname{Частина}% + \SetString\enclname{вкл.}% + \SetString\ccname{вих.}% + \SetString\headtoname{вх.}% + \SetString\pagename{с.}% [letter] + \SetString\seename{див.}% + \SetString\alsoname{див.\ також}% + \SetString\proofname{Доведення}% [amsthm] + \SetString\glossaryname{Словник термінів}% + \SetString\acronymname{Абревіатури}% [glossaries] {Acronyms} + \SetString\lstlistingname{Лістинг}% [listings] (the environment) {Listing} + \SetString\lstlistlistingname{Лістинги}% [listings] (the "List of") {Listings} + \SetString\nomname{Позначення}% + \SetString\notesname{Нотатки}% [endnotes] {Notes} +% \end{macrocode} +% Additional definitions for the package \pkg{nomencl}: +% \begin{macrocode} +% +% ----------------------------- nomencl (Unucode case) --------------------------------- +% + \ifdefined\nomname% + \addto\captionsukrainian{% + \def\eqdeclaration#1{, див.\nobreakspace(#1)}% + \def\pagedeclaration#1{, стор.\nobreakspace#1}% + }% + \fi + \EndBabelCommands +\else +% +% ------------------------- Caption Names (Nonunucode case) ---------------------------- +% + \StartBabelCommands*{ukrainian}{captions} + \SetString\prefacename{{\cyr\CYRV\cyrs\cyrt\cyru\cyrp}}% + \SetString\refname{% + {\cyr\CYRL\cyrii\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyra}}% + \SetString\abstractname{% + {\cyr\CYRA\cyrn\cyro\cyrt\cyra\cyrc\cyrii\cyrya}}% + \SetString\bibname{% + {\cyr\CYRB\cyrii\cyrb\cyrl\cyrii\cyro\cyrgup\cyrr\cyra\cyrf\cyrii\cyrya}}% + \SetString\chaptername{{\cyr\CYRR\cyro\cyrz\cyrd\cyrii\cyrl}}% + \SetString\appendixname{{\cyr\CYRD\cyro\cyrd\cyra\cyrt\cyro\cyrk}}% + \SetString\contentsname{{\cyr\CYRZ\cyrm\cyrii\cyrs\cyrt}}% + \SetString\tocname{\contentsname}% + \SetString\listfigurename{{\cyr\CYRP\cyre\cyrr\cyre\cyrl\cyrii\cyrk + \ \cyrii\cyrl\cyryu\cyrs\cyrt\cyrr\cyra\cyrc\cyrii\cyrishrt}}% + \SetString\listtablename{{\cyr\CYRP\cyre\cyrr\cyre\cyrl\cyrii\cyrk + \ \cyrt\cyra\cyrb\cyrl\cyri\cyrc\cyrsftsn}}% + \SetString\indexname{{\cyr\CYRP\cyrr\cyre\cyrd\cyrm\cyre\cyrt\cyrn\cyri\cyrishrt + \ \cyrp\cyro\cyrk\cyra\cyrzh\cyrch\cyri\cyrk}}% + \SetString\authorname{{\cyr\CYRII\cyrm\cyre\cyrn\cyrn\cyri\cyrishrt + \ \cyrp\cyro\cyrk\cyra\cyrzh\cyrch\cyri\cyrk}}% + \SetString\figurename{{\cyr\CYRR\cyri\cyrs.}}% + \SetString\tablename{{\cyr\CYRT\cyra\cyrb\cyrl.}}% + \SetString\partname{{\cyr\CYRCH\cyra\cyrs\cyrt\cyri\cyrn\cyra}}% + \SetString\enclname{{\cyr\cyrv\cyrk\cyrl\cyra\cyrd\cyrk\cyra}}% + \SetString\ccname{{\cyr\cyrk\cyro\cyrp\cyrii\cyrya}}% + \SetString\headtoname{{\cyr\cyrv\cyrh.}}% + \SetString\pagename{{\cyr\cyrs.}}% + \SetString\seename{{\cyr\cyrd\cyri\cyrv.}}% + \SetString\alsoname{{\cyr\cyrd\cyri\cyrv.\ \cyrt\cyra\cyrk\cyro\cyrzh}}% + \SetString\proofname{{\cyr\CYRD\cyro\cyrv\cyre\cyrd\cyre\cyrn\cyrn\cyrya}}% + \SetString\glossaryname{{\cyr\CYRS\cyrl\cyro\cyrv\cyrn\cyri\cyrk + \ \cyrt\cyre\cyrr\cyrm\cyrii\cyrn\cyrii\cyrv}}% + \SetString\acronymname{\cyr\CYRA\cyrb\cyrr\cyre\cyrv\cyrii\cyra\cyrt\cyru\cyri\cyri}% + \SetString\lstlistingname{\cyr\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg}% + \SetString\lstlistlistingname{\cyr\CYRL\cyrii\cyrs\cyrt\cyri\cyrn\cyrg\cyri}% + \SetString\nomname{\CYRP\cyro\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyrn\cyrya}% + \SetString\notesname{\CYRN\cyro\cyrt\cyra\cyrt\cyrk\cyri}% + \EndBabelCommands +\fi +% \end{macrocode} +% +% \subsubsection{Date in Ukrainian} +% +% \Describe\dateukrainian{} +% The macro |\dateukrainian| is used to reset the macro |\today| in Ukrainian. +% +% \begin{macrocode} +% +% ---------------------------- Date (Unicode case) ------------------------------------- +% +\if@ukr@uni@ode + \PackageInfo{ukrainian.ldf}{Executing the post 3.9 branch for dates} + \StartBabelCommands*{ukrainian}{date}[unicode, fontenc=EU1 EU2, charset=utf8] + \SetStringLoop{month#1name}{% + січня,% + лютого,% + березня,% + квітня,% + травня,% + червня,% + липня,% + серпня,% + вересня,% + жовтня,% + листопада,% + грудня% + } + \SetString\abbgyear{р.}% +\else +% +% ---------------------------- Date (Nonunicode case) ---------------------------------- +% + \StartBabelCommands*{ukrainian}{date} + \SetStringLoop{month#1name}{% + \cyrs\cyrii\cyrch\cyrn\cyrya,% + \cyrl\cyryu\cyrt\cyro\cyrg\cyro,% + \cyrb\cyre\cyrr\cyre\cyrz\cyrn\cyrya,% + \cyrk\cyrv\cyrii\cyrt\cyrn\cyrya,% + \cyrt\cyrr\cyra\cyrv\cyrn\cyrya,% + \cyrch\cyre\cyrr\cyrv\cyrn\cyrya,% + \cyrl\cyri\cyrp\cyrn\cyrya,% + \cyrs\cyre\cyrr\cyrp\cyrn\cyrya,% + \cyrv\cyre\cyrr\cyre\cyrs\cyrn\cyrya,% + \cyrzh\cyro\cyrv\cyrt\cyrn\cyrya,% + \cyrl\cyri\cyrs\cyrt\cyro\cyrp\cyra\cyrd\cyra,% + \cyrg\cyrr\cyru\cyrd\cyrn\cyrya% + }% + \SetString\abbgyear{\cyrr.}% +\fi +% \end{macrocode} +% Typesetting date in both unicode and nonunicode cases +% \begin{macrocode} +% +% ---------------------------- Date typesetting ---------------------------------------- +% +\SetString\today{\number\day~\csname month\romannumeral\month name\endcsname\space + \number\year~\abbgyear}% +\EndBabelCommands +% \end{macrocode} +% +% \subsubsection{Hyphenation patterns} +% +% Ukrainian hyphenation patterns are automatically activated every time +% Ukrainian language is selected via |\selectlanguage|, |\foreignlanguage| +% or equivalent command. But we need to declare values of +% |\lefthyphenmin| and |\righthyphenmin|; both are set to~2. +% +% +% \begin{macrocode} +\providehyphenmins{\CurrentOption}{\tw@\tw@} +\providehyphenmins{ukrainian}{\tw@\tw@} +% \end{macrocode} +% +% \subsubsection{Extra definitions}\label{sss:extra} +% +% \Describe\extrasukrainian{} +% \DescribeOther\noextrasukrainian{} +% The macro |\extrasukrainian| performs extra definitions in addition to +% resetting the caption names and date. +% The macro |\noextrasukrainian| is used to cancel the actions of +% |\extrasukrainian|. +% +% +% First, we instruct \babel{} to switch font encoding using earlier +% defined macros |\cyrillictext| and |\latintext|. +% +% \begin{macrocode} +\addto\extrasukrainian{\cyrillictext} +\addto\noextrasukrainian{\latintext} +% \end{macrocode} +% +% Second, we specify that the Ukrainian group of shorthands should be used. +% +% \begin{macrocode} +\addto\extrasukrainian{\languageshorthands{ukrainian}} +\addto\extrasukrainian{\bbl@activate{"}} +\addto\noextrasukrainian{\bbl@deactivate{"}} +% \end{macrocode} +% +% Now the action |\extrasukrainian| has to execute is to make sure that the +% command |\frenchspacing| is in effect. If this is not the case the +% execution of |\noextrasukrainian| will switch it off again. +% +% \begin{macrocode} +\addto\extrasukrainian{\bbl@frenchspacing} +\addto\noextrasukrainian{\bbl@nonfrenchspacing} +% \end{macrocode} +% +% \subsection{Alphabetic enumerations} +% +% The traditional alphabetical enumerations in Ukrainan texts use the +% Cyrillic alphabet (bar several letters). In principle, enumerations are +% a matter for class and style designers but the same can be said also +% about things, other than enumerations, such as names of sections and +% bibliography lists. +% +% The alphabet is not the only difference, differences also in the labels format. +% According to Cyrillic typesetting tradition and also with ДСТУ 3008:2015, +% label format should be with one right parenthesis and the top level enumerate should be +% alphabetical, but we believe that this is not necessary +% for including such changes in \file{\jobname.ldf}, for this purpose you can simply redefine +% required counters in preamle by common \LaTeX way. +% +% \begin{verbatim} +% \def\theenumi{\alph{enumi}} +% \def\labelenumi{\theenumi)} +% \def\theenumii{\alph{enumii}} +% \def\labelenumii{\theenumii)} +% \end{verbatim} + +% +% Nevertheless, the Ukrainian \babel{} by default turns on alphabetical enumeration +% with Cyrillic letters. This means that enumerated lists that would be labelled with +% Latin letters in Latin scripts are labelled with Cyrillic ones instead. +% +% \Describe\Alph{} +% Starting from this virsion, we remove an macro |\Asbuk| +% (also it lowercase counterpart |\asbuk|). Now we redefine the macro |\Alph|, +% which is now produces (uppercase) Cyrillic letters instead of Latin ones +% when Ukrainian is switched on. +% +% The letters Ґ, Є, З, І, Ї, Й, О, Ч, Ь, are skipped for such enumeration (see \href{http://www.uintei.kiev.ua/readarticle.php?article_id=151}{ДСТУ 3008:2015}). +% +% \begin{macrocode} +\addto\extrasukrainian{% +% \end{macrocode} +% When Ukrainian swithsed off, the previous meaning of |\@Alph| will be restored +% \begin{macrocode} + \babel@save{\@Alph}% + \if@ukr@uni@ode% + \def\@Alph#1{% + \ifcase#1\or% + А\or Б\or В\or Г\or Д\or Е\or Ж\or% + И\or К\or Л\or М\or Н\or П\or Р\or% + С\or Т\or У\or Ф\or Х\or Ц\or Ш\or% + Щ\or Ю\or Я% + \else% + \@ctrerr% + \fi}% + \else + \def\@Alph#1{% + \ifcase#1\or% + \CYRA\or\CYRB\or\CYRV\or\CYRG\or\CYRD\or\CYRE\or\CYRZH\or% + \CYRI\or\CYRK\or\CYRL\or\CYRM\or\CYRN\or\CYRP\or\CYRR\or% + \CYRS\or\CYRT\or\CYRU\or\CYRF\or\CYRH\or\CYRC\or\CYRSH\or% + \CYRSHCH\or\CYRYU\or\CYRYA% + \else% + \@ctrerr% + \fi}% + \fi +} +% \end{macrocode} +% \Describe\alph{} +% Now the macro |\alph| produces lowercase Cyrillic letters. +% +% The lowercase letters ґ, є, з, і, ї, й, о, ч, ь, are also skipped such enumeration (see \href{http://www.uintei.kiev.ua/readarticle.php?article_id=151}{ДСТУ 3008:2015}). +% \begin{macrocode} +\addto\extrasukrainian{% +% \end{macrocode} +% When Ukrainian swithsed off, the previous meaning of |\@alph| will be restored +% \begin{macrocode} + \babel@save{\@alph}% + \if@ukr@uni@ode% + \def\@alph#1{% + \ifcase#1\or% + а\or б\or в\or г\or д\or е\or ж\or% + и\or к\or л\or м\or н\or п\or р\or% + с\or т\or у\or ф\or х\or ц\or ш\or% + щ\or ю\or я% + \else% + \@ctrerr% + \fi}% + \else + \def\@alph#1{% + \ifcase#1\or% + \cyra\or\cyrb\or\cyrv\or\cyrg\or\cyrd\or\cyre\or\cyrzh\or% + \cyri\or\cyrk\or\cyrl\or\cyrm\or\cyrn\or\cyrp\or\cyrr\or% + \cyrs\or\cyrt\or\cyru\or\cyrf\or\cyrh\or\cyrc\or\cyrsh\or% + \cyrshch\or\cyryu\or\cyrya% + \else% + \@ctrerr% + \fi}% + \fi +} +% \end{macrocode} +% +% \subsection{Ukrainian mathetematical typography traditions} +% +% \Describe\sh{} +% \DescribeOther\ch{}% +% \DescribeOther\tg{}% +% \DescribeOther\ctg{}% +% \DescribeOther\arctg{}% +% \DescribeOther\arcctg{}% +% \DescribeOther\th{}% +% \DescribeOther\cth{}% +% \DescribeOther\cosec{}% +% We also define few math operator names according to Ukrainian mathetematical +% typography traditions. Some math functions in Ukrainian math books have names +% different from English writings. For example, \texttt{sinh} in +% Ukrainian is called \texttt{sh}. Special consideration needs the +% macro |\th| that conflicts with the text symbol |\th| +% defined in Latin~1 encoding: +% +% \begin{macrocode} +\def\sh{\mathop{\operator@font sh}\nolimits} +\def\ch{\mathop{\operator@font ch}\nolimits} +\def\tg{\mathop{\operator@font tg}\nolimits} +\def\ctg{\mathop{\operator@font ctg}\nolimits} +\def\arctg{\mathop{\operator@font arctg}\nolimits} +\def\arcctg{\mathop{\operator@font arcctg}\nolimits} +\addto\extrasukrainian{% + \babel@save{\th}% + \let\ltx@th\th + \def\th{\textormath{\ltx@th}% + {\mathop{\operator@font th}\nolimits}}% +} +\def\cth{\mathop{\operator@font cth}\nolimits} +\def\cosec{\mathop{\operator@font cosec}\nolimits} +% \end{macrocode} +% +% For compatibility with older Ukrainian packages we leave definition of the |\No| +% macro. However the Ukrainian number sign is now superseded with |\textnumero|. +% Moreover, it can be found on the keyboard. +% \begin{macrocode} +\DeclareRobustCommand{\No}{% + \ifmmode{\nfss@text{\textnumero}}\else\textnumero\fi} +% \end{macrocode} +% +% \subsection{Final settings} +% +% The macro |\ldf@finish| does work needed +% at the end of each \file{.ldf} file. This +% includes resetting the category code of the \texttt{@}-sign, +% loading a local configuration file, and preparing the language +% to be activated at |\begin{document}| time. +% +% \begin{macrocode} +\ldf@finish{ukrainian} +% \end{macrocode} +% +% +%\iffalse +%</code> +%\fi +% \CheckSum{1088} +%\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 + +%% Nonunicode Cyrillic Letters +%% \CYRA=А +%% \CYRB=Б +%% \CYRV=В +%% \CYRG=Г +%% \CYRGUP=Ґ +%% \CYRD=Д +%% \CYRE=Е +%% \CYRIE=Є +%% \CYRZH=Ж +%% \CYRZ=З +%% \CYRI=И +%% \CYRII=I +%% \CYRYI=Ї +%% \CYRISHRT=Й +%% \CYRK=К +%% \CYRL=Л +%% \CYRM=М +%% \CYRN=Н +%% \CYRO=О +%% \CYRP=П +%% \CYRR=Р +%% \CYRS=С +%% \CYRT=Т +%% \CYRU=У +%% \CYRF=Ф +%% \CYRH=Х +%% \CYRC=Ц +%% \CYRCH=Ч +%% \CYRSH=Ш +%% \CYRSHCH=Щ +%% \CYRYU=Ю +%% \CYRYA=Я +%% \CYRSFTSN=Ь +%% +%% \cyra=а +%% \cyrb=б +%% \cyrv=в +%% \cyrg=г +%% \cyrgup=ґ +%% \cyrd=д +%% \cyre=е +%% \cyrie=є +%% \cyrzh=ж +%% \cyrz=з +%% \cyri=и +%% \cyrii=i +%% \cyryi=ї +%% \cyrishrt=й +%% \cyrk=к +%% \cyrl=л +%% \cyrm=м +%% \cyrn=н +%% \cyro=о +%% \cyrp=п +%% \cyrr=р +%% \cyrs=с +%% \cyrt=т +%% \cyru=у +%% \cyrf=ф +%% \cyrh=х +%% \cyrc=ц +%% \cyrch=ч +%% \cyrsh=ш +%% \cyrshch=щ +%% \cyryu=ю +%% \cyrya=я +%% \cyrsftsn=ь
\ No newline at end of file |