| % -*- coding: utf-8 -*- |
| % SPDX-License-Identifier: GPL-2.0 |
| % |
| % LaTeX preamble for "make latexdocs" or "make pdfdocs" including: |
| % - TOC width settings |
| % - Setting of tabulary (\tymin) |
| % - Headheight setting for fancyhdr |
| % - Fontfamily settings for CJK (Chinese, Japanese, and Korean) translations |
| % |
| % Note on the suffix of .sty: |
| % This is not implemented as a LaTeX style file, but as a file containing |
| % plain LaTeX code to be included into preamble. |
| % ".sty" is chosen because ".tex" would cause the build scripts to confuse |
| % this file with a LaTeX main file. |
| % |
| % Copyright (C) 2022 Akira Yokosawa |
| |
| % Custom width parameters for TOC |
| % - Redefine low-level commands defined in report.cls. |
| % - Indent of 2 chars is preserved for ease of comparison. |
| % Summary of changes from default params: |
| % Width of page number (\@pnumwidth): 1.55em -> 2.7em |
| % Width of chapter number: 1.5em -> 2.4em |
| % Indent of section number: 1.5em -> 2.4em |
| % Width of section number: 2.6em -> 3.2em |
| % Indent of subsection number: 4.1em -> 5.6em |
| % Width of subsection number: 3.5em -> 4.3em |
| % |
| % These params can have 4 digit page counts, 3 digit chapter counts, |
| % section counts of 4 digits + 1 period (e.g., 18.10), and subsection counts |
| % of 5 digits + 2 periods (e.g., 18.7.13). |
| \makeatletter |
| %% Redefine \@pnumwidth (page number width) |
| \renewcommand*\@pnumwidth{2.7em} |
| %% Redefine \l@chapter (chapter list entry) |
| \renewcommand*\l@chapter[2]{% |
| \ifnum \c@tocdepth >\m@ne |
| \addpenalty{-\@highpenalty}% |
| \vskip 1.0em \@plus\p@ |
| \setlength\@tempdima{2.4em}% |
| \begingroup |
| \parindent \z@ \rightskip \@pnumwidth |
| \parfillskip -\@pnumwidth |
| \leavevmode \bfseries |
| \advance\leftskip\@tempdima |
| \hskip -\leftskip |
| #1\nobreak\hfil |
| \nobreak\hb@xt@\@pnumwidth{\hss #2% |
| \kern-\p@\kern\p@}\par |
| \penalty\@highpenalty |
| \endgroup |
| \fi} |
| %% Redefine \l@section and \l@subsection |
| \renewcommand*\l@section{\@dottedtocline{1}{2.4em}{3.2em}} |
| \renewcommand*\l@subsection{\@dottedtocline{2}{5.6em}{4.3em}} |
| \makeatother |
| %% Prevent default \sphinxtableofcontentshook from overwriting above tweaks. |
| \renewcommand{\sphinxtableofcontentshook}{} % Empty the hook |
| |
| % Prevent column squeezing of tabulary. \tymin is set by Sphinx as: |
| % \setlength{\tymin}{3\fontcharwd\font`0 } |
| % , which is too short. |
| \setlength{\tymin}{20em} |
| |
| % Adjust \headheight for fancyhdr |
| \addtolength{\headheight}{1.6pt} |
| \addtolength{\topmargin}{-1.6pt} |
| |
| % Translations have Asian (CJK) characters which are only displayed if |
| % xeCJK is used |
| \usepackage{ifthen} |
| \newboolean{enablecjk} |
| \setboolean{enablecjk}{false} |
| \IfFontExistsTF{Noto Sans CJK SC}{ |
| \IfFileExists{xeCJK.sty}{ |
| \setboolean{enablecjk}{true} |
| }{} |
| }{} |
| \ifthenelse{\boolean{enablecjk}}{ |
| % Load xeCJK when both the Noto Sans CJK font and xeCJK.sty are available. |
| \usepackage{xeCJK} |
| % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits |
| % its emulation. |
| % Select KR variant at the beginning of each document so that quotation |
| % and apostorph symbols of half-width is used in TOC of Latin documents. |
| \IfFontExistsTF{Noto Serif CJK KR}{ |
| \setCJKmainfont{Noto Serif CJK KR}[AutoFakeSlant] |
| }{ |
| \setCJKmainfont{Noto Sans CJK KR}[AutoFakeSlant] |
| } |
| \setCJKsansfont{Noto Sans CJK KR}[AutoFakeSlant] |
| \setCJKmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant] |
| % Teach xeCJK of half-width symbols |
| \xeCJKDeclareCharClass{HalfLeft}{`“,`‘} |
| \xeCJKDeclareCharClass{HalfRight}{`”,`’} |
| % CJK Language-specific font choices |
| %% for Simplified Chinese |
| \IfFontExistsTF{Noto Serif CJK SC}{ |
| \newCJKfontfamily[SCmain]\scmain{Noto Serif CJK SC}[AutoFakeSlant] |
| \newCJKfontfamily[SCserif]\scserif{Noto Serif CJK SC}[AutoFakeSlant] |
| }{ |
| \newCJKfontfamily[SCmain]\scmain{Noto Sans CJK SC}[AutoFakeSlant] |
| \newCJKfontfamily[SCserif]\scserif{Noto Sans CJK SC}[AutoFakeSlant] |
| } |
| \newCJKfontfamily[SCsans]\scsans{Noto Sans CJK SC}[AutoFakeSlant] |
| \newCJKfontfamily[SCmono]\scmono{Noto Sans Mono CJK SC}[AutoFakeSlant] |
| %% for Traditional Chinese |
| \IfFontExistsTF{Noto Serif CJK TC}{ |
| \newCJKfontfamily[TCmain]\tcmain{Noto Serif CJK TC}[AutoFakeSlant] |
| \newCJKfontfamily[TCserif]\tcserif{Noto Serif CJK TC}[AutoFakeSlant] |
| }{ |
| \newCJKfontfamily[TCmain]\tcmain{Noto Sans CJK TC}[AutoFakeSlant] |
| \newCJKfontfamily[TCserif]\tcserif{Noto Sans CJK TC}[AutoFakeSlant] |
| } |
| \newCJKfontfamily[TCsans]\tcsans{Noto Sans CJK TC}[AutoFakeSlant] |
| \newCJKfontfamily[TCmono]\tcmono{Noto Sans Mono CJK TC}[AutoFakeSlant] |
| %% for Korean |
| \IfFontExistsTF{Noto Serif CJK KR}{ |
| \newCJKfontfamily[KRmain]\krmain{Noto Serif CJK KR}[AutoFakeSlant] |
| \newCJKfontfamily[KRserif]\krserif{Noto Serif CJK KR}[AutoFakeSlant] |
| }{ |
| \newCJKfontfamily[KRmain]\krmain{Noto Sans CJK KR}[AutoFakeSlant] |
| \newCJKfontfamily[KRserif]\krserif{Noto Sans CJK KR}[AutoFakeSlant] |
| } |
| \newCJKfontfamily[KRsans]\krsans{Noto Sans CJK KR}[AutoFakeSlant] |
| \newCJKfontfamily[KRmono]\krmono{Noto Sans Mono CJK KR}[AutoFakeSlant] |
| %% for Japanese |
| \IfFontExistsTF{Noto Serif CJK JP}{ |
| \newCJKfontfamily[JPmain]\jpmain{Noto Serif CJK JP}[AutoFakeSlant] |
| \newCJKfontfamily[JPserif]\jpserif{Noto Serif CJK JP}[AutoFakeSlant] |
| }{ |
| \newCJKfontfamily[JPmain]\jpmain{Noto Sans CJK JP}[AutoFakeSlant] |
| \newCJKfontfamily[JPserif]\jpserif{Noto Sans CJK JP}[AutoFakeSlant] |
| } |
| \newCJKfontfamily[JPsans]\jpsans{Noto Sans CJK JP}[AutoFakeSlant] |
| \newCJKfontfamily[JPmono]\jpmono{Noto Sans Mono CJK JP}[AutoFakeSlant] |
| % Define custom macros to on/off CJK |
| %% One and half spacing for CJK contents |
| \newcommand{\kerneldocCJKon}{\makexeCJKactive\onehalfspacing} |
| \newcommand{\kerneldocCJKoff}{\makexeCJKinactive\singlespacing} |
| % Define custom macros for switching CJK font setting |
| %% for Simplified Chinese |
| \newcommand{\kerneldocBeginSC}{% |
| \begingroup% |
| \scmain% |
| \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in SC |
| \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in SC |
| \renewcommand{\CJKrmdefault}{SCserif}% |
| \renewcommand{\CJKsfdefault}{SCsans}% |
| \renewcommand{\CJKttdefault}{SCmono}% |
| \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' |
| % For CJK ascii-art alignment |
| \setmonofont{Noto Sans Mono CJK SC}[AutoFakeSlant]% |
| } |
| \newcommand{\kerneldocEndSC}{\endgroup} |
| %% for Traditional Chinese |
| \newcommand{\kerneldocBeginTC}{% |
| \begingroup% |
| \tcmain% |
| \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in TC |
| \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in TC |
| \renewcommand{\CJKrmdefault}{TCserif}% |
| \renewcommand{\CJKsfdefault}{TCsans}% |
| \renewcommand{\CJKttdefault}{TCmono}% |
| \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' |
| % For CJK ascii-art alignment |
| \setmonofont{Noto Sans Mono CJK TC}[AutoFakeSlant]% |
| } |
| \newcommand{\kerneldocEndTC}{\endgroup} |
| %% for Korean |
| \newcommand{\kerneldocBeginKR}{% |
| \begingroup% |
| \krmain% |
| \renewcommand{\CJKrmdefault}{KRserif}% |
| \renewcommand{\CJKsfdefault}{KRsans}% |
| \renewcommand{\CJKttdefault}{KRmono}% |
| % \xeCJKsetup{CJKspace = true} % true by default |
| % For CJK ascii-art alignment (still misaligned for Hangul) |
| \setmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]% |
| } |
| \newcommand{\kerneldocEndKR}{\endgroup} |
| %% for Japanese |
| \newcommand{\kerneldocBeginJP}{% |
| \begingroup% |
| \jpmain% |
| \renewcommand{\CJKrmdefault}{JPserif}% |
| \renewcommand{\CJKsfdefault}{JPsans}% |
| \renewcommand{\CJKttdefault}{JPmono}% |
| \xeCJKsetup{CJKspace = false}% gobble white space by ' ' |
| % For CJK ascii-art alignment |
| \setmonofont{Noto Sans Mono CJK JP}[AutoFakeSlant]% |
| } |
| \newcommand{\kerneldocEndJP}{\endgroup} |
| |
| % Single spacing in literal blocks |
| \fvset{baselinestretch=1} |
| % To customize \sphinxtableofcontents |
| \usepackage{etoolbox} |
| % Inactivate CJK after tableofcontents |
| \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{} |
| \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC |
| % Suppress extra white space at latin .. non-latin in literal blocks |
| \AtBeginEnvironment{sphinxVerbatim}{\CJKsetecglue{}} |
| }{ % Don't enable CJK |
| % Custom macros to on/off CJK and switch CJK fonts (Dummy) |
| \newcommand{\kerneldocCJKon}{} |
| \newcommand{\kerneldocCJKoff}{} |
| %% By defining \kerneldocBegin(SC|TC|KR|JP) as commands with an argument |
| %% and ignore the argument (#1) in their definitions, whole contents of |
| %% CJK chapters can be ignored. |
| \newcommand{\kerneldocBeginSC}[1]{% |
| %% Put a note on missing CJK fonts or the xecjk package in place of |
| %% zh_CN translation. |
| \begin{sphinxadmonition}{note}{Note on missing fonts and a package:} |
| Translations of Simplified Chinese (zh\_CN), Traditional Chinese |
| (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped |
| due to the lack of suitable font families and/or the texlive-xecjk |
| package. |
| |
| If you want them, please install non-variable ``Noto Sans CJK'' |
| font families along with the texlive-xecjk package by following |
| instructions from |
| \sphinxcode{./scripts/sphinx-pre-install}. |
| Having optional non-variable ``Noto Serif CJK'' font families will |
| improve the looks of those translations. |
| \end{sphinxadmonition}} |
| \newcommand{\kerneldocEndSC}{} |
| \newcommand{\kerneldocBeginTC}[1]{} |
| \newcommand{\kerneldocEndTC}{} |
| \newcommand{\kerneldocBeginKR}[1]{} |
| \newcommand{\kerneldocEndKR}{} |
| \newcommand{\kerneldocBeginJP}[1]{} |
| \newcommand{\kerneldocEndJP}{} |
| } |