%% $Id: lucida-otf.sty 1229 2026-03-19 10:07:41Z herbert $
%%
%% This file is distributed under the terms of the LaTeX Project Public
%% License from CTAN archives in directory  macros/latex/base/lppl.txt.
%% Either version 1.3 or, at your option, any later version.
%%
% Copyright 2025 Herbert Voss hvoss@tug.org
%%
\ProvidesPackage{lucida-otf}[%
  2026/03/18 v. 0.12 (Herbert Voss) Supports Lucida OpenType for lualatex/xelatex.] 
%
\RequirePackage{ifxetex,ifluatex,xkeyval,textcomp}
\RequirePackage{unicode-math}  % support opentype math fonts
                               % loads itself fontspec
%
%
\providecommand\lucidaRM@features{Scale=0.87}%  Roman
\providecommand\lucidaSS@features{Scale=0.87}%  SansSerif
\providecommand\lucidaTT@features{Scale=MatchLowercase,FakeStretch=0.88,Ligatures=ResetAll}%  Typewriter
\providecommand\lucidaGrandeTT@features{Scale=MatchLowercase,FakeStretch=0.9,Ligatures=ResetAll}%  Typewriter
\providecommand\lucidaConsoleTT@features{Scale=MatchLowercase,FakeStretch=0.9,Ligatures=ResetAll}%  Typewriter
\providecommand\lucidaMM@features{mathrm=sym}%            Math regular
\providecommand\lucidaMMbold@features{mathrm=sym}%        Math bold
\providecommand\lucidaBL@features{}%            Blackletter
\providecommand\lucidaCAL@features{}%           Calligraphy
\providecommand\lucidaHW@features{}%            Handwriting
\providecommand\lucida@DefaultFeatures{}
\DeclareOptionX{RM}{\renewcommand*{\lucidaRM@features}{#1}}
\DeclareOptionX{SS}{\renewcommand*{\lucidaSS@features}{#1}}
\DeclareOptionX{TT}{\renewcommand*{\lucidaTT@features}{#1}}
\DeclareOptionX{GTT}{\renewcommand*{\lucidaGrandeTT@features}{#1}}
\DeclareOptionX{CTT}{\renewcommand*{\lucidaConsoleTT@features}{#1}}
\DeclareOptionX{MM}{\renewcommand*{\lucidaMM@features}{#1}}
\DeclareOptionX{MMbold}{\renewcommand*{\lucidaMMbold@features}{#1}}
\DeclareOptionX{BL}{\renewcommand*{\lucidaBL@features}{#1}}
\DeclareOptionX{CAL}{\renewcommand*{\lucidaCAL@features}{#1}}
\DeclareOptionX{HW}{\renewcommand*{\lucidaHW@features}{#1}}
\DeclareOptionX{DefaultFeatures}{\def\lucida@DefaultFeatures{#1}}

\newif\ifLucida@useKerning \Lucida@useKerningtrue
\DeclareOptionX{useKerning}[true]{\@nameuse{Lucida@useKerning#1}}

\ProcessOptionsX\relax

\def\Lucida@RawFeatures{}
\def\Lucida@MathRawFeatures{}

\ifLucida@useKerning
  \ifluatex 
    \RequirePackage{luacode}
    \typeout{loading lucida-otf-kern.tex ... }%
    \input{lucida-otf-kern.tex}% 
    \def\Lucida@RawFeatures{+lucidaletterkerning,+lucidanumberkerning}
    \def\Lucida@MathRawFeatures{+lucidanumberkerning}
  \fi
\fi

\defaultfontfeatures{Ligatures=TeX,\lucida@DefaultFeatures}% default in fontspec
%
\typeout {Using file names for the Lucida font}%
%-----------------------------------------  file names ----------------------------
\setmainfont{LucidaBrightOT}[% main rm
       Extension = .otf,
  \lucidaRM@features,
      ItalicFont = *-Italic,
        BoldFont = *-Demi,
  BoldItalicFont = *-DemiItalic,
      RawFeature = {\Lucida@RawFeatures},
]
%
\setsansfont{LucidaSansOT}[% main sans
       Extension = .otf,
  \lucidaSS@features,
      ItalicFont = *-Italic,
        BoldFont = *-Demi,
        BoldFeatures = {RawFeature={embolden=2}},
  BoldItalicFont = *-DemiItalic,
        BoldItalicFeatures = {RawFeature={embolden=2}},
]
%
\setmonofont{LucidaSansTypewriterOT}[% main typewriter
       Extension = .otf,
      \lucidaTT@features,
      ItalicFont = *-Oblique,
        BoldFont = *-Bold,
  BoldItalicFont = *-BoldOblique,
%        BoldFont = *,
%        BoldFeatures = {RawFeature={embolden=1.7},SmallCapsFont = * },        
%        BoldItalicFont = *-Oblique,
%        BoldItalicFeatures = {RawFeature={embolden=1.75},SmallCapsFont=*-Oblique}
]
\newfontfamily\lucidaSLshape{LucidaBrightOT}[
       FakeSlant = 0.2,
       Extension = .otf,
    \lucidaRM@features,
        BoldFont = *-Demi,
  BoldItalicFont = *-DemiItalic
]
%\renewcommand\sldefault{\lucidaSLshape}
\let\slshape\lucidaSLshape
%
% Setting math

% First we have to expand the feature macros:

\edef\temp@mm@features{\lucidaMM@features, RawFeature = {\Lucida@MathRawFeatures}}
\AtBeginDocument{%
  \expandafter\setmathfont\expandafter[\temp@mm@features]{LucidaBrightMathOT.otf}%
  \expandafter\setmathfont\expandafter[\lucidaMMbold@features,version=bold]{LucidaBrightMathOT-Demi.otf}%
}
\def\Lss#1#2#3{%
  \setmathfont[RawFeature={+ss#1#2}]{LucidaBrightMathOT.otf}%
  \ifmmode#3\else$#3$\fi
  \relax
  \setmathfont[RawFeature={-ss#1#2}]{LucidaBrightMathOT.otf}%
  \relax}
%
% The specialized one-off fonts:
\newfontface\LucidaBlackletter{LucidaBlackletterOT}[
  Extension = .otf,
  \lucidaBL@features]
\newfontface\LucidaCalligraphy{LucidaCalligraphyOT}[
  Extension = .otf,
  \lucidaCAL@features]
\newfontface\LucidaHandwriting{LucidaHandwritingOT}[
  Extension = .otf,
  \lucidaHW@features]
%
% GrandeMono and Console fonts for an example:

\newfontfamily\LucidaGrandeMonoDK{LucidaGrandeMonoDK}[
       Extension = .otf,
  \lucidaGrandeTT@features,
      ItalicFont = *-Italic,
        BoldFont = *-Bold,
  BoldItalicFont = *-BoldItalic
]
%
\newfontfamily\LucidaConsoleDK{LucidaConsoleDK}[%
       Extension = .otf,
  \lucidaConsoleTT@features,
      ItalicFont = *-Italic,
        BoldFont = *-Bold,
  BoldItalicFont = *-BoldItalic
]


\endinput
