[LyX/master] Add support for the libertinus family of fonts (#11899)

Juergen Spitzmueller spitz at lyx.org
Thu Jul 9 09:22:38 UTC 2020


commit 8cb9a6d3f6463321cdaf49a3cedb854b09c51275
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Thu Jul 9 11:46:07 2020 +0200

    Add support for the libertinus family of fonts (#11899)
    
    File format change.
---
 lib/chkconfig.ltx       |    1 +
 lib/doc/LaTeXConfig.lyx |   77 ++++++++++++++++++++++++++++++++++++++++++++++-
 lib/latexfonts          |   45 +++++++++++++++++++++++++++
 lib/lyx2lyx/lyx_2_4.py  |   77 +++++++++++++++++++++++++++++++++++++++++++++-
 src/version.h           |    4 +-
 5 files changed, 199 insertions(+), 5 deletions(-)

diff --git a/lib/chkconfig.ltx b/lib/chkconfig.ltx
index 1ab93b4..8fb6800 100644
--- a/lib/chkconfig.ltx
+++ b/lib/chkconfig.ltx
@@ -519,6 +519,7 @@
 \TestPackage{libertineMono-type1}
 \TestPackage{libertineMono}
 \TestPackage{libertineRoman}
+\TestPackage{libertinus}
 \TestPackage{lmodern}
 \TestPackage{luximono}
 \TestPackage{mathdesign}% for Roman fonts
diff --git a/lib/doc/LaTeXConfig.lyx b/lib/doc/LaTeXConfig.lyx
index bfaad60..9532d33 100644
--- a/lib/doc/LaTeXConfig.lyx
+++ b/lib/doc/LaTeXConfig.lyx
@@ -1,5 +1,5 @@
 #LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 595
+\lyxformat 597
 \begin_document
 \begin_header
 \save_transient_properties true
@@ -1181,6 +1181,81 @@ Libertine Mono
 \emph default
  typewriter font.
  This font is shipped with libertine font package as of February 2013.
+\change_inserted -712698321 1594287772
+
+\end_layout
+
+\begin_layout Subsection
+Libertin
+\change_deleted -712698321 1594287776
+e Mono
+\change_inserted -712698321 1594287776
+us
+\change_unchanged
+
+\end_layout
+
+\begin_layout Description
+Found: 
+\begin_inset Info
+type  "package"
+arg   "libertinus"
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+CTAN: 
+\family typewriter
+fonts/libertin
+\change_inserted -712698321 1594287840
+us
+\change_deleted -712698321 1594287840
+e
+\change_unchanged
+/
+\end_layout
+
+\begin_layout Description
+Notes: The 
+\family sans
+libertin
+\change_deleted -712698321 1594287845
+eMono-type1
+\change_inserted -712698321 1594287845
+us
+\change_unchanged
+
+\family default
+ package provides support for the 
+\emph on
+Libertin
+\change_deleted -712698321 1594287851
+e Mono
+\emph default
+ typewriter font
+\change_inserted -712698321 1594287856
+
+\emph on
+us
+\emph default
+ family of fonts
+\change_deleted -712698321 1594287920
+.
+ This font is shipped with libertine font package as of February 2013
+\change_inserted -712698321 1594287938
+, a derivate of the 
+\emph on
+Libertine
+\emph default
+ and 
+\emph on
+Biolinum
+\emph default
+ family of fonts with dome extra features
+\change_unchanged
+.
 \end_layout
 
 \begin_layout Subsection
diff --git a/lib/latexfonts b/lib/latexfonts
index e3b134f..6553f4e 100644
--- a/lib/latexfonts
+++ b/lib/latexfonts
@@ -318,6 +318,25 @@ AltFont libertine-legacy
 	Package          libertine
 EndFont
 
+Font libertinus
+	GuiName          "Libertinus"
+	Family           rm
+	OsfOption        osf
+	Package          libertinus
+	PackageOptions   serif
+	CompleteFont     libertinus-full
+	MoreOptions      1
+
+EndFont
+
+AltFont libertinus-full
+	GuiName          "Libertine"
+	Family           rm
+	OsfOption        osf
+	Package          libertinus
+	MoreOptions      1
+EndFont
+
 Font lmodern
 	GuiName          "Latin Modern Roman"
 	Family           rm
@@ -941,6 +960,24 @@ Font kurierlc
 	SwitchDefault   1
 EndFont
 
+Font LibertinusSans-LF
+	GuiName          "Libertinus Sans"
+	Family           sf
+	Requires         libertinus
+	SwitchDefault    1
+	OsfFont          LibertinusSans-OsF
+	OsfFontOnly      1
+	ScaleCommand     \renewcommand*{\LibertinusSans at scale}{$$val}
+EndFont
+
+AltFont LibertinusSans-OsF
+	GuiName          "Libertinus Sans"
+	Family           sf
+	Requires         libertinus
+	SwitchDefault    1
+	ScaleCommand     \renewcommand*{\LibertinusSans at scale}{$$val}
+EndFont
+
 Font lmss
 	GuiName          "Latin Modern Sans"
 	Family           sf
@@ -1139,6 +1176,14 @@ AltFont libertine-mono-type1
 	Package          libertineMono-type1
 EndFont
 
+Font LibertinusMono-TLF
+	GuiName          "Libertinus Mono"
+	Family           tt
+	Requires         libertinus
+	SwitchDefault    1
+	ScaleCommand     \renewcommand*{\LibertinusMono at scale}{$$val}
+EndFont
+
 Font lmtt
 	GuiName          "Latin Modern Typewriter"
 	Family           tt
diff --git a/lib/lyx2lyx/lyx_2_4.py b/lib/lyx2lyx/lyx_2_4.py
index d4e8b0a..ea6d0bc 100644
--- a/lib/lyx2lyx/lyx_2_4.py
+++ b/lib/lyx2lyx/lyx_2_4.py
@@ -194,6 +194,8 @@ def createFontMapping(fontlist):
                                   'FiraSansUltralight,ultralight'],
                                   "sans", "sf", "FiraSans", "scaled", "lf", "true")
             fm.expandFontMapping(['FiraMono'], "typewriter", "tt", "FiraMono", "scaled", "lf", "true")
+        elif font == 'libertinus':
+            fm.expandFontMapping(['libertinus,serif'], "roman", None, "libertinus", None, "osf")
     return fm
 
 def convert_fonts(document, fm, osfoption = "osf"):
@@ -3849,6 +3851,75 @@ def revert_line_vspaces(document):
         subst = put_cmd_in_ert(insets[inset])
         document.body[i : end + 1] = subst
 
+def convert_libertinus_rm_fonts(document):
+    """Handle Libertinus serif fonts definition to LaTeX"""
+
+    if not get_bool_value(document.header, "\\use_non_tex_fonts"):
+        fm = createFontMapping(['Libertinus'])
+        convert_fonts(document, fm)
+
+def revert_libertinus_rm_fonts(document):
+    """Revert Libertinus serif font definition to LaTeX"""
+
+    if not get_bool_value(document.header, "\\use_non_tex_fonts"):
+        fontmap = dict()
+        fm = createFontMapping(['libertinus'])
+        if revert_fonts(document, fm, fontmap):
+            add_preamble_fonts(document, fontmap)
+
+def revert_libertinus_sftt_fonts(document):
+    " Revert Libertinus sans and tt font definitions to LaTeX "
+
+    if find_token(document.header, "\\use_non_tex_fonts false", 0) != -1:
+        preamble = ""
+        # first sf font
+        i = find_token(document.header, "\\font_sans \"LibertinusSans-LF\"", 0)
+        if i != -1:
+            j = find_token(document.header, "\\font_sans_osf true", 0)
+            if j != -1:
+                add_to_preamble(document, ["\\renewcommand{\\sfdefault}{LibertinusSans-OsF}"])
+                document.header[j] = "\\font_sans_osf false"
+            else:
+                add_to_preamble(document, ["\\renewcommand{\\sfdefault}{LibertinusSans-LF}"])
+            document.header[i] = document.header[i].replace("LibertinusSans-LF", "default")
+            sf_scale = 100.0
+            sfval = find_token(document.header, "\\font_sf_scale", 0)
+            if sfval == -1:
+                document.warning("Malformed LyX document: Missing \\font_sf_scale.")
+            else:
+                sfscale = document.header[sfval].split()
+                val = sfscale[1]
+                sfscale[1] = "100"
+                document.header[sfval] = " ".join(sfscale)
+                try:
+                    # float() can throw
+                    sf_scale = float(val)
+                except:
+                    document.warning("Invalid font_sf_scale value: " + val)
+                if sf_scale != "100.0":
+                    add_to_preamble(document, ["\\renewcommand*{\\LibertinusSans at scale}{" + str(sf_scale / 100.0) + "}"])
+        # now tt font
+        i = find_token(document.header, "\\font_typewriter \"LibertinusMono-TLF\"", 0)
+        if i != -1:
+            add_to_preamble(document, ["\\renewcommand{\\ttdefault}{LibertinusMono-TLF}"])
+            document.header[i] = document.header[i].replace("LibertinusMono-TLF", "default")
+            tt_scale = 100.0
+            ttval = find_token(document.header, "\\font_tt_scale", 0)
+            if ttval == -1:
+                document.warning("Malformed LyX document: Missing \\font_tt_scale.")
+            else:
+                ttscale = document.header[ttval].split()
+                val = ttscale[1]
+                ttscale[1] = "100"
+                document.header[ttval] = " ".join(ttscale)
+                try:
+                    # float() can throw
+                    tt_scale = float(val)
+                except:
+                    document.warning("Invalid font_tt_scale value: " + val)
+                if tt_scale != "100.0":
+                    add_to_preamble(document, ["\\renewcommand*{\\LibertinusMono at scale}{" + str(tt_scale / 100.0) + "}"])
+
 
 ##
 # Conversion hub
@@ -3907,10 +3978,12 @@ convert = [
            [593, [convert_counter_maintenance]],
            [594, []],
            [595, []],
-           [596, [convert_parskip]]
+           [596, [convert_parskip]],
+           [597, [convert_libertinus_rm_fonts]]
           ]
 
-revert =  [[595, [revert_parskip,revert_line_vspaces]],
+revert =  [[595, [revert_libertinus_rm_fonts,revert_libertinus_sftt_fonts]],
+           [595, [revert_parskip,revert_line_vspaces]],
            [594, [revert_ams_spaces]],
            [593, [revert_counter_inset]],
            [592, [revert_counter_maintenance]],
diff --git a/src/version.h b/src/version.h
index b8d30fd..b6e5600 100644
--- a/src/version.h
+++ b/src/version.h
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 596 // spitz: parskip
-#define LYX_FORMAT_TEX2LYX 596
+#define LYX_FORMAT_LYX 597 // spitz: libertinus fonts
+#define LYX_FORMAT_TEX2LYX 597
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER


More information about the lyx-cvs mailing list