diff options
Diffstat (limited to 'language')
-rw-r--r-- | language/churchslavonic/README | 3 | ||||
-rw-r--r-- | language/churchslavonic/churchslavonic-en.pdf | bin | 101860 -> 131444 bytes | |||
-rw-r--r-- | language/churchslavonic/churchslavonic-ru.pdf | bin | 77115 -> 117577 bytes | |||
-rw-r--r-- | language/churchslavonic/churchslavonic.sty | 35 | ||||
-rw-r--r-- | language/churchslavonic/churchslavonic.tex | 299 | ||||
-rw-r--r-- | language/churchslavonic/cu-kinovar.sty | 50 | ||||
-rw-r--r-- | language/churchslavonic/cu-kruk.sty | 224 | ||||
-rw-r--r-- | language/churchslavonic/cu-num.sty | 10 |
8 files changed, 555 insertions, 66 deletions
diff --git a/language/churchslavonic/README b/language/churchslavonic/README index c9c209fcdf..b0a5bac74a 100644 --- a/language/churchslavonic/README +++ b/language/churchslavonic/README @@ -11,6 +11,9 @@ Unicode, such as XeTeX or LuaTeX. Changelog --------- +v0.2.4 2023.06.22 - minor fixes +v0.2.3 2020.10.21 - support for musical notation ("kruk") +v0.2.2 2017.02.05 - delay activating text underscore to avoid conflict with microtype package v0.2.1 2016.12.18 - gloss file included in CTAN package v0.2 2016.10.23 - new macrocommands and docs v0.1 2016.05.10 - first draft release diff --git a/language/churchslavonic/churchslavonic-en.pdf b/language/churchslavonic/churchslavonic-en.pdf Binary files differindex 03d3397cdf..22b5bc15f5 100644 --- a/language/churchslavonic/churchslavonic-en.pdf +++ b/language/churchslavonic/churchslavonic-en.pdf diff --git a/language/churchslavonic/churchslavonic-ru.pdf b/language/churchslavonic/churchslavonic-ru.pdf Binary files differindex fd446bd875..231bcef449 100644 --- a/language/churchslavonic/churchslavonic-ru.pdf +++ b/language/churchslavonic/churchslavonic-ru.pdf diff --git a/language/churchslavonic/churchslavonic.sty b/language/churchslavonic/churchslavonic.sty index 4b0f5a106a..60f8c0e91e 100644 --- a/language/churchslavonic/churchslavonic.sty +++ b/language/churchslavonic/churchslavonic.sty @@ -1,24 +1,51 @@ % Copyright 2016 Slavonic Computing Initiative % http://sci.ponomar.net -% -\ProvidesPackage{churchslavonic}[2016/04/19 v0.2 Typesetting in Church Slavonic] +% +\ProvidesPackage{churchslavonic}[v0.2.4 2023.06.22 Typesetting in Church Slavonic] +\DeclareOption{autocolormarks}{ + \PassOptionsToPackage{\CurrentOption}{cu-kruk} +} +\DeclareOption{noautocolormarks}{ + \PassOptionsToPackage{\CurrentOption}{cu-kruk} +} \DeclareOption*{ \PassOptionsToPackage{\CurrentOption}{cu-kinovar} } \ProcessOptions\relax +\RequirePackage{ifluatex} \RequirePackage{cu-num} \RequirePackage{cu-calendar} \RequirePackage{cu-util} \RequirePackage{cu-kinovar} +\RequirePackage{cu-kruk} % underscore is a valid character in Church Slavonic \let\cu@oldunderscore=_ +{% \catcode`\_\active -\protected\def_{\ifmmode\cu@oldunderscore\else\textunderscore\discretionary{}{}{}\fi} +\global\protected\def_{\ifmmode\cu@oldunderscore\else\textunderscore\discretionary{}{}{}\fi}% +}% +\AtBeginDocument{\catcode`\_\active}% + +\ifluatex +\AtBeginDocument{\cu@set@hyphenchar@lualatex} +\else +\AtBeginDocument{\cu@set@hyphenchar@xelatex} +\fi + +\def\cu@set@hyphenchar@lualatex{ + \@ifpackageloaded{polyglossia}{% + \textchurchslavonic{\prehyphenchar=`\_}% + }{% + }% +}% + +\def\cu@set@hyphenchar@xelatex{ +}% -% suppress variable distance between lines +% suppress variable distance between lines \lineskiplimit -1ex % margin marks diff --git a/language/churchslavonic/churchslavonic.tex b/language/churchslavonic/churchslavonic.tex index deba6f79ea..4235a18e09 100644 --- a/language/churchslavonic/churchslavonic.tex +++ b/language/churchslavonic/churchslavonic.tex @@ -1,20 +1,32 @@ +\usepackage{fontspec,metalogo} + +\newfontfamily\englishfont[Script=Latin,Ligatures=TeX,HyphenChar=-]{Linux Libertine O} \newfontfamily\russianfont[Script=Cyrillic,Ligatures=TeX]{Linux Libertine O} -\newfontfamily\russianfonttt[Ligatures=TeX]{lmmono10-regular.otf} -\newfontfamily\russianfontsf[Ligatures=TeX]{lmsans10-regular.otf} -\newfontfamily\churchslavonicfont[Script=Cyrillic,Ligatures=TeX,HyphenChar=_]{PonomarUnicode.otf} +\setmonofont[Scale=MatchLowercase]{Fira Slav} +\newfontfamily\russianfonttt[Scale=MatchLowercase]{Fira Slav} +\newfontfamily\russianfontsf[Script=Cyrillic,Ligatures=TeX]{Linux Biolinum O} +\newfontfamily\churchslavonicfont[Script=Cyrillic,Ligatures=TeX,Scale=MatchLowercase,HyphenChar=_]{Ponomar Unicode} +\newfontfamily\churchslavonicfonttt[Scale=MatchLowercase]{Fira Slav} +\newfontfamily\musicFont[Scale=1.5]{Mezenets Unicode} \usepackage{churchslavonic} -\usepackage{hyperref} -\usepackage{xltxtra} \usepackage{doc} \usepackage{lettrine} - +\usepackage[unicode, + pdftitle={churchslavonic: a package for typesetting Church Slavonic documents in TeX}, + pdfauthor={Aleksandr Andreev and Mike Kroutikov}, + pdfkeywords={Church Slavonic, Old Church Slavonic, Church Slavic, Znamenny Notation, LaTeX, TeX, XeTeX, LuaTeX, OpenType, Unicode, церковнославянский, старославянский, знаменная нотация, крюки, столповая нотация} +]{hyperref} + +\def\fileversion{v0.2.4} +\def\filedate{June 22, 2023} +\let\cuKrukFont=\musicFont \def\pkg#1{\textsf{#1}} \def\cs#1{\texttt{\textbackslash #1}} % \cuDefineDateFormat{long}{% \cuDayName{\cuDOW}, - \cuNum{\cuDAY}_гѡ~% + \cuNum{\cuDAY}\textunderscore гѡ~% \cuMonthName{\cuMONTH},~% лѣ́та ѿ сотворе́нїѧ мі́ра~\cuNum{\cuYEARAM}% } @@ -29,12 +41,12 @@ \begin{EN} \title{\pkg{churchslavonic} package --- Church Slavonic Typography in \LaTeX} -\author{Aleksandr Andreev and Mike Kroutikov\\version~0.2} +\author{Aleksandr Andreev and Mike Kroutikov\\version~\fileversion} \end{EN} \begin{RU} \title{Пакет \pkg{churchslavonic} --- верстка церковнославянских текстов в системе \LaTeX} -\author{Александр Андреев и Михаил Крутиков\\версия~0.2} +\author{Александр Андреев и Михаил Крутиков\\версия~\fileversion} \end{RU} \date{\today} @@ -93,7 +105,7 @@ engine such as \XeTeX{} or \LuaTeX{}. отдельных утилит, которые можно найти на сайте \href{http://sci.ponomar.net/} {Инициативной группы славянской информатики}. -Для того, чтобы использовать возможности этого пакета Вам +Для того, чтобы использовать возможности этого пакета Вам понадобится система верстки \TeX{}, поддерживающая Юникод, например, \XeTeX{} или \LuaTeX{}. \end{RU} @@ -111,7 +123,7 @@ declarations into the document preamble: \begin{verbatim} \usepackage{polyglossia} -\setmainlanguage{churchslavonic} +\setmainlanguage{churchslavonic} \usepackage{churchslavonic} \end{verbatim} @@ -124,10 +136,10 @@ See the \pkg{fonts-churchslavonic} documentation for information about fonts. \end{EN} \begin{RU} -Сразу станут доступны церковнославянские шаблоны переноса строки. +Сразу станут доступны церковнославянские шаблоны переноса слов. После чего переключайтесь между языками стандартными средствами пакета \pkg{polyglossia}. -Церковнославянские шритфы предоставлены в отдельном пакете \pkg{fonts-churchslavonic}, -который должен был установиться когда вы установили этот пакет. +Церковнославянские шрифты предоставлены в отдельном пакете \pkg{fonts-churchslavonic}, +который должен был установиться, когда вы установили этот пакет. Подробности о шрифтах смотрите в документации к пакету \pkg{fonts-churchslavonic}. \end{RU} @@ -155,7 +167,7 @@ Example: \begin{itemize} \item \texttt{color} эта опция используется по умолчанию и означает, что используется нормальный красный цвет. -\item \texttt{gray} (\texttt{grey}) заменяет красный цвет серым --- используйте эту опцию если +\item \texttt{gray} (\texttt{grey}) заменяет красный цвет серым --- используйте эту опцию, если ваше устройство печати не поддерживает цветности, но может качественно передавать градации серого цвета. \item \texttt{bw} отключает всякую раскраску --- используйте для создания черно-белой версии документа. \end{itemize} @@ -208,12 +220,12 @@ character: \texttt{HyphenChar="005F}, or by declaring all fonts before loading \ \end{EN} \begin{RU} -\cuKinovar{Внимание:} если у вас установлена старая версия пакета \pkg{fontspec}, +\cuKinovar{Внимание:} если у вас установлена старая версия пакета \pkg{fontspec}, переопределенный знак подчеркивания нельзя использовать при задании имен и параметров шрифтов в командах \pkg{fontspec} типа \cs{setXXXfont} и \cs{newfontfamily}. Обычно для церковнославянских шрифтов требуется установить подчеркивание как символ переноса, указав параметр: -\texttt{HyphenChar=_}. Старые версии \pkg{fontspec} выдадут ошибку. +\texttt{HyphenChar=_}. Старые версии \pkg{fontspec} выдадут ошибку. Эта проблема присутствует в \TeX\ \texttt{Live 2013} и в \pkg{fontspec v2.3c}. Мы рекомендуем обновить систему \TeX\ до \TeX\ \texttt{Live 2015} или свежее. @@ -237,7 +249,7 @@ For more information on the implementation, consult the appropriate section of \ \section{Числа} Способ записи чисел в церковнославянском языке (кириллическая цифирь) основывается на древнегреческом и в -качестве цифр использует буквы. +качестве цифр использует буквы. За подробностями отсылаем интересующегося читателя к соответствующей главе \cite{UN41}. \end{RU} @@ -330,9 +342,9 @@ This makes a difference only if your format is using symbolic names \cs{cuDOW} a Отметим, что значение даты никоем образом не интерпретируется и не нормализируется. Поэтому можно вызывать макрокоманду и с невозможными датами, например 32 апреля --- такая дата будет отформатирована как 32 апреля. Так что команду \cs{cuDate} можно -использовать для набора фраз вроде ``дата \verb+\cuDate{2016-04-32}+ не существует ни в одном календаре''. +использовать для набора фраз вроде <<дата \verb+\cuDate{2016-04-32}+ не существует ни в одном календаре>>. -Однако, если вы используете свой формат даты и в этом формате задействованы символические переменные \cs{cuDOW} (день недели) +Однако, если вы используете свой формат даты и в этом формате задействованы символические переменные \cs{cuDOW} (день недели) или \cs{cuYEARAM} (год от сотворения мира), то значения этих переменных будут вычислены исходя из заданной даты --- и дата интерпретируется как дата по григорианскому календарю (<<новому стилю>>). В этом случае, невозможные даты будут нормализованы методом экстраполяции. Например, 32 апреля будет интерпретировано как 2 мая для целей определения дня недели и года от сотворения мира. @@ -368,7 +380,7 @@ Example: \begin{tabular}{l} \verb+\cuDefineDateFormat{long}{%+\\ \verb+ \cuDayName{\cuDOW},+\\ -\verb+ \cuNum{\cuDAY}+_гѡ\verb+~%+\\ +\verb+ \cuNum{\cuDAY}\textunderscore +гѡ\verb+~%+\\ \verb+ \cuMonthName{\cuMONTH},~%+\\ \verb+ +лѣ́та ѿ сотворе́нїѧ мі́ра\verb+~%+\\ \verb+ \cuNum{\cuYEARAM}%+\\ @@ -395,8 +407,8 @@ The following symbolic names can be used when formatting the date: \item \cs{cuMONTH} --- the month part of a date (a number from 1 to 12, with January set to 1) \item \cs{cuDAY} --- the day of the month \item \cs{cuDOW}\footnotemark[1] --- the day of the week (number from 0 to 6, where 0 means ``Sunday'') -\footnotetext[1]{If your format uses this value, make sure that you format the date with the correct macro: - you must use \cs{cuDate} for dates on the Gregorian calendar and +\footnotetext[1]{If your format uses this value, make sure that you format the date with the correct macro: + you must use \cs{cuDate} for dates on the Gregorian calendar and \cs{cuDateJulian} for dates on the Julian calendar.} \footnotetext[2]{See \url{https://en.wikipedia.org/wiki/Indiction}.} \item \cs{cuINDICTION} --- the indiction\footnotemark[2] (a number from 1 to 15) @@ -409,12 +421,12 @@ The following symbolic names can be used when formatting the date: \begin{itemize} \item \cs{cuYEAR} --- год (число, например \texttt{2016}) \item \cs{cuYEARAM}\footnotemark[1] --- год от сотворения мира по византийскому летоисчеслению (число, например \texttt{7525}). -\item \cs{cuMONTH} --- месяц (число от 1 до 12, где 1 означает ``январь'') +\item \cs{cuMONTH} --- месяц (число от 1 до 12, где 1 означает <<январь>>) \item \cs{cuDAY} --- день месяца -\item \cs{cuDOW}\footnotemark[1] --- день недели (число от 0 to 6, где 0 означает ``воскресенье'') +\item \cs{cuDOW}\footnotemark[1] --- день недели (число от 0 to 6, где 0 означает <<воскресенье>>) \item \cs{cuINDICTION} --- индикт\footnotemark[2] (число от 1 до 15) \footnotetext[1]{Если ваш формат - пользуется этим значением, вы должны форматировать дату правильной макрокомандой: \cs{cuDate} + пользуется этим значением, вы должны форматировать дату правильной макрокомандой: \cs{cuDate} для дат по григорианскому календарю и \cs{cuDateJulian} для дат по юлианскому календарю.} \footnotetext[2]{См.~\url{https://ru.wikipedia.org/wiki/\%D0\%98\%D0\%BD\%D0\%B4\%D0\%B8\%D0\%BA\%D1\%82}} \end{itemize} @@ -431,7 +443,7 @@ For example, a date format named \texttt{default} is defined as: \begin{RU} \subsection{\cs{cuUseDateFormat}} -Макро устанавливает имя текущего формата даты. Этот формат будет использоваться при последующих вызовах макрокоманд +Макрокоманда устанавливает имя текущего формата даты. Этот формат будет использоваться при последующих вызовах макрокоманд \cs{cuDate} и \cs{cuDateJulian}. \subsection{\cs{cuMonthName}} @@ -470,7 +482,7 @@ Converts a date on the Gregorian calendar to a date on the Julian calendar. Inpu Useful when the same date needs to be formatted both according to the Gregorian and Julian calendars. -\subsection{\cs{cuAsGegorian}} +\subsection{\cs{cuAsGregorian}} Converts a date according to the Julian calendar to a date according to the Gregorian calendar. Input and output use numeric triplet format \texttt{YYYY-MM-DD}. \end{EN} @@ -564,8 +576,8 @@ editor to just automatically place a \cs{cuKinovar} command before every paragra \begin{churchslavonic} \begin{tabular}[]{ | l | l | } \hline -\verb+\cuKinovar+ Пои́мъ гдⷭ҇ви пѣ́снь но́вꙋю & -\cuKinovar Пои́мъ гдⷭ҇ви пѣ́снь но́вꙋю \\ +\verb+\cuKinovar+ Пои́мъ гдⷭ҇ви пѣ́снь но́вꙋю & +\cuKinovar Пои́мъ гдⷭ҇ви пѣ́снь но́вꙋю \\ \verb+\cuKinovar+ Ꙗ҆́кѡ тꙋ́ча на тро́скотъ & \cuKinovar Ꙗ҆́кѡ тꙋ́ча на тро́скотъ \\ \hline \end{tabular} @@ -578,6 +590,8 @@ editor to just automatically place a \cs{cuKinovar} command before every paragra Switches the current color to red. One would typically use this command inside a group that limits the scope of red text, unless you want all subsequent text to be colored red. + +\cuKinovar{Information:} The shade of red used by the \cs{cuKinovar} is declared in the package as a new color called \verb+kinovar+, and is set to (205, 8, 3) in the RGB color space, which has a hexadecimal representation of \verb+#CC0502+. \end{EN} \begin{RU} @@ -586,6 +600,8 @@ you want all subsequent text to be colored red. Команда переключает текущий цвет на красный. Должна использоваться внутри группы, которая ограничит ее действие (если вы не хотите чтобы весь последующий текст был напечатан красным цветом). + +\cuKinovar{Справка:} Оттенок красного цвета, используемый командой \cs{cuKinovar} объявляется в пакете новым цветом с названием \verb+kinovar+, и задан как (205, 8, 3) в RGB-цветовом пространстве, что равно \verb+#CC0502+ в шестнадцатиразрядном представлении. \end{RU} \begin{EN} @@ -634,9 +650,9 @@ Will result in: \let\hKv=\cuKinovar \parbox{0.75\textwidth}{% \textwidth=0.75\textwidth - \hMn{в҃}\hKv Бл҃гословѝ дꙋшѐ моѧ̀ гдⷭ҇а и҆ не забыва́й всѣ́хъ воздаѧ́нїй є҆гѡ̀. + \hMn{в҃}\hKv Бл҃гословѝ дꙋшѐ моѧ̀ гдⷭ҇а и҆ не забыва́й всѣ́хъ воздаѧ́нїй є҆гѡ̀. \hMn{а҃}\hKv Ѡ҆чища́ющаго всѧ̑ беззакѡ́нїѧ твоѧ̑, и҆сцѣлѧ́ющаго всѧ̑ недꙋ́ги твоѧ̑: - \hMn{в҃}\hKv И҆збавлѧ́ющаго ѿ и҆стлѣ́нїѧ живо́тъ тво́й, вѣнча́ющаго тѧ̀ млⷭ҇тїю и҆ щедро́тами: + \hMn{в҃}\hKv И҆збавлѧ́ющаго ѿ и҆стлѣ́нїѧ живо́тъ тво́й, вѣнча́ющаго тѧ̀ млⷭ҇тїю и҆ щедро́тами: \hMn{а҃}\hKv И҆сполнѧ́ющаго во бл҃ги́хъ жела́нїе твоѐ, ѡ҆бнови́тсѧ ꙗ҆́кѡ ѻ҆́рлѧ ю҆́ность твоѧ̀. } \end{churchslavonic} @@ -652,7 +668,7 @@ of \cs{cuMarginMarkSkip}. The default is: \end{EN} % \begin{RU} -Помета помещается на ``внешнее'' поле, то есть справа от текста для нечетных страниц и слева от текста для четных. +Помета помещается на <<внешнее>> поле, то есть справа от текста для нечетных страниц и слева от текста для четных. Расстояние между пометой и текстом задается через значение \cs{cuMarginMarkSkip}. По умолчанию это: \end{RU} @@ -670,7 +686,7 @@ document like this: \begin{RU} Шрифт и цвет пометы можно изменить, переопределив команду \cs{cuMarginMarkText}. Например, если Вы хотите чтобы все пометы печатались красным цветом, то достаточно поместить -в преамбулу вашего документа следующее определение: +в преамбулу вашего документа следующее определение: \end{RU} \begin{verbatim} \def\cuMarginMarkText#1{\cuKinovar{#1}} @@ -690,6 +706,50 @@ If you need to change the font/size/color just for a single mark, you can do it \end{verbatim} \begin{EN} +\subsection{Superscripts} +The \cs{cuSup} macro can be used to place arbitrary superscript text above the +baseline text, a feature that can be useful in editing Slavonic manuscripts. +The macro takes two parameters: the first parameter is the superscripted text, +the second parameter is the baseline text. For example: +\end{EN} + +\begin{RU} +\subsection{Надстрочный текст} +Макрокоманда \cs{cuSup} может быть использована для размещения произвольного +надстрочного текста над текстом в строке, что бывает необходимо при издании текстов +из славянских рукописей. Макрокоманда принимает два параметра: первый параметр -- +надстрочный текст, второй параметр -- текст в строке. Например: +\end{RU} + +\begin{verbatim} +мол\cuSup{ва}{и́т} +\end{verbatim} + +\begin{churchslavonic} +мол\cuSup{ва}{и́т} +\end{churchslavonic} + +\begin{EN} +The macro accepts an optional parameter \verb+raise+, which controls the vertical +space between the base characters and the superscript. The formatting of the +base and superscript texts can also be controlled directly: +\end{EN} + +\begin{RU} +Макрокоманда принимает необязательный параметр \verb+raise+, который управляет +вертикальным пространством между текстом в строке и надстрочным текстом. +Форматирование строчного и надстрочного текстов также можно контролировать напрямую: +\end{RU} + +\begin{verbatim} +по\cuSup[raise=0.75ex]{\kern2em \cuKinovar{лага́етъ}}{\cuKinovar{ложѝ}} на́мъ +\end{verbatim} + +\begin{churchslavonic} +по\cuSup[raise=0.75ex]{\kern2em \cuKinovar{лага́етъ}}{\cuKinovar{ложѝ}} на́мъ +\end{churchslavonic} + +\begin{EN} \subsection{Dropcaps} The mechanism that the \cs{cuKinovar} macro is using to collect all accents (when the argument is specified implicitly) can be useful for @@ -747,14 +807,179 @@ you can create drop capitals like this: \parbox{0.75\textwidth}{% \textwidth=0.75\textwidth -\cuLettrine -И҆́же дх҃а си́ла въ не́мощи соверша́етсѧ, ꙗ҆́коже пи́сано є҆́сть, и҆ вѣ́рꙋемъ: въ не́мощи же не тѣлесѐ то́чїю, но ᲂу҆́бѡ и҆ сло́ва, -и҆ премꙋ́дрости на ѧ҆зы́цѣ лежа́ща. И҆ сѐ ꙗ҆́вѣ ѿ мно́гихъ ᲂу҆́бѡ и҆ны́хъ, па́че же ѿ и҆́же ѡ҆ вели́комъ бг҃осло́вѣ, и҆ бра́тѣ хрⷭ҇то́вѣ, +\cuLettrine +И҆́же дх҃а си́ла въ не́мощи соверша́етсѧ, ꙗ҆́коже пи́сано є҆́сть, и҆ вѣ́рꙋемъ: въ не́мощи же не тѣлесѐ то́чїю, но ᲂу҆́бѡ и҆ сло́ва, +и҆ премꙋ́дрости на ѧ҆зы́цѣ лежа́ща. И҆ сѐ ꙗ҆́вѣ ѿ мно́гихъ ᲂу҆́бѡ и҆ны́хъ, па́че же ѿ и҆́же ѡ҆ вели́комъ бг҃осло́вѣ, и҆ бра́тѣ хрⷭ҇то́вѣ, благода́тїю зри́мѣмъ. }% \end{churchslavonic} \end{center} +\begin{EN} +\section{Znamenny Notation} +\subsection{Typesetting Znamenny Notation} +The package offers two commands for typesetting liturgical music in Znamenny Notation and other neumatic notation systems. To use these macro commands, you will need to declare the font that will be used to typeset the musical notation symbols and set the \cs{cuKrukFont} parameter, which is usually done in the preamble of the document. Example: +\end{EN} +% +\begin{RU} +\section{Знаменная нотация} +\subsection{Набор Знаменной нотации} +Пакет предлагает две макрокоманды для набора литургических песнопений в знаменной или других невменных музыкальных нотациях. Для начала следует декларировать шрифт, которым будут набираться символы нотации, и установить параметр \cs{cuKrukFont}; это обычно делается в преамбуле документа. Например: +\end{RU} + +\label{znamenny} +\begin{verbatim} +\newfontfamily\musicFont[Scale=1.5]{Mezenets Unicode} +\let\cuKrukFont=\musicFont +\end{verbatim} + +\begin{EN} +The command \cs{cuKruk} is used to typeset a syllable of text with a musical neume above it. It takes the neume as its first argument and the text as its second argument. This can be used to typeset Znamenny notation inline with text or to typeset relatively short passages, for example, the code: + +\verb+Here is a Podchashie: \textchurchslavonic{\cuKruk{𜽰𜼅}{Тво}}+ + +will produce: + +Here is a Podchashie: \textchurchslavonic{\cuKruk{𜽰𜼅}{Тво}} + +The \cs{cuKrukPara} command is used to typeset longer, independent passages of music in Znamenny Notation. The command takes as an argument a line of neumes, followed by \verb+\\+, followed by a line of lyrics. Groups of neumes are separated by spaces and syllables are separated by the hyphen (\verb+-+) character. Here we use the command to typeset a piece in Znamenny Notation: +\end{EN} +% +\begin{RU} +Команда \cs{cuKruk} используется для набора одного слога с размещением над ним символов невменной нотации. Команда принимает два аргумента: в первом аргументе указываются невмы, во втором аргументе -- текст. Этот подход может быть использован для набора текста и знаменной нотации в строке или для набора достаточно кратких музыкальных отрывков. Например, набор команд: + +Вот подчашие: \verb+\textchurchslavonic{\cuKruk{𜽰𜼅}{Тво}}+ + +\noindent дает такой результат: + +Вот подчашие: \textchurchslavonic{\cuKruk{𜽰𜼅}{Тво}} + +Команда \cs{cuKrukPara} используется для набора более длинных песнопений, нотированных Знаменной нотацией. В качестве аргумента команда принимает строку невм, затем разрыв \verb+\\+ и, затем, строку текста. Группы невм разделяются пробелами, а слоги разделяются символом дефиса (\verb+-+). Приведем пример того, как набрать песнопение в Знаменной нотации: +\end{RU} + +\medskip + +\begin{verbatim} +\cuKrukPara{𜽟 𜾆𜼱𜼇 𜽗𜼆 𜽐𜼱𜼢 𜽖𜼅 𜽜𜼄𜼦 𜾖𜼆𜼤 𜽝𜼅𜼤𜽘 𜾆𜼱𜼈 𜽞 𜾬𜼈𜼤 𜽖𜼅 +𜾒𜼰𜼺𜼆𜼣 𜾖𜼆𜼤 𜾋𜼅 𜾆𜼄 𜽝𜼄 𜽐𜼅 𜽗𜼄 𜽞 𜽐𜼰𜼅 𜽖𜼢 𜽗𜼢 𜾆𜾅𜼇 𜽝𜼄𜼤𜽘 𜾆𜼱𜼇 +𜾒𜼱𜼈𜼤 𜽗𜼇 𜽐𜼱𜼢 𜽖𜼆 𜽗𜼅 𜽞 𜾒𜼰𜼺𜼆 𜽝𜼄 𜽜𜼅 𜾆𜼄 𜽗𜼅 𜽞 𜽐𜼱𜼇 𜽜𜼆 𜾆𜼅 𜽞 +𜽐𜼱𜼈 𜽗𜼇 𜽞 𜽐𜼱𜼇 𜽖𜼆 𜽗𜼅 𜽐𜼱𜼆 𜽖𜼅 𜽜𜼄𜼶 𜾖𜼆𜼤 𜾋𜼅 𜾁 \\ +Хри-сто́съ ра-жда́-ет-сѧ, сла́-ви-те: Хри-сто́съ съ нб҃съ, срѧ́-щи-те: +Хри-сто́съ на зе-млѝ, воз-но-си́-те-сѧ. по́й-те Го́-спо-де-ви всѧ̀-~ зе-млѧ̀, +и҆ ве-се́-лї-емъ вос-по--йте лю́-дї-е, ꙗ҆́-кѡ про-сла́-ви-сѧ.} +\end{verbatim} + +\medskip + +\begin{churchslavonic} +\noindent +\cuKrukPara{ +𜽟 𜾆𜼱𜼇 𜽗𜼆 𜽐𜼱𜼢 𜽖𜼅 𜽜𜼄𜼦 𜾖𜼆𜼤 𜽝𜼅𜼤𜽘 𜾆𜼱𜼈 𜽞 𜾬𜼈𜼤 𜽖𜼅 𜾒𜼰𜼺𜼆𜼣 𜾖𜼆𜼤 𜾋𜼅 𜾆𜼄 𜽝𜼄 𜽐𜼅 𜽗𜼄 𜽞 𜽐𜼰𜼅 𜽖𜼢 𜽗𜼢 𜾆𜾅𜼇 𜽝𜼄𜼤𜽘 𜾆𜼱𜼇 𜾒𜼱𜼈𜼤 𜽗𜼇 𜽐𜼱𜼢 𜽖𜼆 𜽗𜼅 𜽞 𜾒𜼰𜼺𜼆 𜽝𜼄 𜽜𜼅 𜾆𜼄 𜽗𜼅 𜽞 𜽐𜼱𜼇 𜽜𜼆 𜾆𜼅 𜽞 𜽐𜼱𜼈 𜽗𜼇 𜽞 𜽐𜼱𜼇 𜽖𜼆 𜽗𜼅 𜽐𜼱𜼆 𜽖𜼅 𜽜𜼄𜼶 𜾖𜼆𜼤 𜾋𜼅 𜾁 +\\ +Хри-сто́съ ра-жда́-ет-сѧ, сла́-ви-те: Хри-сто́съ съ нб҃съ, срѧ́-щи-те: Хри-сто́съ на зе-млѝ, воз-но-си́-те-сѧ. по́й-те Го́-спо-де-ви всѧ̀-~ зе-млѧ̀, и҆ ве-се́-лї-емъ вос-по́--йте лю́-дї-е, ꙗ҆́-кѡ про-сла́-ви-сѧ. +} +\end{churchslavonic} + +\medskip + +\begin{EN} +\cuKinovar{Note 1}: the number of neume groups needs to equal the number of syllables, otherwise the \cs{cuKrukPara} command will return a compile-time error, such as: \verb+! Too many kruk groups.+ + +\cuKinovar{Note 2}: In both the \cs{cuKruk} and \cs{cuKrukPara} commands, the \verb+~+ character can be used when a neume appears without any syllable below it. The command will draw an underline under the relevant neume. Leaving a syllable empty will produce the same result. An empty neume block or the \verb+~+ character can also be used to produce a syllable with no neume above it (in this case, the neume block is left blank). To produce a neume with empty space (and no underline) below it, use any other command that is rendered as a space (for example, \cs{thinspace}). The following examples demonstrate the functionality: +\end{EN} +% +\begin{RU} +\cuKinovar{Примечание 1}: количество групп невм должно равняться количеству слогов, в противном случае при компиляции макрокоманда выдаст ошибку, например: \verb+! Too many kruk groups.+ + +\cuKinovar{Примечание 2}: Как в макрокоманде \cs{cuKruk}, так и в макрокоманде \cs{cuKrukPara}, символ \verb+~+ может быть использован, если какая-то невма стоит самостоятельно, а не над слогом текста. В этом случае под невмой будет нарисована горизонтальная черта. Горизонтальная черта также будет нарисована, если указан пустой слог. Если символ \verb+~+ введен в блок для невмы (или блок для невмы оставлен пустым), команды производят слог без невмы над ним (в этом случае, место для невмы остается пустым). Чтобы расположить невму над пустым текстовым блоком (без горизонтальной черты), можно ввести любую другую макрокоманду, раскрывающуюся в пробел (например, \cs{thinspace}). Следующие примеры иллюстрируют эти возможности: +\end{RU} + +\begin{tabular}{ll} +\verb+\cuKruk{𜽐}{}+ & \cuKruk{𜽐}{} \\ +\verb+\cuKruk{𜽐}{~}+ & \cuKruk{𜽐}{~} \\ +\verb+\cuKruk{𜽐}{\thinspace}+ & \cuKruk{𜽐}{\thinspace} \\ +\verb+\cuKruk{~}{text}+ & \cuKruk{~}{text} \\ +\end{tabular} + +\begin{EN} +\cuKinovar{Note 3}: fonts for Znamenny Notation usually provide color information for certain glyphs (such as the cinnabar marks) via data in the COLR and CPAL tables. However, COLR / CPAL technology is presently not supported in \XeTeX{} or \LuaTeX{}. When the \pkg{churchslavonic} package is loaded with the \texttt{autocolormarks} option, the \cs{cuKruk} and \cs{cuKrukPara} commands will automatically typeset the cinnabar marks in red by internally invoking the \cs{cuKinovar} macro. Additionally, if the \pkg{churchslavonic} package is loaded with the \texttt{gray} or \texttt{bw} options, the cinnabar marks will be typeset in grayscale or black, respectively. + +\cuKinovar{Limitations}: When a document is processed using \XeTeX{}, attempting to render marks in color breaks normal OpenType glyph positioning rules. Loading the \pkg{churchslavonic} package with the \texttt{autocolormarks} option when \XeTeX{} is used will produce a warning. Presently, you can only render marks in red and maintain correct positioning when using \LuaTeX{}. When a document is processed using \LuaTeX{}, the \pkg{churchslavonic} package by default loads with the \texttt{autocolormarks} option. If automatic coloring is not desired, it can be turned off in this case by loading the \pkg{churchslavonic} package with the \texttt{noautocolormarks} option. + +The \cs{cuKruk} commands may be nested, which can be used to produce `explanatory marks' (\textrussian{<<подобные пометы>>}): +\end{EN} +% +\begin{RU} +\cuKinovar{Примечание 3}: шрифты для Знаменной нотации обычно предоставляют информацию о цветах некоторых глифов (например, киноварных помет) в таблицах COLR и CPAL. Однако технология COLR и CPAL на данный момент не поддерживается в \XeTeX{} и \LuaTeX{}. Если пакет \pkg{churchslavonic} загружен с опцией \texttt{autocolormarks}, команды \cs{cuKruk} и \cs{cuKrukPara} автоматически раскрашивают киноварные пометы, внутренне вызывая для этого команду \cs{cuKinovar}. К тому же, если пакет \pkg{churchslavonic} также загружен с опциями \texttt{gray} или \texttt{bw}, киноварные пометы будут набраны в оттенках серого или черным цветом, соответственно. + +\cuKinovar{Ограничения}: автоматическая раскраска киноварных помет в \XeTeX{} нарушает работу правил позиционирования глифов в таблицах OpenType. Попытка загрузить пакет \pkg{churchslavonic} с опцией \texttt{autocolormarks} когда используется \XeTeX{} выдаст предупреждение. Правильного позиционирования раскрашенных помет можно достичь в \LuaTeX{}. Когда для верстки документа используется \LuaTeX{}, пакет \pkg{churchslavonic} загружается с опцией \texttt{autocolormarks} по умолчанию. В этом случае автоматическое раскрашивание помет можно отключить, загрузив пакет \pkg{churchslavonic} с опцией \texttt{noautocolormarks}. + +Макрокоманды \cs{cuKruk} могут вкладываться друг в друга, что позволяет набирать текст с <<подобными пометами>>: +\end{RU} + +\begin{tabular}{lc} +\verb+\cuKruk{\cuKruk{\cuKinovar{\tiny 𜽗}}} + & \textchurchslavonic{\cuKruk{\cuKruk[krukRaise=0.5em]{\cuKinovar{\tiny 𜽗 }}{\Large 𜽮}}{ла}} \\ +\verb+{\Large 𜽮}}{ла}+ & \\ +\end{tabular} + +\medskip + +\begin{EN} +\subsection{Controlling the Appearance of Znamenny Notation} + +A number of parameters may be used to control the positioning and appearance of Znamenny neumes: + +\begin{center} +\begin{tabular}{lp{3.5in}} +\hline +\verb+krukFont+ & Specifies the font that is used to typeset the neumes \\ +\verb+sylSpace+ & Specifies the amount of spacing around a syllable (default is \verb+0.2em+) \\ +\verb+topMargin+ & Specifies the amount of space (margin) above the neumes (default is \verb+0.3em+) \\ +\verb+krukRaise+ & Specifies the amount of space between the neumes and lyrics (default is \verb+1em+) \\ +\verb+sylRuleHeight+ & Specifies the thickness of the rule used when no syllable appears below a neume (default is \verb+0.08em+) \\ +\hline +\end{tabular} +\end{center} + +\noindent The parameters are passed as options to the \cs{cuKruk} and \cs{cuKrukPara} commands, separated by commas. For example, we can modify the spacing of neumes in the above example: +\end{EN} +% +\begin{RU} +\subsection{Управление внешним видом знаменных текстов} + +Значение некоторых параметров может быть изменено, чтобы повлиять на позиционирование и внешний вид текстов со Знаменной нотацией: + +\begin{center} +\begin{tabular}{lp{3.5in}} +\hline +\verb+krukFont+ & Указывает шрифт, используемый для отображения невм \\ +\verb+sylSpace+ & Контролирует количество пустого пространства вокруг слога (по умолчанию: \verb+0.2em+) \\ +\verb+topMargin+ & Контролирует количество пустого пространства (поле) над невмами (по умолчанию: \verb+0.3em+) \\ +\verb+krukRaise+ & Контролирует длину разрыва между текстом и невмами (по умолчанию: \verb+1em+) \\ +\verb+sylRuleHeight+ & Указывает толщину горизонтальной черты, используемой, когда под невмой нет слога (по умолчанию: \verb+0.08em+) \\ +\hline +\end{tabular} +\end{center} + +\noindent Эти параметры могут быть заданы как опции к макрокомандам \cs{cuKruk} и \cs{cuKrukPara}, разделенные запятыми. К примеру, повлияем на разрывы и поля в приведенном выше примере: +\end{RU} + +\begin{verbatim} +\cuKrukPara[krukRaise=1.5em,topMargin=0.6em,sylRuleHeight=0.02em]{𜽟 𜾆𜼱𜼇 ... \\ +Хри-сто́съ ... } +\end{verbatim} + +\medskip + +\begin{churchslavonic} +\noindent +\cuKrukPara[krukRaise=1.5em,topMargin=0.6em,sylRuleHeight=0.02em]{ +𜽟 𜾆𜼱𜼇 𜽗𜼆 𜽐𜼱𜼢 𜽖𜼅 𜽜𜼄𜼦 𜾖𜼆𜼤 𜽝𜼅𜼤𜽘 𜾆𜼱𜼈 𜽞 𜾬𜼈𜼤 𜽖𜼅 𜾒𜼰𜼺𜼆𜼣 𜾖𜼆𜼤 𜾋𜼅 𜾆𜼄 𜽝𜼄 𜽐𜼅 𜽗𜼄 𜽞 𜽐𜼰𜼅 𜽖𜼢 𜽗𜼢 𜾆𜾅𜼇 𜽝𜼄𜼤𜽘 𜾆𜼱𜼇 𜾒𜼱𜼈𜼤 𜽗𜼇 𜽐𜼱𜼢 𜽖𜼆 𜽗𜼅 𜽞 𜾒𜼰𜼺𜼆 𜽝𜼄 𜽜𜼅 𜾆𜼄 𜽗𜼅 𜽞 𜽐𜼱𜼇 𜽜𜼆 𜾆𜼅 𜽞 𜽐𜼱𜼈 𜽗𜼇 𜽞 𜽐𜼱𜼇 𜽖𜼆 𜽗𜼅 𜽐𜼱𜼆 𜽖𜼅 𜽜𜼄𜼶 𜾖𜼆𜼤 𜾋𜼅 𜾁 +\\ +Хри-сто́съ ра-жда́-ет-сѧ, сла́-ви-те: Хри-сто́съ съ нб҃съ, срѧ́-щи-те: Хри-сто́съ на зе-млѝ, воз-но-си́-те-сѧ. по́й-те Го́-спо-де-ви всѧ̀-~ зе-млѧ̀, и҆ ве-се́-лї-емъ вос-по́--йте лю́-дї-е, ꙗ҆́-кѡ про-сла́-ви-сѧ. +} +\end{churchslavonic} + \begin{thebibliography}{9} \bibitem{UN41} diff --git a/language/churchslavonic/cu-kinovar.sty b/language/churchslavonic/cu-kinovar.sty index 445067e4fe..4a8c5d2a5b 100644 --- a/language/churchslavonic/cu-kinovar.sty +++ b/language/churchslavonic/cu-kinovar.sty @@ -1,41 +1,51 @@ -\ProvidesPackage{cu-kinovar}[2016/03/31 v1.0 CU Kinovar] +\ProvidesPackage{cu-kinovar}[2020/10/21 v1.2 CU Kinovar] \RequirePackage{cu-util} \RequirePackage{etoolbox} \RequirePackage{xcolor} +\RequirePackage{ifluatex} +\ifluatex + \RequirePackage{luacolor} +\fi -%% 'color' option (default) -\def\cu@kinovar{\relax} -\def\cu@kinovar@color{\relax} +\newcommand{\cu@kinovar}[1]{\textcolor{kinovar}{#1}} +\newcommand{\cuKinovarColor}{\color{kinovar}} \DeclareOption{color}{ - \renewcommand{\cu@kinovar}[1]{\textcolor{kinovar}{#1}} - \renewcommand{\cu@kinovar@color}{\color{kinovar}} + \colorlet{kinovar}{kinovar-red} } \DeclareOption{gray}{ - \renewcommand{\cu@kinovar}[1]{\textcolor{kinovar-gray}{#1}} - \renewcommand{\cu@kinovar@color}{\color{kinovar-gray}} + \colorlet{kinovar}{kinovar-gray} } \DeclareOption{grey}{ - \renewcommand{\cu@kinovar}[1]{\textcolor{kinovar-gray}{#1}} - \renewcommand{\cu@kinovar@color}{\color{kinovar-gray}} + \colorlet{kinovar}{kinovar-gray} } \DeclareOption{bw}{ - \renewcommand{\cu@kinovar}[1]{#1} - \renewcommand{\cu@kinovar@color}{\relax} + \colorlet{kinovar}{kinovar-black} } -\ExecuteOptions{color} -\ProcessOptions\relax - % define standard colors -\definecolor{kinovar}{rgb}{0.80,0.03,0.01} +\definecolor{kinovar-red}{rgb}{0.80,0.03,0.01} +\colorlet{kinovar-black}{.} \definecolor{kinovar-gray}{rgb}{0.45,0.45,0.45} -% cuKinovar command colors just one letter with all accents if any -\newrobustcmd{\cuKinovar}{\cu@tokenizeletter{\cu@kinovar}} +\ExecuteOptions{color} +\ProcessOptions\relax -% cuKinovarColorr switches foregrouond color to Kinovar -\newrobustcmd{\cuKinovarColor}{\cu@kinovar@color} +% cuKinovar command colors just one letter with all accents if any +\newrobustcmd{\cuKinovar}{\cu@tokenizeletter{\cu@kinovar@kern}} + +\newcommand{\cu@kinovar@kern}[1]{% + \cu@kinovar{#1}% + \cu@ifnextletter{\cu@kinovar@insert@kern{#1}}{}% +}% +\newsavebox\cu@box@zero +\newsavebox\cu@box@one +\newdimen\cu@kerning +\newcommand{\cu@kinovar@insert@kern}[2]{% + \sbox\cu@box@zero{#1#2}\sbox\cu@box@one{\mbox{#1}\mbox{#2}}% + \dimen\cu@kerning=\dimexpr\wd\cu@box@zero-\wd\cu@box@one + \kern\dimen\cu@kerning #2% +}% \endinput diff --git a/language/churchslavonic/cu-kruk.sty b/language/churchslavonic/cu-kruk.sty new file mode 100644 index 0000000000..11dc43ccba --- /dev/null +++ b/language/churchslavonic/cu-kruk.sty @@ -0,0 +1,224 @@ +\NeedsTeXFormat{LaTeX2e}% +\RequirePackage{keyval}% +\RequirePackage{ifluatex}% +\RequirePackage{cu-kinovar}% +\ProvidesPackage{cu-kruk}[2019/04/20 v0.2 support for kruk music notations]% +% +%% 'autocolormarks' and noautocolormarks options +\newif\ifcu@autocolormarks +\ifluatex + \cu@autocolormarkstrue +\else + \cu@autocolormarksfalse +\fi + +\DeclareOption{autocolormarks}{ + \cu@autocolormarkstrue + \ifluatex\relax\else\message{WARNING: autocolormarks option may not work correctly with this TeX engine. See documentation for more details.}\fi +} +\DeclareOption{noautocolormarks}{ + \cu@autocolormarksfalse +} + +\ProcessOptions\relax + +\let\cuKrukFont\relax %% to be defined by the user +% +\newlength{\cuKrukSylSpace} %% spacing around kruk syllable +\newlength{\cuKrukTopMargin} %% top margin ensures that lines are nicely separated +\newlength{\cuKrukSylRuleHeight} %% how thick placeholder rule is +\newlength{\cuKrukRaise} %% distance between text and kruk baselines +% +\setlength{\cuKrukSylSpace}{0.2em} +\setlength{\cuKrukTopMargin}{0.3em} +\setlength{\cuKrukSylRuleHeight}{0.08em} +\setlength{\cuKrukRaise}{1em} + +\define@key{cuKruk}{krukFont}{\def\cuKrukFont{#1}}% +\define@key{cuKruk}{sylSpace}{\setlength{\cuKrukSylSpace}{#1}}% +\define@key{cuKruk}{topMargin}{\setlength{\cuKrukTopMargin}{#1}}% +\define@key{cuKruk}{sylRuleHeight}{\setlength{\cuKrukSylRuleHeight}{#1}}% +\define@key{cuKruk}{krukRaise}{\setlength{\cuKrukRaise}{#1}}% +\define@boolkey{cuKruk}{invertColor}[true]{}% + +\newcommand{\cuKruk}[3][]{% + \bgroup + \setkeys{cuKruk}{#1}% + \cu@@Kruk{#2}{#3}% + \egroup +}% +\def\cu@@Kruk#1#2{{% + \edef\cu@tmp{\csname \detokenize{#2}cu@@@\endcsname}% + \setbox1=\hbox{{% + \ifKV@cuKruk@invertColor + \colorlet{tmp}{.}\color{kinovar}\colorlet{kinovar}{tmp}% + \fi + \cuKrukFont#1% + }}% + \dimen0=\ht1\advance\dimen0 by \cuKrukTopMargin\ht1=\dimen0% + \if\relax\detokenize{#2}\relax + \setbox2=\hbox{\vrule height \cuKrukSylRuleHeight width \wd1}% + \else + \ifx\cu@tmp\cu@Tilda + \setbox2=\hbox{\vrule height \cuKrukSylRuleHeight width \wd1}% + \else + \setbox2=\hbox{#2}% + \fi + \fi + \ifdim\wd1>\wd2% + \setbox2=\hbox to \wd1{\hss\box2\hss}% + \fi + %\discretionary{}{}{}% + \hskip\cuKrukSylSpace\penalty5000\hbox to \wd2{% + \hskip0.5\wd2\hskip-0.5\wd1\raise\cuKrukRaise\copy1\kern-0.5\wd2\kern-0.5\wd1\copy2\hss + }\penalty10000\hskip\cuKrukSylSpace +}}% +% +\newlength{\cuSupRaise} %% controls extra vertical space between Sup and Base +\setlength{\cuSupRaise}{0ex} +\define@key{cuSup}{raise}{\setlength{\cuSupRaise}{#1}}% + +\newcommand{\cuSup}[3][]{% + \bgroup + \setkeys{cuSup}{#1}% + \cu@@Sup{#2}{#3}% + \egroup +}% +\def\cu@@Sup#1#2{{% + \leavevmode + \setbox1=\hbox{#1}% + \setbox2=\hbox{#2}% + \dimen0=\ht2% + \advance\dimen0 by \dp1% + \message{\the\dimen0}% + \advance\dimen0 by \cuSupRaise + \advance\dimen0 by -0.25\ht1% + \hbox to \wd2{% + \hskip0.5\wd2\hskip-0.5\wd1\raise\dimen0\copy1\kern-0.5\wd2\kern-0.5\wd1\copy2\hss + }% +}} +% +\newcounter{cu@KrukPos}% +\newcounter{cu@SylPos}% +% +\newcommand{\cuKrukPara}[2][]{% + \cu@KrukPara[#1]#2\cu@End +}% +% +\def\cu@KrukPara[#1]#2\\#3\cu@End{% +\bgroup +\setkeys{cuKruk}{#1}% +\setcounter{cu@KrukPos}{0}% +\setcounter{cu@SylPos}{0}% +\cu@Kruk #2 \cu@EndKruk +\cu@Text #3 \cu@EndText +\ifnum\thecu@SylPos<\thecu@KrukPos\errmessage{Too many kruk groups. Seen {\thecu@KrukPos} kruk groups and {\thecu@SylPos} text groups}\fi +\egroup +}% +% +\def\cu@Kruk#1 #2\cu@EndKruk{% +\if\relax\detokenize{#1}\relax\else +\cu@KrukAction{#1}% +\fi +\if\relax\detokenize{#2}\relax\else + \cu@Kruk#2\cu@EndKruk +\fi +}% +% +\def\cu@KrukAction#1{% +\edef\cu@tmp{\csname \detokenize{#1}cu@@@\endcsname}% +\ifx\cu@tmp\cu@Tilda + \expandafter\edef\csname cu@@\thecu@KrukPos\endcsname{}% +\else + \expandafter\def\csname cu@@\thecu@KrukPos\endcsname{#1}% +\fi +\stepcounter{cu@KrukPos}% +} +% +\edef\cu@Tilda{\csname \detokenize{~}cu@@@\endcsname}% +\edef\cu@Empty{\csname \detokenize{}cu@@@\endcsname}% +% +\def\cu@Text#1 #2\cu@EndText{% +\if\relax\detokenize{#1}\relax\else + \cu@TextDash#1-\cu@EndText\space +\fi +\if\relax\detokenize{#2}\relax\else + \cu@Text#2\cu@EndText +\fi +}% +% +\def\cu@TextDash#1-#2\cu@EndText{% +\cu@TextAction{#1}% +\if\relax\detokenize{#2}\relax\else + \cu@TextDash#2\cu@EndText +\fi +}% +% +\def\cu@TextAction#1{% +\ifnum\thecu@SylPos>\thecu@KrukPos + \errmessage{Too few kruk groups. Seen {\thecu@KrukPos} kruk groups and {\thecu@SylPos} text groups}% +\fi +\edef\cu@tmp{\csname \detokenize{#1}cu@@@\endcsname}% +\ifx\cu@tmp\cu@Empty + \expandafter\cuKruk\expandafter{\csname cu@@\thecu@SylPos\endcsname}{}% +\else + \ifx\cu@tmp\cu@Tilda + \expandafter\cuKruk\expandafter{\csname cu@@\thecu@SylPos\endcsname}{}% + \else + \expandafter\cuKruk\expandafter{\csname cu@@\thecu@SylPos\endcsname}{#1}% + \fi +\fi +\stepcounter{cu@SylPos}% +}% +% +% Automatic coloring of kruk marks (pomety) +\ifcu@autocolormarks +\catcode`𜼀\active\def𜼀{\cuKinovar{\detokenize{𜼀}}}% +\catcode`𜼁\active\def𜼁{\cuKinovar{\detokenize{𜼁}}}% +\catcode`𜼂\active\def𜼂{\cuKinovar{\detokenize{𜼂}}}% +\catcode`𜼃\active\def𜼃{\cuKinovar{\detokenize{𜼃}}}% +\catcode`𜼄\active\def𜼄{\cuKinovar{\detokenize{𜼄}}}% +\catcode`𜼅\active\def𜼅{\cuKinovar{\detokenize{𜼅}}}% +\catcode`𜼆\active\def𜼆{\cuKinovar{\detokenize{𜼆}}}% +\catcode`𜼇\active\def𜼇{\cuKinovar{\detokenize{𜼇}}}% +\catcode`𜼈\active\def𜼈{\cuKinovar{\detokenize{𜼈}}}% +\catcode`𜼉\active\def𜼉{\cuKinovar{\detokenize{𜼉}}}% +\catcode`𜼊\active\def𜼊{\cuKinovar{\detokenize{𜼊}}}% +\catcode`𜼋\active\def𜼋{\cuKinovar{\detokenize{𜼋}}}% +\catcode`𜼌\active\def𜼌{\cuKinovar{\detokenize{𜼌}}}% +\catcode`𜼍\active\def𜼍{\cuKinovar{\detokenize{𜼍}}}% +\catcode`𜼎\active\def𜼎{\cuKinovar{\detokenize{𜼎}}}% +\catcode`𜼏\active\def𜼏{\cuKinovar{\detokenize{𜼏}}}% +\catcode`𜼐\active\def𜼐{\cuKinovar{\detokenize{𜼐}}}% +\catcode`𜼑\active\def𜼑{\cuKinovar{\detokenize{𜼑}}}% +\catcode`𜼒\active\def𜼒{\cuKinovar{\detokenize{𜼒}}}% +\catcode`𜼓\active\def𜼓{\cuKinovar{\detokenize{𜼓}}}% +\catcode`𜼔\active\def𜼔{\cuKinovar{\detokenize{𜼔}}}% +\catcode`𜼕\active\def𜼕{\cuKinovar{\detokenize{𜼕}}}% +\catcode`𜼖\active\def𜼖{\cuKinovar{\detokenize{𜼖}}}% +\catcode`𜼗\active\def𜼗{\cuKinovar{\detokenize{𜼗}}}% +\catcode`𜼘\active\def𜼘{\cuKinovar{\detokenize{𜼘}}}% +\catcode`𜼙\active\def𜼙{\cuKinovar{\detokenize{𜼙}}}% +\catcode`𜼚\active\def𜼚{\cuKinovar{\detokenize{𜼚}}}% +\catcode`𜼛\active\def𜼛{\cuKinovar{\detokenize{𜼛}}}% +\catcode`𜼜\active\def𜼜{\cuKinovar{\detokenize{𜼜}}}% +\catcode`𜼝\active\def𜼝{\cuKinovar{\detokenize{𜼝}}}% +\catcode`𜼞\active\def𜼞{\cuKinovar{\detokenize{𜼞}}}% +\catcode`𜼟\active\def𜼟{\cuKinovar{\detokenize{𜼟}}}% +\catcode`𜼠\active\def𜼠{\cuKinovar{\detokenize{𜼠}}}% +\catcode`𜼡\active\def𜼡{\cuKinovar{\detokenize{𜼡}}}% +\catcode`𜼢\active\def𜼢{\cuKinovar{\detokenize{𜼢}}}% +\catcode`𜼣\active\def𜼣{\cuKinovar{\detokenize{𜼣}}}% +\catcode`𜼤\active\def𜼤{\cuKinovar{\detokenize{𜼤}}}% +\catcode`𜼥\active\def𜼥{\cuKinovar{\detokenize{𜼥}}}% +\catcode`𜼦\active\def𜼦{\cuKinovar{\detokenize{𜼦}}}% +\catcode`𜼧\active\def𜼧{\cuKinovar{\detokenize{𜼧}}}% +\catcode`𜼨\active\def𜼨{\cuKinovar{\detokenize{𜼨}}}% +\catcode`𜼩\active\def𜼩{\cuKinovar{\detokenize{𜼩}}}% +\catcode`𜼪\active\def𜼪{\cuKinovar{\detokenize{𜼪}}}% +\catcode`𜼫\active\def𜼫{\cuKinovar{\detokenize{𜼫}}}% +\catcode`𜼬\active\def𜼬{\cuKinovar{\detokenize{𜼬}}}% +\catcode`𜼭\active\def𜼭{\cuKinovar{\detokenize{𜼭}}}% +\fi +% +\endinput% diff --git a/language/churchslavonic/cu-num.sty b/language/churchslavonic/cu-num.sty index 1a84190ead..3cd16d6455 100644 --- a/language/churchslavonic/cu-num.sty +++ b/language/churchslavonic/cu-num.sty @@ -1,7 +1,7 @@ % Copyright 2016 Slavonic Computing Initialive % http://sci.ponomar.net % -\ProvidesPackage{cu-num}[2016/03/03 v1.0 CU Numerics] +\ProvidesPackage{cu-num}[2016/03/03 v1.1 CU Numerics] \@ifundefined{detokenize}{% \PackageError{cu-num}% @@ -20,17 +20,17 @@ \fi }% % -\def\@firstoffour\cu@repeat #1\stop@ #2#3#4#5{#2}% -\def\@firstofthree\cu@repeat@i #1\stop@ #2#3#4{#2}% +\def\cu@firstoffour\cu@repeat #1\stop@ #2#3#4#5{#2}% +\def\cu@firstofthree\cu@repeat@i #1\stop@ #2#3#4{#2}% \def\cu@switch #1{% \if\relax\detokenize{#1}\relax - \expandafter\@firstoffour + \expandafter\cu@firstoffour \fi \cu@repeat #1\stop@ }% \def\cu@repeat #1#2\stop@ #3{% \if\relax\detokenize{#2}\relax - \expandafter\@firstofthree + \expandafter\cu@firstofthree \fi \cu@repeat@i #2\stop@ }% |