% \iffalse meta-comment % % Copyright 2019--2022 Uroš Stefanović and any individual authors % listed elsewhere in this file. All rights reserved. % Earlier Maintainers: Dejan Muhamedagić, Slobodan Janković, Javier Bezos López, Johannes L. Braams % % This file is intended to be used with 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 Uroš Stefanović. % % 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 % \iffalse % Tell the \LaTeX\ system who we are and write an entry on the % transcript. %<*dtx> \ProvidesFile{serbian.dtx} % %\ProvidesLanguage{serbian} %\fi %\ProvidesFile{serbian.dtx} [2022/09/30 2.2a Serbian Latin support for the Babel system] %\iffalse %% File `serbian.dtx' % % This file is part of the babel system, it provides the source % code for the Serbian Latin language definition file. %<*filedriver> \documentclass{ltxdoc} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage[a4paper,top=2.0cm,left=3cm,right=2.5cm,bottom=2cm,includefoot,includehead]{geometry} \title{The Serbian Latin Language in the \babel\ system} \author{Uroš Stefanović\footnote{\texttt{urostajms@gmail.com}}} \newcommand*\babel{\textsf{babel}} \newcommand*\langvar{$\langle \it lang \rangle$} \newcommand*\note[1]{} \newcommand*\Lopt[1]{\textsf{#1}} \newcommand*\file[1]{\texttt{#1}} \begin{document} \maketitle \DocInput{serbian.dtx} \end{document} % %\fi % \GetFileInfo{serbian.dtx} % % \section*{The Serbian Latin Language} % % The file \file{\filename} defines all the language definition % macros for the Serbian language, typeset in a Latin script. % % For this language the character |"| is made active. In % table~\ref{tab:serbian-quote} an overview is given of its % purpose. One of the reasons for this is that in the Serbian % language some special characters are used. % % \begin{table}[htb] % \begin{center} % \begin{tabular}{lp{8cm}} % |"c| & |\v c|, also implemented for the lowercase and uppercase s and z. \\ % |"d| & |\dj|, also implemented for |"D|. \\ % |"-| & An explicit hyphen sign, allowing hyphenation % in the rest of the word; inserts a hyphen which is repeated at the beginning of the % next line (recommended to use for compound words with hyphen). \\ % \verb="|= & Disables ligature at this position. \\ % |""| & Similar to |"-| but prints no hyphen sign. \\ % |"~| & Compound word mark without a breakpoint, prints hyphen % prohibiting hyphenation at the point. \\ % |"=| & A compound word mark with a breakpoint, prints hyphen % allowing hyphenation in the composing words. \\ % |"`| & German opening double quote (looks like ,\kern-0.08em,). \\ % |"'| & German closing double quote (looks like ``). \\ % |"'| & (if the \Lopt{quotes} attribute is used) Closing double quote (looks like ''). \\ % |"<| & French opening double quote (looks like $<\!\!<$). \\ % |">| & French closing double quote (looks like $>\!\!>$). \\ % \end{tabular} % \caption{The extra definitions made % by \file{serbian.ldf}}\label{tab:serbian-quote} % \end{center} % \end{table} % % Macro |\today| prints the date in Serbian. Alternatively, if attribute \Lopt{datei} is used, % |\today| prints the current date, but prints `juni' and `juli' for `June' and `July'. % If you prefer to use `juni' and `juli' instead of default `jun' and `jul', % use the \Lopt{datei} attribute. Also, the |\today*| macro prints the date without dot after the year % (used when after the date is the punctuation mark, such as comma). % Alternatively, the commands |\todayRoman| and |\todayRoman*| prints the current date using Roman numerals for months; % |\todayGen| and |\todayGen*| prints the current month name in the genitive case, % and |\todayArabic| and |\todayArabic*| prints the current month as a number. % % The alphabetical enumerations in texts use the Latin alphabet and alphabetic order, % but the letters q, w, x and y are omitted by the rules of the Serbian language (22 letters are used). % However, if the user wants to use the English alphabet for the enumeration (26 letters), this option is also available. % We will also provide the enumeration with the Latin letters but in alphabetic order that matches the Cyrillic alphabet (30 letters). % This of course shouldn't be used when the text is written in the Latin script. % However, sometimes the text is written in the Latin script so it can be later % converted into Cyrillic script (for example using the |OT2| encoding); in such case this alphabet order will be useful. % One can manually switch the enumeration alphabet with the commands |\enumCyr|, |\enumLat| and |\enumEng|. % This commands can be used after the |\begin{document}| when the \Lopt{serbian} language is active. % 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. % % Apart from defining shorthands we need to make sure that the % first paragraph of each section is indented. Furthermore the % following new math operators are defined: |\sh|, |\ch|, |\tg|, |\ctg|, % |\arctg|, |\arcctg|, |\th|, |\cth|, |\arsh|, % |\arch|, |\arth|, |\arcth|, |\cosec|, |\Prob|, |\Expect|, |\Variance|, % |\arcsec|, |\arccosec|, |\sech|, |\cosech|, |\arsech|, |\arcosech|, % |\NZD|, |\nzd|, |\NZS|, |\nzs|. % % By default, a ekavian spelling is enabled. For ijekavian % spelling can be enabled by setting the attribute to \Lopt{ijekav}. To set % an attribute, put the |\languageattribute| macro within a document preamble after % \babel, for example, %\begin{verbatim} % \usepackage[english,serbian]{babel} % \languageattribute{serbian}{ijekav} %\end{verbatim} % Setting the \Lopt{ijekav} attribute changes the built-in strings (caption names). % For example, the part will be entitled as % `Deo' by default and as `Dio' if the % Serbian language attribute is set to \Lopt{ijekav}. % Same result can be achieved using a modifier as follows: %\begin{verbatim} % \usepackage[english,serbian.ijekav]{babel} %\end{verbatim} % Using a modifier in a package option is often better. A modifier is set after % the language name, and is prefixed with a dot (only when the language is set % as package option — neither global options nor the main key accept them). % Also, it's possible to use more than one attribute: %\begin{verbatim} % \usepackage[english,serbian.ijekav.datei.quotes]{babel} %\end{verbatim} % % The file \file{serbian.ldf} is designed to work both with % legacy non-unicode (8-bit) and new Unicode encodings of the source document % files (input encodings) and of the font files (font encodings). % % \StopEventually{} % % \section*{The code} % % 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{serbian}{captionsserbian} % \end{macrocode} % % First, we check if Lua\LaTeX\ or Xe\LaTeX\ is running. If so, we set % boolean key |\if@srb@uni@ode| to true. % % \begin{macrocode} \ifdefined\if@srb@uni@ode \PackageError{babel}{if@srb@uni@ode already defined.} \relax \fi \newif\if@srb@uni@ode \ifdefined\luatexversion \@srb@uni@odetrue \else \ifdefined\XeTeXrevision \@srb@uni@odetrue \fi\fi % \end{macrocode} % % Check if hyphenation patterns for the Serbian language have been % loaded in \file{language.dat}. Namely, we check for the existence of % |\l@serbian|. If it is not defined, we declare Serbian as dialect % for the default language number 0 which almost for sure is English. % % \begin{macrocode} \ifx\l@serbian\@undefined \@nopatterns{Serbian} \adddialect\l@serbian0 \fi % \end{macrocode} % % For Serbian the \texttt{"} character is made active. This is done % once, later on its definition may vary. Other languages in the % same document may also use the \texttt{"}~character for % shorthands; we specify that the Serbian group of shorthands % should be used. We save the original double quote character % in the |\dq| macro to keep it available. The shorthand \texttt{"-} % should be used in places where a word contains an explictit % hyphenation character. According to the rules of the Serbian language, when % a word break occurs at an explicit hyphen it must appear both at the end of the % first line and at the beginning of the second line. % % \begin{macrocode} \initiate@active@char{"} \begingroup \catcode`\"12 \def\reserved@a{\endgroup \def\@SS{\mathchar"7019 } \def\dq{"}} \reserved@a \declare@shorthand{serbian}{"c}{\textormath{\v c}{\check c}} \declare@shorthand{serbian}{"d}{\textormath{\dj}{\textnormal{\dj}}} \declare@shorthand{serbian}{"s}{\textormath{\v s}{\check s}} \declare@shorthand{serbian}{"z}{\textormath{\v z}{\check z}} \declare@shorthand{serbian}{"C}{\textormath{\v C}{\check C}} \declare@shorthand{serbian}{"D}{\textormath{\DJ}{\textnormal{\DJ}}} \declare@shorthand{serbian}{"S}{\textormath{\v S}{\check S}} \declare@shorthand{serbian}{"Z}{\textormath{\v Z}{\check Z}} \declare@shorthand{serbian}{"`}{\quotedblbase} \declare@shorthand{serbian}{"'}{\textquotedblleft} \declare@shorthand{serbian}{"<}{\guillemotleft} \declare@shorthand{serbian}{">}{\guillemotright} \declare@shorthand{serbian}{""}{\hskip\z@skip} \declare@shorthand{serbian}{"~}{\textormath{\leavevmode\hbox{-}}{-}} \declare@shorthand{serbian}{"=}{\nobreak-\hskip\z@skip} \declare@shorthand{serbian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}} \declare@shorthand{serbian}{"-}{\nobreak\discretionary{-}{-}{-}\bbl@allowhyphens} % \end{macrocode} % % The macro |\captionsserbian| defines all strings used in the four % standard documentclasses provided with \LaTeX. % % \begin{macrocode} \addto\captionsserbian{% \def\prefacename{Predgovor}% \def\refname{Literatura}% \def\abstractname{Sa\v zetak}% \def\bibname{Bibliografija}% \def\chaptername{Glava}% \def\appendixname{Dodatak}% \def\contentsname{Sadr\v zaj}% \def\listfigurename{Spisak slika}% \def\listtablename{Spisak tabela}% \def\indexname{Indeks}% \def\figurename{Slika}% \def\tablename{Tabela}% \def\partname{Deo}% \def\enclname{Prilozi}% \def\ccname{Kopije}% \def\headtoname{Prima}% \def\pagename{strana}% \def\seename{vidi}% \def\alsoname{vidi tako\dj e}% \def\proofname{Dokaz}% \def\glossaryname{Re\v cnik}% }% \if@srb@uni@ode \addto\captionsserbian{% \def\abstractname{Sažetak}% \def\contentsname{Sadržaj}% \def\alsoname{vidi takođe}% \def\glossaryname{Rečnik}% }% \fi \let\captionsserbian@ijekav=\captionsserbian \addto\captionsserbian@ijekav{% \def\partname{Dio}% \def\glossaryname{Rje\v cnik}% } \if@srb@uni@ode \addto\captionsserbian@ijekav{% \def\glossaryname{Rječnik}% } \fi % \end{macrocode} % % The macro |\dateserbian| redefines the commands |\today|, |\today*|, |\todayRoman| and |\todayRoman*| to produce Serbian dates. % Also, the commands |\todayGen|, |\todayGen*|, |\todayArabic| and |\todayArabic*| are provided. % % \begin{macrocode} \def\dateserbian{% \def\month@serbian{\ifcase\month\or januar\or februar\or mart\or april\or maj\or jun\or jul\or avgust\or septembar\or oktobar\or novembar\or decembar\fi}% \def\month@serbian@gen{\ifcase\month\or januara\or februara\or marta\or aprila\or maja\or juna\or jula\or avgusta\or septembra\or oktobra\or novembra\or decembra\fi}% \def\today{\number\day.~\month@serbian\ \number\year\@ifstar{}{.}}% \def\todayRoman{\number\day.~\@Roman\month~\number\year\@ifstar{}{.}}% \def\todayGen{\number\day.~\month@serbian@gen\ \number\year\@ifstar{}{.}}% \def\todayArabic{\number\day.~\number\month.~\number\year\@ifstar{}{.}}} \let\dateserbian@datei=\dateserbian \addto\dateserbian@datei{ \def\month@serbian@datei{\ifnum\month=6 juni% \else\ifnum\month=7 juli\else\month@serbian\fi\fi}% \def\today{\number\day.~\month@serbian@datei\ \number\year\@ifstar{}{.}} } % \end{macrocode} % % The Serbian hyphenation patterns can be used with |\lefthyphenmin| and % |\righthyphenmin| set to~2. (Actually, the “official” definition allows even one character for |lefthyphen|, % but it is recommended to use value two for better results.) % % \begin{macrocode} \providehyphenmins{\CurrentOption}{\tw@\tw@} \providehyphenmins{serbian}{\tw@\tw@} % \end{macrocode} % % We specify that the Serbian group of shorthands should be used. % % \begin{macrocode} \addto\extrasserbian{\languageshorthands{serbian}} \addto\extrasserbian{\bbl@activate{"}} \addto\noextrasserbian{\bbl@deactivate{"}} % \end{macrocode} % % Serbian typesetting requires |frenchspacing|. So, we add commands to % |\extrasserbian| and |\noextrasserbian| to turn it on and off, respectively. % % \begin{macrocode} \addto\extrasserbian{\bbl@frenchspacing} \addto\noextrasserbian{\bbl@nonfrenchspacing} % \end{macrocode} % % In Serbian the first paragraph of each section should be indented. % % \begin{macrocode} \let\@aifORI\@afterindentfalse \def\bbl@serbianindent{\let\@afterindentfalse\@afterindenttrue\@afterindenttrue} \def\bbl@nonserbianindent{\let\@afterindentfalse\@aifORI\@afterindentfalse} \addto\extrasserbian{\bbl@serbianindent} \addto\noextrasserbian{\bbl@nonserbianindent} % \end{macrocode} % % We redefine the macro |\Alph|, which now produces (uppercase) Latin letters without the letters q, w, x and y % when Serbian is switched on, but we will keep the English alphabet if the user wants to use it. % Also we will define Latin alphabet in order that matches Cyrillic alphabet. % The user can choose which alphabet to use through the commands |\enumCyr|, |\enumLat| and |\enumEng| % (or even to switch from one enumeration to another). % % \begin{macrocode} \newcount\srbl@lettering \srbl@lettering=\z@ \addto\extrasserbian{\babel@save\@Alph \let\@Alph\srbl@Alph} \def\srbl@Alph#1{% \ifcase\srbl@lettering \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 R\or S\or T\or U\or V\or Z\else\@ctrerr\fi \or \if@srb@uni@ode \ifcase#1\or A\or B\or V\or G\or D\or Đ\or E\or Ž\or Z\or I\or J\or K\or L\or Lj\or M\or N\or Nj\or O\or P\or R\or S\or T\or Ć\or U\or F\or H\or C\or Č\or Dž\or Š\else\@ctrerr\fi \else \ifcase#1\or A\or B\or V\or G\or D\or\DJ\or E\or\v Z\or Z\or I\or J\or K\or L\or Lj\or M\or N\or Nj\or O\or P\or R\or S\or T\or\'C\or U\or F\or H\or C\or \v C\or D\v z\or\v S\else\@ctrerr\fi \fi \or \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 \fi}% % \end{macrocode} % % The same thing will be done with the macro |\alph|. % % \begin{macrocode} \addto\extrasserbian{\babel@save\@alph \let\@alph\srbl@alph} \def\srbl@alph#1{% \ifcase\srbl@lettering \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 r\or s\or t\or u\or v\or z\else\@ctrerr\fi \or \if@srb@uni@ode \ifcase#1\or a\or b\or v\or g\or d\or đ\or e\or ž\or z\or i\or j\or k\or l\or lj\or m\or n\or nj\or o\or p\or r\or s\or t\or ć\or u\or f\or h\or c\or č\or dž\or š\else\@ctrerr\fi \else \ifcase#1\or a\or b\or v\or g\or d\or\dj\or e\or\v z\or z\or i\or j\or k\or l\or lj\or m\or n\or nj\or o\or p\or r\or s\or t\or\'c\or u\or f\or h\or c\or \v c\or d\v z\or\v s\else\@ctrerr\fi \fi \or \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 \fi}% \addto\extrasserbian{% \babel@save\enumEng\def\enumEng{\srbl@lettering=\tw@}% \babel@save\enumLat\def\enumLat{\srbl@lettering=\z@}% \babel@save\enumCyr\def\enumCyr{\srbl@lettering=\@ne}% }% % \end{macrocode} % % An |ijekav| attribute changes default behavior and activates an % alternative set of captions suitable for typesetting in ijekavian dialect. % The |quotes| attribute changes the |"'| shorthand to produce '' as closing quote, % instead the traditional `` quote of Serbian language. % Also, the |datei| attribute will produce `juni' and `juli' instead `jun' and `jul' % for date. % % \begin{macrocode} \bbl@declare@ttribute{serbian}{ijekav}{% \PackageInfo{babel}{Serbian attribute set to ijekav}% \let\captionsserbian=\captionsserbian@ijekav } \@onlypreamble\captionsserbian@ijekav \bbl@declare@ttribute{serbian}{quotes}{% \PackageInfo{babel}{Serbian attribute set to quotes}% \declare@shorthand{serbian}{"'}{\textquotedblright} } \bbl@declare@ttribute{serbian}{datei}{% \PackageInfo{babel}{Serbian attribute set to datei}% \let\dateserbian=\dateserbian@datei } \@onlypreamble\dateserbian@datei % \end{macrocode} % % Some math functions in Serbian math books have other names: % e.g. |sinh| in Serbian is written as |sh| etc. So we define a % number of new math operators. % % \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\extrasserbian{% \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\arsh{\mathop{\operator@font arsh}\nolimits} \def\arch{\mathop{\operator@font arch}\nolimits} \def\arth{\mathop{\operator@font arth}\nolimits} \def\arcth{\mathop{\operator@font arcth}\nolimits} \def\cosec{\mathop{\operator@font cosec}\nolimits} \def\arcsec{\mathop{\operator@font arcsec}\nolimits} \def\arccosec{\mathop{\operator@font arccosec}\nolimits} \def\sech{\mathop{\operator@font sech}\nolimits} \def\cosech{\mathop{\operator@font cosech}\nolimits} \def\arsech{\mathop{\operator@font arsech}\nolimits} \def\arcosech{\mathop{\operator@font arcosech}\nolimits} \def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits} \def\Expect{\mathop{\kern\z@\mathsf{E}}\nolimits} \def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits} \def\nzs{\mathop{\operator@font nzs}\nolimits} \def\nzd{\mathop{\operator@font nzd}\nolimits} \def\NZS{\mathop{\operator@font NZS}\nolimits} \def\NZD{\mathop{\operator@font NZD}\nolimits} % \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{serbian} % % \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