From e959bf768ba654cf95f09ea8922f2e558a9d3dd3 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 21 Mar 2022 21:48:14 +0000 Subject: letgut (21mar22) git-svn-id: svn://tug.org/texlive/trunk@62879 c570f23f-e606-0410-a88d-b1316a301751 --- .../source/lualatex/letgut/letgut-banner.org | 804 +++++++++++++++++++++ 1 file changed, 804 insertions(+) create mode 100644 Master/texmf-dist/source/lualatex/letgut/letgut-banner.org (limited to 'Master/texmf-dist/source/lualatex/letgut/letgut-banner.org') diff --git a/Master/texmf-dist/source/lualatex/letgut/letgut-banner.org b/Master/texmf-dist/source/lualatex/letgut/letgut-banner.org new file mode 100644 index 00000000000..44fa5fdec9b --- /dev/null +++ b/Master/texmf-dist/source/lualatex/letgut/letgut-banner.org @@ -0,0 +1,804 @@ +# Hey, Emacs! This is a -*- mode: org -*- file! + +#+TITLE: Support for the banner of the newsletter “La Lettre de GUTenberg” +#+AUTHOR: Association GUTenberg +#+EMAIL: secretariat@gutenberg.eu.org +#+DESCRIPTION: ... +#+KEYWORDS: ... +#+LANGUAGE: en +#+OPTIONS: num:t toc:nil title:nil + +#+LATEX_COMPILER: lualatex + +#+LaTeX_CLASS: letgut +#+LaTeX_HEADER: \setmainfont{KpRoman} +#+LaTeX_HEADER: \setsansfont{KpSans} +#+LaTeX_HEADER: \setmonofont[Scale = MatchLowercase]{RobotoMono} +#+LaTeX_HEADER: \letgutsetup{editorial=false} +#+LaTeX_HEADER: \input{listings-conf} +# #+LaTeX_HEADER: \input{codehigh-conf} +# #+LaTeX_HEADER: \letgutsetup{editorial=false,final} + +#+PROPERTY: header-args :padline no :tangle letgut-banner.sty :exports both :noweb yes :eval always +#+export_file_name: letgut-banner-code + +* Readme file :noexport: + +#+begin_src markdown :tangle README.md :exports none + letgut-banner - Support for the banner of the newsletter + “La Lettre de GUTenberg” + ============================================================= + + About + ------- + This package automatically draw the banner of the newsletter “La Lettre de + GUTenberg” with the current main font. + + Release + ------- + 2022-03-18 v0.9 + + Development + ----------- + Follow development, submit issues, and suggest improvements at + https://framagit.org/gutenberg/classe-lettre-gut. +#+end_src + +* Identification + +#+begin_src latex +% This is file `letgut.cls', +% generated with the Emacs Org-babel utility. +% +% The original source file is letgut-banner.org +% +% -------------:| --------------------------------------------------- +% letgut-banner:| Package for the banner of the newsletter +% | “La Lettre GUTenberg” +% Author:| Association GUTenberg +% E-mail:| secretariat@gutenberg.eu.org +% License:| Released under the LaTeX Project Public License +% | v1.3c or later +% See:| http://www.latex-project.org/lppl.txt +% +% Copyright (C) 1994-2022 by Association GUTenberg +% +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License (LPPL), either +% version 1.3c of this license or (at your option) any later +% version. The latest version of this license is in the file: +% +% http://www.latex-project.org/lppl.txt +% +% This work is “maintained” (as per LPPL maintenance status) +% by Association GUTenberg. +#+end_src + +* Implementation + +These document classes can only be used with \LaTeXe, so we make +sure that an appropriate message is displayed when another \TeX{} +format is used. + +#+begin_src latex +\NeedsTeXFormat{LaTeX2e}[2020-10-01] +#+end_src + +Now, we can announce the package name and its version: + +#+begin_src latex +\ProvidesExplPackage{letgut-banner} +{2022-03-18} +{0.9} +{ + Package for the banner of the newsletter “La Lettre de GUTenberg” +} +#+end_src + +** Packages loaded + +In order to provide class options, we load the \package{l3keys2e} which provides +\LaTeXe{} option processing using \LaTeX3 keys: + + #+begin_src latex +\RequirePackage{l3keys2e} + #+end_src + +Till the Lua-based color will be added to the core \package{l3color} approach, +we have to rely on \package{xcolor} + +#+begin_src latex +\RequirePackage{xcolor} +#+end_src + +We want the material added to the first page to be not selectable in order to let the +reader who wants to copy the interesting text be able to select it (see below). + +#+begin_src latex +\RequirePackage{accsupp} +#+end_src + +What follows has to be done at this end of the preamble, otherwise the font set +with ~\setmainfont~ in the preamble isn't taken in account in the banner. + +We define an option for the color of the text in the “L” (that has to be the +same as the page color of the document). + +#+begin_src latex + \keys_define:nn { letgut-banner } + { + , pagecolor .clist_gset:N = \g__letgutbanner_pagecolor_clist + , pagecolor .initial:n = { 1,1,1 } + } + \ProcessKeysOptions { letgut-banner } +#+end_src + +#+begin_src latex +\AddToHook{begindocument}{ +#+end_src + +#+begin_src latex + \cs_generate_variant:Nn \color_fill:nn { nV } +#+end_src + +** Declarations + +*** Dimensions + + #+begin_src latex + \dim_new:N \g__letgutbanner_area_height_dim + \dim_new:N \g__letgutbanner_La_height_dim + \dim_new:N \g__letgutbanner_La_depth_dim + \dim_new:N \g__letgutbanner_La_yoffset_dim + \dim_new:N \g__letgutbanner_banner_vertical_contents_width_dim + \dim_new:N \g__letgutbanner_largest_LETR_box_height_dim + \dim_new:N \g__letgutbanner_between_letters_yoffset_dim + \dim_new:N \g__letgutbanner_between_letters_vertical_space_dim + \dim_new:N \g__letgutbanner_banner_padding_dim + \dim_if_exist:NF \g__letgutbanner_first_page_shrink_dim { + \dim_new:N \g__letgutbanner_first_page_shrink_dim + } + #+end_src + +- Dimensions of the page. If the present package is used with the + \class*{letgut}, they are borrowed from it. Otherwise, they are set to default + values. For this, we first generate a variant of ~\dim_const:Nn~ (see + https://github.com/latex3/latex3/issues/947#issuecomment-860950569). + #+begin_src latex + \cs_generate_variant:Nn \dim_const:Nn { NV } + \dim_if_exist:NTF \c__letgut_textheight_dim { + \dim_const:NV \c__letgutbanner_textheight_dim + \c__letgut_textheight_dim + }{ + \dim_const:Nn \c__letgutbanner_textheight_dim + { 25cm } + } + \dim_if_exist:NTF \c__letgut_textwidth_dim { + \dim_const:NV \c__letgutbanner_textwidth_dim + \c__letgut_textwidth_dim + }{ + \dim_const:Nn \c__letgutbanner_textwidth_dim + { 14cm } + } + \dim_if_exist:NTF \c__letgut_lmargin_dim { + \dim_const:NV \c__letgutbanner_lmargin_dim + \c__letgut_lmargin_dim + }{ + \dim_const:Nn \c__letgutbanner_lmargin_dim + { 5cm } + } + \dim_if_exist:NTF \c__letgut_tmargin_dim { + \dim_const:NV \c__letgutbanner_tmargin_dim + \c__letgut_tmargin_dim + }{ + \dim_const:Nn \c__letgutbanner_tmargin_dim + { 2.92cm } + % \dim_const:Nn \c__letgutbanner_tmargin_dim + % { 3cm } + } + \dim_if_exist:NTF \c__letgut_head_dim { + \dim_const:NV \c__letgutbanner_head_dim + \c__letgut_head_dim + }{ + \dim_const:Nn \c__letgutbanner_head_dim + { 0.6cm } + } + \dim_if_exist:NTF \c__letgut_headsep_dim { + \dim_const:NV \c__letgutbanner_headsep_dim + \c__letgut_headsep_dim + }{ + \dim_const:Nn \c__letgutbanner_headsep_dim + { 0.82cm } + % \dim_const:Nn \c__letgutbanner_headsep_dim + % { 0.9cm } + } + \dim_if_exist:NTF \c__letgut_marginparwidth_dim { + \dim_const:NV \c__letgutbanner_marginparwidth_dim + \c__letgut_marginparwidth_dim + }{ + \dim_const:Nn \c__letgutbanner_marginparwidth_dim + { 3.74cm } + } + #+end_src +- Dimensions of the banner. If the present package is used with the + \class*{letgut}, they are borrowed from it. Otherwise, they are set to + default values. + - Thickness of the “L”. + #+begin_src latex + \dim_if_exist:NTF \c__letgut_banner_thickness_dim { + \dim_const:NV \c__letgutbanner_banner_thickness_dim + \c__letgut_banner_thickness_dim + }{ + \dim_const:Nn \c__letgutbanner_banner_thickness_dim + { 4cm } + } + #+end_src + - Height of the “L” (that of the text area plus 3cm). + #+begin_src latex + \dim_if_exist:NTF \c__letgut_banner_height_dim { + \dim_const:NV \c__letgutbanner_banner_height_dim + \c__letgut_banner_height_dim + }{ + \dim_const:Nn \c__letgutbanner_banner_height_dim { + \c__letgutbanner_textheight_dim + + + 3cm + } + } + #+end_src + - Initial padding of the text embedded in the vertical bar of the “L”. + #+begin_src latex + \dim_const:Nn \c__letgutbanner_banner_padding_dim { .25cm } + #+end_src + - Width of the “L” (the width ($w$) of the text zone plus the width ($l$) of + the left margin minus half the difference between the width of the left + margin and the width ($d$) of the “L”: $=w+l-(l-d)/2=w+(l+d)/2$). + #+begin_src latex + \dim_const:Nn \c__letgutbanner_banner_width_dim { + \c__letgutbanner_textwidth_dim + + + ( + \c__letgutbanner_banner_thickness_dim + + + \c__letgutbanner_lmargin_dim + )/2 + } + #+end_src + - Initial width of the text embedded in the “L” vertical bar. + #+begin_src latex + \dim_const:Nn + \c__letgutbanner_banner_vertical_contents_width_dim { + \c__letgutbanner_banner_thickness_dim + - + 2\c__letgutbanner_banner_padding_dim + } + #+end_src + - Width of the text embedded in the horizontal bar of the “L” (of the text + area plus half the difference between that of the left margin and that of + the thickness of the “L”, minus the padding -- and not 2 times the + padding because this text will be stuck to its left “margin”). + #+begin_src latex + \dim_const:Nn + \c__letgutbanner_banner_horizontal_contents_width_dim { + \c__letgutbanner_textwidth_dim + - ( + \c__letgutbanner_banner_thickness_dim + - + \c__letgutbanner_lmargin_dim + )/2 + - + \c__letgutbanner_banner_padding_dim + } + #+end_src + +*** Boxes + +New boxes, for each of the letters in the word “LETTRE” (!), and then for the +rest of the content listed in the banner. +#+begin_src latex +\box_new:N \g__letgutbanner_L_box +\box_new:N \g__letgutbanner_E_box +\box_new:N \g__letgutbanner_T_box +\box_new:N \g__letgutbanner_R_box +\box_new:N \g__letgutbanner_La_box +\box_new:N \g__letgutbanner_GUTenberg_box +\box_new:N \g__letgutbanner_largest_LETR_box +\box_new:N \g__letgutbanner_g_box +#+end_src + +*** Floating point numbers + +- Minimum percentage of the common height of the letters of the word “LETTRE” + that their line spacing must represent. +#+begin_src latex +\fp_const:Nn \c__letgutbanner_leading_minimum_percent_fp { 0.15 } +#+end_src +- Factor applied to the line spacing between “La” and the 1st letter of + “LETTRE” compared to that between the letters of “LETTRE”. +#+begin_src latex +\fp_const:Nn \c__letgutbanner_leading_La_factor_fp { 1.5 } +#+end_src + +** Application des dimensions de la page + +#+begin_src latex + \geometry{ + asymmetric, + textheight = \c__letgutbanner_textheight_dim, + textwidth = \c__letgutbanner_textwidth_dim, + lmargin = \c__letgutbanner_lmargin_dim, + tmargin = \c__letgutbanner_tmargin_dim, + head = \c__letgutbanner_head_dim, + headsep = \c__letgutbanner_headsep_dim, + marginparwidth= \c__letgutbanner_marginparwidth_dim, + % showframe, + % verbose, + } +#+end_src + +** Filling of the boxes +#+begin_src latex + \hbox_gset:Nn \g__letgutbanner_L_box { \textbf{L} } + \hbox_gset:Nn \g__letgutbanner_E_box { \textbf{E} } + \hbox_gset:Nn \g__letgutbanner_T_box { \textbf{T} } + \hbox_gset:Nn \g__letgutbanner_R_box { \textbf{R} } + \hbox_gset:Nn \g__letgutbanner_La_box { \textbf{\textit{La}} } + \hbox_gset:Nn \g__letgutbanner_GUTenberg_box { + \textbf{\textit{GUTenberg}} + } + \hbox_gset:Nn \g__letgutbanner_g_box { \textbf{g} } +#+end_src + +** Computations + +Determination of the widths of each of the letter boxes of the word “LETTRE”. +#+begin_src latex + \dim_const:Nn \c__letgutbanner_L_width_dim { + \box_wd:N \g__letgutbanner_L_box + } + \dim_const:Nn \c__letgutbanner_E_width_dim { + \box_wd:N \g__letgutbanner_E_box + } + \dim_const:Nn \c__letgutbanner_T_width_dim { + \box_wd:N \g__letgutbanner_T_box + } + \dim_const:Nn \c__letgutbanner_R_width_dim { + \box_wd:N \g__letgutbanner_R_box + } +#+end_src +Determination of the largest of these widths, stored in the scratch dimension +~\g_tmpa_dim~. +#+begin_src latex +\dim_gset:Nn \g_tmpa_dim { + \fp_eval:n { + max ( + \c__letgutbanner_L_width_dim, + \c__letgutbanner_E_width_dim, + \c__letgutbanner_T_width_dim, + \c__letgutbanner_R_width_dim, + ) + }pt +} +#+end_src +Determination of the (1st) box whose width is the largest of all (~argmax~, as +it were). +#+begin_src latex +\box_gset_eq:NN \g__letgutbanner_largest_LETR_box \dim_case:nnF +{ \g_tmpa_dim } +{ + { \c__letgutbanner_L_width_dim } { \g__letgutbanner_L_box } + { \c__letgutbanner_E_width_dim } { \g__letgutbanner_E_box } + { \c__letgutbanner_T_width_dim } { \g__letgutbanner_T_box } + { \c__letgutbanner_R_width_dim } { \g__letgutbanner_R_box } +} +{ No~ idea! } +#+end_src +Resize the box containing “GUTenberg” to the width of the text embedded in the +horizontal bar of the “L”. +#+begin_src latex + \box_gresize_to_wd:Nn \g__letgutbanner_GUTenberg_box { + \c__letgutbanner_banner_horizontal_contents_width_dim + } +#+end_src +Determination of the height and depth of the box containing “GUTenberg” resized. +#+begin_src latex + \dim_const:Nn \c__letgutbanner_GUTenberg_height_dim { + \box_ht:N \g__letgutbanner_GUTenberg_box + } + \dim_const:Nn \c__letgutbanner_GUTenberg_depth_dim { + \box_dp:N \g__letgutbanner_GUTenberg_box + } +#+end_src +Determining the size of the vertical offset of the box containing the resized +“GUTenberg”, so that it is vertically centered in the horizontal bar of the “L”: +the box positioned in $0$ would be at the very bottom of the box containing the +banner so with base line at the bottom the horizontal bar of the “L” so we raise +it first by its depth ($d$) and then by half the difference between the heights +($H$) of the horizontal bar of the “L” and ($h+d$) total of the box containing +“GUTenberg” resized ($=d+H/2-(h+d)/2=(H-h+d)/2$). +#+begin_src latex + \dim_const:Nn \c__letgutbanner_GUTenberg_yoffset_dim { + ( + \c__letgutbanner_banner_thickness_dim + - + \c__letgutbanner_GUTenberg_height_dim + + + \c__letgutbanner_GUTenberg_depth_dim + )/2 + } +#+end_src +Once the height of the zone devoted to “La LETTRE” in the vertical bar of the +“L” has been fixed, the line spacing between the letters of the word “LETTRE” +depends in fact only on the width occupied by the widest of them, by definition +equal to the width allocated to the text embedded in the vertical bar of the +“L”. The latter, stored in ~\g__letgutbanner_banner_vertical_contents_width_dim~, is +initially fixed: +#+begin_src latex + \dim_gset:Nn + \g__letgutbanner_banner_vertical_contents_width_dim + \c__letgutbanner_banner_vertical_contents_width_dim +#+end_src +but, to avoid this line spacing being too small (or even negative), we test that +it is greater than a certain threshold, equal to a certain minimum percentage of +the height common to the letters of the word “LETTRE”, stored in: + +~\c__letgutbanner_leading_minimum_percent_fp~ + +and fixed at 0.15. If this is not the +case, we reduce (by 1pt): + +~\g__letgutbanner_banner_vertical_contents_width_dim~ + +and loop until it is the case. +#+begin_src latex + \dim_do_until:nNnn { + \g__letgutbanner_between_letters_vertical_space_dim + } + > + { + \fp_use:N\c__letgutbanner_leading_minimum_percent_fp + \g__letgutbanner_largest_LETR_box_height_dim + }{ +#+end_src +Resize the largest of these boxes to the width of the text embedded in the “L”. +#+begin_src latex + \box_gresize_to_wd:Nn \g__letgutbanner_largest_LETR_box { + \g__letgutbanner_banner_vertical_contents_width_dim + } +#+end_src +Height of this resized larger box. +#+begin_src latex + \dim_gset:Nn \g__letgutbanner_largest_LETR_box_height_dim { + \box_ht:N \g__letgutbanner_largest_LETR_box + } +#+end_src +Resize the boxes for each of the letters in the word “LETTRE” so that they are +all the same height as the widest of them. +#+begin_src latex + \box_gresize_to_ht:Nn \g__letgutbanner_L_box { + \g__letgutbanner_largest_LETR_box_height_dim + } + \box_gresize_to_ht:Nn \g__letgutbanner_E_box { + \g__letgutbanner_largest_LETR_box_height_dim + } + \box_gresize_to_ht:Nn \g__letgutbanner_T_box { + \g__letgutbanner_largest_LETR_box_height_dim + } + \box_gresize_to_ht:Nn \g__letgutbanner_R_box { + \g__letgutbanner_largest_LETR_box_height_dim + } +#+end_src +Resize the box containing “La” to the width of the text embedded in the “L” +vertical bar. +#+begin_src latex + \box_gresize_to_wd:Nn \g__letgutbanner_La_box { + \g__letgutbanner_banner_vertical_contents_width_dim + } +#+end_src +Determine the height ($h$) and depth ($d$) of the resized box containing “La”. +#+begin_src latex + \dim_gset:Nn \g__letgutbanner_La_height_dim { + \box_ht:N \g__letgutbanner_La_box + } + \dim_gset:Nn \g__letgutbanner_La_depth_dim { + \box_dp:N \g__letgutbanner_La_box + } +#+end_src +Determining the size of the vertical offset of the resized box containing “La” +so that its top is, relative to the top of the “L”, offset by the same amount as +the bottom of the box containing “GUTenberg” is offset from the bottom of the +“L” (i.e., the distance from the top of the page to the top of “La” and the +distance from the bottom of the page to the baseline of “GUTenberg” are +identical). +#+begin_src latex + \dim_gset:Nn \g__letgutbanner_La_yoffset_dim { + \c__letgutbanner_banner_height_dim + - + \c__letgutbanner_GUTenberg_yoffset_dim + - + \g__letgutbanner_La_height_dim + + + \g__letgutbanner_La_depth_dim + } +#+end_src +For the following, the area containing the letters of the word “LETTRE” aligned +vertically is fixed, defined as follows: + - its top is the baseline of “La”, + - its bottom is the baseline of “GUTenberg”. +Determination of the height of this area. +#+begin_src latex + \dim_gset:Nn \g__letgutbanner_area_height_dim { + \g__letgutbanner_La_yoffset_dim + - + \g__letgutbanner_La_depth_dim + - + \c__letgutbanner_GUTenberg_yoffset_dim + } +#+end_src +Determining the vertical jump ($s$) between the letters in the word “LETTRE” +with the constraints that: + - the top of the 1st letter (“L”) is $3e/2$ below the top of the area (where + $e$ is the common vertical space separating the letters of the word + “LETTRE”), + - the baseline of the last letter (“E”) is merged with the bottom of the area, + - this jump must not be less than 20 % of the common height $h$ to all these + letters i.e.: + + ~\g__letgutbanner_largest_LETR_box_height_dim~ + + otherwise the size of the largest of these boxes is reduced to less than the + width of the text embedded in the “L”. + +The sum of : + - the 5 vertical spaces ($5e$) between the letters in the word “LETTRE”, + - the 6 common heights ($6h$) to all these letters, + - $3e/2$, +must equal the height ($H$) of the zone. So we have $H=3e/2+5e+6h$, that is +$e=2(H-6h)/13$. Once initialized, the vertical jump between the letters is +$s=e+h$ that is $s=(2H+h)/13$. Therefore: + +1. Determine the vertical half-space between the letters. + #+begin_src latex + \dim_set:Nn \l_tmpa_dim { + ( + \g__letgutbanner_area_height_dim + - + 6\g__letgutbanner_largest_LETR_box_height_dim + )/13 + } + #+end_src +2. Vertical space between letters. + #+begin_src latex + \dim_gset:Nn \g__letgutbanner_between_letters_vertical_space_dim { + 2\l_tmpa_dim + } + #+end_src +3. If this space does not check the condition explained above, we reduce: + + ~\g__letgutbanner_banner_vertical_contents_width_dim~ + + and loop. + #+begin_src latex + \dim_gsub:Nn \g__letgutbanner_banner_vertical_contents_width_dim { + 1pt + } + } + #+end_src +The width allocated to the text embedded in the vertical bar of the “L” may have +been re-evaluated, so the padding (which must be symmetrical) may have changed +as well. + #+begin_src latex + \dim_gset:Nn \g__letgutbanner_banner_padding_dim { + ( + \c__letgutbanner_banner_thickness_dim + - + \g__letgutbanner_banner_vertical_contents_width_dim + )/2 + } + #+end_src +4. Determination of the vertical offset of the 1st letter (“L”). + #+begin_src latex + \dim_const:Nn \c__letgutbanner_first_letter_yoffset_dim { + \g__letgutbanner_La_yoffset_dim + - + \g__letgutbanner_largest_LETR_box_height_dim + - + \fp_use:N \c__letgutbanner_leading_La_factor_fp + \g__letgutbanner_between_letters_vertical_space_dim + } + #+end_src +5. Determination of the vertical jump between letters. + #+begin_src latex + \dim_gset:Nn \g__letgutbanner_between_letters_yoffset_dim { + \g__letgutbanner_between_letters_vertical_space_dim + + + \g__letgutbanner_largest_LETR_box_height_dim + } + #+end_src +Resize the box containing “g” to the width of the text. +#+begin_src latex + \box_gresize_to_wd:Nn \g__letgutbanner_g_box { + \c__letgutbanner_textwidth_dim + } +#+end_src +Calculates the size by which the height of the text box on the 1st page must be +reduced so that the banner does not encroach on the text. Relative to the top of +the page: + - the top of the horizontal bar of “L” is at a distance equal to the sum of : + - the distance between this top of page and the top of the vertical bar of + “L”, equal to the height ($p$) of the paper minus the height ($l$) of “L” +#+begin_src latex + \dim_gset:Nn \g__letgutbanner_first_page_shrink_dim { + \c__letgutbanner_tmargin_dim + + + \c__letgutbanner_textheight_dim + + + \c__letgutbanner_banner_thickness_dim + - + .5\paperheight + - + .5\c__letgutbanner_banner_height_dim + + + .5\baselineskip + } +#+end_src +Automatic addition on the 1st page (only) of the banner. +#+begin_src latex +\AddToHookNext{shipout/background}{ +#+end_src +We want the material added to this page to be not selectable in order to let the +reader who wants to copy the interesting text be able to select it. +#+begin_src latex + \BeginAccSupp{ActualText={}} +#+end_src +We put now the big “L” at the right place. +#+begin_src latex + \put( + .5\c__letgutbanner_lmargin_dim-.5\c__letgutbanner_banner_thickness_dim + , + -.5\paperheight-.5\c__letgutbanner_banner_height_dim + ){ + \put(0,0){ + \rule{ + \c__letgutbanner_banner_width_dim + }{ + \c__letgutbanner_banner_thickness_dim + } + } + \put(0,0){ + \rule{ + \c__letgutbanner_banner_thickness_dim + }{ + \c__letgutbanner_banner_height_dim + } + } + #+end_src +The color should not be systematically white, but should be identical to the one +chosen for the page background. +#+begin_src latex + % \color_fill:nV {rgb}{ \g__letgutbanner_pagecolor_clist } + \color[rgb]{ \g__letgutbanner_pagecolor_clist } + \put( + \g__letgutbanner_banner_padding_dim + , + \g__letgutbanner_La_yoffset_dim + ){ + \box_use:N \g__letgutbanner_La_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -0\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_L_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -1\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_E_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -2\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_T_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -3\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_T_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -4\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_R_box + } + \put( + \g__letgutbanner_banner_padding_dim + , + \c__letgutbanner_first_letter_yoffset_dim + -5\g__letgutbanner_between_letters_yoffset_dim + ){ + \box_use:N \g__letgutbanner_E_box + } + \put( + \c__letgutbanner_banner_thickness_dim + , + \c__letgutbanner_GUTenberg_yoffset_dim + ){ + \box_use:N \g__letgutbanner_GUTenberg_box + } + % \color_fill:n {black!10} + \color{ black!10 } + \put( + .5\c__letgutbanner_lmargin_dim+.5\c__letgutbanner_banner_thickness_dim + , + .5\paperheight + + + .5\c__letgutbanner_banner_height_dim + - + \c__letgutbanner_tmargin_dim + ){ + \box_move_down:nn {.5\c__letgutbanner_textheight_dim} + {\box_use:N \g__letgutbanner_g_box} + } +} + #+end_src + We end the part which isn't selectable. + #+begin_src latex + \EndAccSupp{} + } +#+end_src + +We close ~\AddToHook{begindocument}~. + +#+begin_src latex +} +#+end_src + +If the package is used with another class than \class{letgut}, we reduce the +textheight of the first page of the height of the horizontal bar of the “L”. + +#+begin_src latex +\@ifclassloaded{letgut}{ +}{ + \AddToHook{begindocument/end}{% + \enlargethispage{ + - \g__letgutbanner_first_page_shrink_dim + } + \thispagestyle{empty} + } +} +#+end_src + +* Example file (=letgut-banner-example.tex=) + +#+begin_src latex :tangle letgut-banner-example.tex :exports both + \documentclass[twoside]{article} + \usepackage{fontspec} + \usepackage[a4paper]{geometry} + \usepackage{fancyhdr} + \usepackage{letgut-banner} + \usepackage{lipsum} + \setmainfont{TeX Gyre Schola} + \fancyhf{} + \fancyhead[RO,LE]{\thepage} + \fancyhead[RE,LO]{Test~\textsf{letgut-banner}} + \pagestyle{fancy} + \begin{document} + \lipsum[1-20] + \end{document} +#+end_src -- cgit v1.2.3