1398f7abdSAkira Yokosawa% -*- coding: utf-8 -*- 2398f7abdSAkira Yokosawa% SPDX-License-Identifier: GPL-2.0 3398f7abdSAkira Yokosawa% 4398f7abdSAkira Yokosawa% LaTeX preamble for "make latexdocs" or "make pdfdocs" including: 5398f7abdSAkira Yokosawa% - TOC width settings 6398f7abdSAkira Yokosawa% - Setting of tabulary (\tymin) 7398f7abdSAkira Yokosawa% - Headheight setting for fancyhdr 8398f7abdSAkira Yokosawa% - Fontfamily settings for CJK (Chinese, Japanese, and Korean) translations 9398f7abdSAkira Yokosawa% 10398f7abdSAkira Yokosawa% Note on the suffix of .sty: 11398f7abdSAkira Yokosawa% This is not implemented as a LaTeX style file, but as a file containing 12398f7abdSAkira Yokosawa% plain LaTeX code to be included into preamble. 13398f7abdSAkira Yokosawa% ".sty" is chosen because ".tex" would cause the build scripts to confuse 14398f7abdSAkira Yokosawa% this file with a LaTeX main file. 15398f7abdSAkira Yokosawa% 16398f7abdSAkira Yokosawa% Copyright (C) 2022 Akira Yokosawa 17398f7abdSAkira Yokosawa 187cee33ceSAkira Yokosawa% Custom width parameters for TOC 197cee33ceSAkira Yokosawa% - Redefine low-level commands defined in report.cls. 207cee33ceSAkira Yokosawa% - Indent of 2 chars is preserved for ease of comparison. 217cee33ceSAkira Yokosawa% Summary of changes from default params: 227cee33ceSAkira Yokosawa% Width of page number (\@pnumwidth): 1.55em -> 2.7em 23b86f46d5SAkira Yokosawa% Width of chapter number: 1.5em -> 2.4em 24b86f46d5SAkira Yokosawa% Indent of section number: 1.5em -> 2.4em 257cee33ceSAkira Yokosawa% Width of section number: 2.6em -> 3.2em 26b86f46d5SAkira Yokosawa% Indent of subsection number: 4.1em -> 5.6em 277cee33ceSAkira Yokosawa% Width of subsection number: 3.5em -> 4.3em 287cee33ceSAkira Yokosawa% 29b86f46d5SAkira Yokosawa% These params can have 4 digit page counts, 3 digit chapter counts, 307cee33ceSAkira Yokosawa% section counts of 4 digits + 1 period (e.g., 18.10), and subsection counts 317cee33ceSAkira Yokosawa% of 5 digits + 2 periods (e.g., 18.7.13). 32398f7abdSAkira Yokosawa\makeatletter 33398f7abdSAkira Yokosawa%% Redefine \@pnumwidth (page number width) 34398f7abdSAkira Yokosawa\renewcommand*\@pnumwidth{2.7em} 35398f7abdSAkira Yokosawa%% Redefine \l@chapter (chapter list entry) 36398f7abdSAkira Yokosawa\renewcommand*\l@chapter[2]{% 37398f7abdSAkira Yokosawa \ifnum \c@tocdepth >\m@ne 38398f7abdSAkira Yokosawa \addpenalty{-\@highpenalty}% 39398f7abdSAkira Yokosawa \vskip 1.0em \@plus\p@ 40b86f46d5SAkira Yokosawa \setlength\@tempdima{2.4em}% 41398f7abdSAkira Yokosawa \begingroup 42398f7abdSAkira Yokosawa \parindent \z@ \rightskip \@pnumwidth 43398f7abdSAkira Yokosawa \parfillskip -\@pnumwidth 44398f7abdSAkira Yokosawa \leavevmode \bfseries 45398f7abdSAkira Yokosawa \advance\leftskip\@tempdima 46398f7abdSAkira Yokosawa \hskip -\leftskip 47398f7abdSAkira Yokosawa #1\nobreak\hfil 48398f7abdSAkira Yokosawa \nobreak\hb@xt@\@pnumwidth{\hss #2% 49398f7abdSAkira Yokosawa \kern-\p@\kern\p@}\par 50398f7abdSAkira Yokosawa \penalty\@highpenalty 51398f7abdSAkira Yokosawa \endgroup 52398f7abdSAkira Yokosawa \fi} 53398f7abdSAkira Yokosawa%% Redefine \l@section and \l@subsection 54b86f46d5SAkira Yokosawa\renewcommand*\l@section{\@dottedtocline{1}{2.4em}{3.2em}} 55b86f46d5SAkira Yokosawa\renewcommand*\l@subsection{\@dottedtocline{2}{5.6em}{4.3em}} 56398f7abdSAkira Yokosawa\makeatother 57398f7abdSAkira Yokosawa%% Sphinx < 1.8 doesn't have \sphinxtableofcontentshook 58398f7abdSAkira Yokosawa\providecommand{\sphinxtableofcontentshook}{} 59398f7abdSAkira Yokosawa%% Undefine it for compatibility with Sphinx 1.7.9 60398f7abdSAkira Yokosawa\renewcommand{\sphinxtableofcontentshook}{} % Empty the hook 617cee33ceSAkira Yokosawa 627cee33ceSAkira Yokosawa% Prevent column squeezing of tabulary. \tymin is set by Sphinx as: 637cee33ceSAkira Yokosawa% \setlength{\tymin}{3\fontcharwd\font`0 } 647cee33ceSAkira Yokosawa% , which is too short. 65398f7abdSAkira Yokosawa\setlength{\tymin}{20em} 66398f7abdSAkira Yokosawa 67398f7abdSAkira Yokosawa% Adjust \headheight for fancyhdr 68398f7abdSAkira Yokosawa\addtolength{\headheight}{1.6pt} 69398f7abdSAkira Yokosawa\addtolength{\topmargin}{-1.6pt} 70398f7abdSAkira Yokosawa 71398f7abdSAkira Yokosawa% Translations have Asian (CJK) characters which are only displayed if 72398f7abdSAkira Yokosawa% xeCJK is used 73*cee7db1bSAkira Yokosawa\usepackage{ifthen} 74*cee7db1bSAkira Yokosawa\newboolean{enablecjk} 75*cee7db1bSAkira Yokosawa\setboolean{enablecjk}{false} 76398f7abdSAkira Yokosawa\IfFontExistsTF{Noto Sans CJK SC}{ 77*cee7db1bSAkira Yokosawa \IfFileExists{xeCJK.sty}{ 78*cee7db1bSAkira Yokosawa \setboolean{enablecjk}{true} 79*cee7db1bSAkira Yokosawa }{} 80*cee7db1bSAkira Yokosawa}{} 81*cee7db1bSAkira Yokosawa\ifthenelse{\boolean{enablecjk}}{ 82*cee7db1bSAkira Yokosawa % Load xeCJK when both the Noto Sans CJK font and xeCJK.sty are available. 83398f7abdSAkira Yokosawa \usepackage{xeCJK} 847cee33ceSAkira Yokosawa % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits 857cee33ceSAkira Yokosawa % its emulation. 867cee33ceSAkira Yokosawa % Select KR variant at the beginning of each document so that quotation 877cee33ceSAkira Yokosawa % and apostorph symbols of half-width is used in TOC of Latin documents. 88398f7abdSAkira Yokosawa \IfFontExistsTF{Noto Serif CJK KR}{ 89398f7abdSAkira Yokosawa \setCJKmainfont{Noto Serif CJK KR}[AutoFakeSlant] 90398f7abdSAkira Yokosawa }{ 91398f7abdSAkira Yokosawa \setCJKmainfont{Noto Sans CJK KR}[AutoFakeSlant] 92398f7abdSAkira Yokosawa } 93398f7abdSAkira Yokosawa \setCJKsansfont{Noto Sans CJK KR}[AutoFakeSlant] 94398f7abdSAkira Yokosawa \setCJKmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant] 957cee33ceSAkira Yokosawa % Teach xeCJK of half-width symbols 96398f7abdSAkira Yokosawa \xeCJKDeclareCharClass{HalfLeft}{`“,`‘} 97398f7abdSAkira Yokosawa \xeCJKDeclareCharClass{HalfRight}{`”,`’} 98398f7abdSAkira Yokosawa % CJK Language-specific font choices 997cee33ceSAkira Yokosawa %% for Simplified Chinese 100398f7abdSAkira Yokosawa \IfFontExistsTF{Noto Serif CJK SC}{ 101398f7abdSAkira Yokosawa \newCJKfontfamily[SCmain]\scmain{Noto Serif CJK SC}[AutoFakeSlant] 102398f7abdSAkira Yokosawa \newCJKfontfamily[SCserif]\scserif{Noto Serif CJK SC}[AutoFakeSlant] 103398f7abdSAkira Yokosawa }{ 104398f7abdSAkira Yokosawa \newCJKfontfamily[SCmain]\scmain{Noto Sans CJK SC}[AutoFakeSlant] 105398f7abdSAkira Yokosawa \newCJKfontfamily[SCserif]\scserif{Noto Sans CJK SC}[AutoFakeSlant] 106398f7abdSAkira Yokosawa } 107398f7abdSAkira Yokosawa \newCJKfontfamily[SCsans]\scsans{Noto Sans CJK SC}[AutoFakeSlant] 108398f7abdSAkira Yokosawa \newCJKfontfamily[SCmono]\scmono{Noto Sans Mono CJK SC}[AutoFakeSlant] 1097cee33ceSAkira Yokosawa %% for Traditional Chinese 110398f7abdSAkira Yokosawa \IfFontExistsTF{Noto Serif CJK TC}{ 111398f7abdSAkira Yokosawa \newCJKfontfamily[TCmain]\tcmain{Noto Serif CJK TC}[AutoFakeSlant] 112398f7abdSAkira Yokosawa \newCJKfontfamily[TCserif]\tcserif{Noto Serif CJK TC}[AutoFakeSlant] 113398f7abdSAkira Yokosawa }{ 114398f7abdSAkira Yokosawa \newCJKfontfamily[TCmain]\tcmain{Noto Sans CJK TC}[AutoFakeSlant] 115398f7abdSAkira Yokosawa \newCJKfontfamily[TCserif]\tcserif{Noto Sans CJK TC}[AutoFakeSlant] 116398f7abdSAkira Yokosawa } 117398f7abdSAkira Yokosawa \newCJKfontfamily[TCsans]\tcsans{Noto Sans CJK TC}[AutoFakeSlant] 118398f7abdSAkira Yokosawa \newCJKfontfamily[TCmono]\tcmono{Noto Sans Mono CJK TC}[AutoFakeSlant] 1197cee33ceSAkira Yokosawa %% for Korean 120398f7abdSAkira Yokosawa \IfFontExistsTF{Noto Serif CJK KR}{ 121398f7abdSAkira Yokosawa \newCJKfontfamily[KRmain]\krmain{Noto Serif CJK KR}[AutoFakeSlant] 122398f7abdSAkira Yokosawa \newCJKfontfamily[KRserif]\krserif{Noto Serif CJK KR}[AutoFakeSlant] 123398f7abdSAkira Yokosawa }{ 124398f7abdSAkira Yokosawa \newCJKfontfamily[KRmain]\krmain{Noto Sans CJK KR}[AutoFakeSlant] 125398f7abdSAkira Yokosawa \newCJKfontfamily[KRserif]\krserif{Noto Sans CJK KR}[AutoFakeSlant] 126398f7abdSAkira Yokosawa } 127398f7abdSAkira Yokosawa \newCJKfontfamily[KRsans]\krsans{Noto Sans CJK KR}[AutoFakeSlant] 128398f7abdSAkira Yokosawa \newCJKfontfamily[KRmono]\krmono{Noto Sans Mono CJK KR}[AutoFakeSlant] 1297cee33ceSAkira Yokosawa %% for Japanese 130398f7abdSAkira Yokosawa \IfFontExistsTF{Noto Serif CJK JP}{ 131398f7abdSAkira Yokosawa \newCJKfontfamily[JPmain]\jpmain{Noto Serif CJK JP}[AutoFakeSlant] 132398f7abdSAkira Yokosawa \newCJKfontfamily[JPserif]\jpserif{Noto Serif CJK JP}[AutoFakeSlant] 133398f7abdSAkira Yokosawa }{ 134398f7abdSAkira Yokosawa \newCJKfontfamily[JPmain]\jpmain{Noto Sans CJK JP}[AutoFakeSlant] 135398f7abdSAkira Yokosawa \newCJKfontfamily[JPserif]\jpserif{Noto Sans CJK JP}[AutoFakeSlant] 136398f7abdSAkira Yokosawa } 137398f7abdSAkira Yokosawa \newCJKfontfamily[JPsans]\jpsans{Noto Sans CJK JP}[AutoFakeSlant] 138398f7abdSAkira Yokosawa \newCJKfontfamily[JPmono]\jpmono{Noto Sans Mono CJK JP}[AutoFakeSlant] 139398f7abdSAkira Yokosawa % Dummy commands for Sphinx < 2.3 (no 'extrapackages' support) 140398f7abdSAkira Yokosawa \providecommand{\onehalfspacing}{} 141398f7abdSAkira Yokosawa \providecommand{\singlespacing}{} 142398f7abdSAkira Yokosawa % Define custom macros to on/off CJK 1437cee33ceSAkira Yokosawa %% One and half spacing for CJK contents 144398f7abdSAkira Yokosawa \newcommand{\kerneldocCJKon}{\makexeCJKactive\onehalfspacing} 145398f7abdSAkira Yokosawa \newcommand{\kerneldocCJKoff}{\makexeCJKinactive\singlespacing} 1467cee33ceSAkira Yokosawa % Define custom macros for switching CJK font setting 1477cee33ceSAkira Yokosawa %% for Simplified Chinese 148398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginSC}{% 149398f7abdSAkira Yokosawa \begingroup% 150398f7abdSAkira Yokosawa \scmain% 1517cee33ceSAkira Yokosawa \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in SC 1527cee33ceSAkira Yokosawa \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in SC 153398f7abdSAkira Yokosawa \renewcommand{\CJKrmdefault}{SCserif}% 154398f7abdSAkira Yokosawa \renewcommand{\CJKsfdefault}{SCsans}% 155398f7abdSAkira Yokosawa \renewcommand{\CJKttdefault}{SCmono}% 1567cee33ceSAkira Yokosawa \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' 157398f7abdSAkira Yokosawa % For CJK ascii-art alignment 158398f7abdSAkira Yokosawa \setmonofont{Noto Sans Mono CJK SC}[AutoFakeSlant]% 159398f7abdSAkira Yokosawa } 160398f7abdSAkira Yokosawa \newcommand{\kerneldocEndSC}{\endgroup} 1617cee33ceSAkira Yokosawa %% for Traditional Chinese 162398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginTC}{% 163398f7abdSAkira Yokosawa \begingroup% 164398f7abdSAkira Yokosawa \tcmain% 1657cee33ceSAkira Yokosawa \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in TC 1667cee33ceSAkira Yokosawa \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in TC 167398f7abdSAkira Yokosawa \renewcommand{\CJKrmdefault}{TCserif}% 168398f7abdSAkira Yokosawa \renewcommand{\CJKsfdefault}{TCsans}% 169398f7abdSAkira Yokosawa \renewcommand{\CJKttdefault}{TCmono}% 1707cee33ceSAkira Yokosawa \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' 171398f7abdSAkira Yokosawa % For CJK ascii-art alignment 172398f7abdSAkira Yokosawa \setmonofont{Noto Sans Mono CJK TC}[AutoFakeSlant]% 173398f7abdSAkira Yokosawa } 174398f7abdSAkira Yokosawa \newcommand{\kerneldocEndTC}{\endgroup} 1757cee33ceSAkira Yokosawa %% for Korean 176398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginKR}{% 177398f7abdSAkira Yokosawa \begingroup% 178398f7abdSAkira Yokosawa \krmain% 179398f7abdSAkira Yokosawa \renewcommand{\CJKrmdefault}{KRserif}% 180398f7abdSAkira Yokosawa \renewcommand{\CJKsfdefault}{KRsans}% 181398f7abdSAkira Yokosawa \renewcommand{\CJKttdefault}{KRmono}% 182398f7abdSAkira Yokosawa % \xeCJKsetup{CJKspace = true} % true by default 183398f7abdSAkira Yokosawa % For CJK ascii-art alignment (still misaligned for Hangul) 184398f7abdSAkira Yokosawa \setmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]% 185398f7abdSAkira Yokosawa } 186398f7abdSAkira Yokosawa \newcommand{\kerneldocEndKR}{\endgroup} 1877cee33ceSAkira Yokosawa %% for Japanese 188398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginJP}{% 189398f7abdSAkira Yokosawa \begingroup% 190398f7abdSAkira Yokosawa \jpmain% 191398f7abdSAkira Yokosawa \renewcommand{\CJKrmdefault}{JPserif}% 192398f7abdSAkira Yokosawa \renewcommand{\CJKsfdefault}{JPsans}% 193398f7abdSAkira Yokosawa \renewcommand{\CJKttdefault}{JPmono}% 1947cee33ceSAkira Yokosawa \xeCJKsetup{CJKspace = false}% gobble white space by ' ' 195398f7abdSAkira Yokosawa % For CJK ascii-art alignment 196398f7abdSAkira Yokosawa \setmonofont{Noto Sans Mono CJK JP}[AutoFakeSlant]% 197398f7abdSAkira Yokosawa } 198398f7abdSAkira Yokosawa \newcommand{\kerneldocEndJP}{\endgroup} 1997cee33ceSAkira Yokosawa 200398f7abdSAkira Yokosawa % Single spacing in literal blocks 201398f7abdSAkira Yokosawa \fvset{baselinestretch=1} 202398f7abdSAkira Yokosawa % To customize \sphinxtableofcontents 203398f7abdSAkira Yokosawa \usepackage{etoolbox} 204398f7abdSAkira Yokosawa % Inactivate CJK after tableofcontents 205398f7abdSAkira Yokosawa \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{} 206398f7abdSAkira Yokosawa \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC 207*cee7db1bSAkira Yokosawa}{ % Don't enable CJK 2087cee33ceSAkira Yokosawa % Custom macros to on/off CJK and switch CJK fonts (Dummy) 209398f7abdSAkira Yokosawa \newcommand{\kerneldocCJKon}{} 210398f7abdSAkira Yokosawa \newcommand{\kerneldocCJKoff}{} 2117cee33ceSAkira Yokosawa %% By defining \kerneldocBegin(SC|TC|KR|JP) as commands with an argument 2127cee33ceSAkira Yokosawa %% and ignore the argument (#1) in their definitions, whole contents of 2137cee33ceSAkira Yokosawa %% CJK chapters can be ignored. 214398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginSC}[1]{% 215*cee7db1bSAkira Yokosawa %% Put a note on missing CJK fonts or the xecjk package in place of 216*cee7db1bSAkira Yokosawa %% zh_CN translation. 217*cee7db1bSAkira Yokosawa \begin{sphinxadmonition}{note}{Note on missing fonts and a package:} 21896c7f3b5SAkira Yokosawa Translations of Simplified Chinese (zh\_CN), Traditional Chinese 21996c7f3b5SAkira Yokosawa (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped 220*cee7db1bSAkira Yokosawa due to the lack of suitable font families and/or the texlive-xecjk 221*cee7db1bSAkira Yokosawa package. 22296c7f3b5SAkira Yokosawa 22396c7f3b5SAkira Yokosawa If you want them, please install ``Noto Sans CJK'' font families 224*cee7db1bSAkira Yokosawa along with the texlive-xecjk package by following instructions from 22596c7f3b5SAkira Yokosawa \sphinxcode{./scripts/sphinx-pre-install}. 22696c7f3b5SAkira Yokosawa Having optional ``Noto Serif CJK'' font families will improve 22796c7f3b5SAkira Yokosawa the looks of those translations. 228398f7abdSAkira Yokosawa \end{sphinxadmonition}} 229398f7abdSAkira Yokosawa \newcommand{\kerneldocEndSC}{} 230398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginTC}[1]{} 231398f7abdSAkira Yokosawa \newcommand{\kerneldocEndTC}{} 232398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginKR}[1]{} 233398f7abdSAkira Yokosawa \newcommand{\kerneldocEndKR}{} 234398f7abdSAkira Yokosawa \newcommand{\kerneldocBeginJP}[1]{} 235398f7abdSAkira Yokosawa \newcommand{\kerneldocEndJP}{} 236398f7abdSAkira Yokosawa} 237