view docs/_latex/my-doc-fonts.sty @ 196:d57cf1bb96d6

A new PDF style using "Spectral" with Source Sans/Code
author Franz Glasner <fzglas.hg@dom66.de>
date Wed, 13 May 2026 12:08:21 +0200
parents c10b2092c48f
children ede8b44f6faf
line wrap: on
line source

% -*- coding: utf-8 -*-
%
% Some font hacks for my Sphinx PDF documents
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my-doc-fonts}[%
  2026/05/12 v0.1 (Franz Glasner) Fonts for Sphinx generated PDFs]
\RequirePackage{xkeyval}
\RequirePackage{fontspec}
\IfFileExists{xcolor.sty}{%
% Should Sphinx load xcolor with its dvipsnames and svgnames options?
    \RequirePackage{xcolor}
}{%
    \RequirePackage{color}
}

\newif\if@mdf@@sspro\@mdf@@ssprofalse

\newif\if@mdf@WithDejaVuSansMono
\newif\if@mdf@WithPlexMono
\newif\if@mdf@WithAdobeSource
\newif\if@mdf@WithSpectral

\def\@mdf@reset@font@options{\@mdf@WithDejaVuSansMonofalse\@mdf@WithPlexMonofalse\@mdf@WithAdobeSourcefalse}

\DeclareOptionX{dejavusansmono}[true]{\@mdf@reset@font@options\csname @mdf@WithDejaVuSansMono#1\endcsname}
\DeclareOptionX{plexmono}[true]{\@mdf@reset@font@options\csname @mdf@WithPlexMono#1\endcsname}
\DeclareOptionX{adobesource}[true]{\@mdf@reset@font@options\csname @mdf@WithAdobeSource#1\endcsname}
\DeclareOptionX{spectral}[true]{\@mdf@reset@font@options\csname @mdf@WithSpectral#1\endcsname}

%
% By default use the safe option dejavusansmono because is contains
% all characters without any hacks.
%
\ExecuteOptionsX{dejavusansmono}
\ProcessOptionsX*\relax

\if@mdf@WithDejaVuSansMono
  \RequirePackage[DefaultFeatures={Scale=0.92},mono=false]{plex-otf}
  \RequirePackage[mono=true,serif=false,sans=false,math=false]{dejavu-otf}  % all symbols are available
\fi
%
%
\if@mdf@WithPlexMono
  \RequirePackage{newunicodechar}
  \RequirePackage[DefaultFeatures={Scale=0.92}]{plex-otf}
  % Dont keep all default font features from plex-otf
  \defaultfontfeatures{}
  \newfontfamily\DejaVuSansMono{DejaVu Sans Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Oblique,
    BoldItalicFont = * Bold Oblique,
    Scale=MatchLowercase,
    Ligatures=TeX,
  ]
  \newunicodechar{▷}{{\DejaVuSansMono ▷}}% U+25B7
  \newunicodechar{∶}{{\DejaVuSansMono ∶}}% U+2236
  \newunicodechar{◆}{{\DejaVuSansMono ◆}}% U+25C6
  \newunicodechar{▪}{{\DejaVuSansMono ▪}}% U+25AA
  \newunicodechar{⟵}{{\DejaVuSansMono ⟵}}% U+27F5
  \newunicodechar{⟶}{{\DejaVuSansMono ⟶}}% U+27F6
  \newunicodechar{⟷}{{\DejaVuSansMono ⟷}}% U+27F7
  \newunicodechar{⇒}{{\DejaVuSansMono ⇒}}% U+21D2
  \newunicodechar{⇔}{{\DejaVuSansMono ⇔}}% U+21D4
  \newunicodechar{≟}{{\DejaVuSansMono ≟}}% U+225F
  \newunicodechar{∈}{{\DejaVuSansMono ∈}}% U+2208
  \newunicodechar{∌}{{\DejaVuSansMono ∌}}% U+220C
  %\newunicodechar{␣}{{\DejaVuSansMono ␣}}% U+2423  Missing!
  %\newunicodechar{^^^^2423}{{\DejaVuSansMono^^^^2423}}% U+2423
  %\newunicodechar{␣}{\textvisiblespace}% U+2423
  %\catcode`^^^^2423\active\protected\def^^^^2423{\textvisiblespace}

  \PassOptionsToPackage{%
    verbatimvisiblespace={\textcolor{red}{{\DejaVuSansMono^^^^2423}}},%
    verbatimcontinued={\textcolor{red}{{\DejaVuSansMono^^^^21aa}}}}%
    {sphinx}
\fi
\if@mdf@WithAdobeSource
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular}}
  \setmainfont{Source Serif Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \@mdf@@ssprotrue
\fi
\if@mdf@WithSpectral
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular}}
  \setmainfont{Spectral}[
    UprightFont = * Regular,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \@mdf@@ssprotrue
\fi

\defaultfontfeatures{}

\if@mdf@@sspro
  \RequirePackage{newunicodechar}
  \defaultfontfeatures{Ligatures=TeX,Numbers={Lining,Tabular},Scale=MatchLowercase}
  \setsansfont{Source Sans Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \setmonofont{Source Code Pro}[
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Italic,
    BoldItalicFont = * Bold Italic,
  ]
  \defaultfontfeatures{}
  \newfontfamily\DejaVuSansMono{DejaVu Sans Mono}[%
    UprightFont = *,
    BoldFont = * Bold,
    ItalicFont = * Oblique,
    BoldItalicFont = * Bold Oblique,
  ]
  \newunicodechar{∶}{{\DejaVuSansMono ∶}}% U+2236
  \newunicodechar{⟵}{{\DejaVuSansMono ⟵}}% U+27F5
  \newunicodechar{⟶}{{\DejaVuSansMono ⟶}}% U+27F6
  \newunicodechar{⟷}{{\DejaVuSansMono ⟷}}% U+27F7
  \newunicodechar{⇒}{{\DejaVuSansMono ⇒}}% U+21D2
  \newunicodechar{⇔}{{\DejaVuSansMono ⇔}}% U+21D4
  \newunicodechar{≟}{{\DejaVuSansMono ≟}}% U+225F
  \newunicodechar{∈}{{\DejaVuSansMono ∈}}% U+2208
  \newunicodechar{∌}{{\DejaVuSansMono ∌}}% U+220C
  \PassOptionsToPackage{%
    verbatimvisiblespace={\textcolor{red}{{\DejaVuSansMono^^^^2423}}},%
    verbatimcontinued={\textcolor{red}{{\DejaVuSansMono^^^^21aa}}}}%
    {sphinx}
\fi

\defaultfontfeatures{}

\endinput