235 lines · plain
1% -*- coding: utf-8 -*-2% SPDX-License-Identifier: GPL-2.03%4% LaTeX preamble for "make latexdocs" or "make pdfdocs" including:5% - TOC width settings6% - Setting of tabulary (\tymin)7% - Headheight setting for fancyhdr8% - Fontfamily settings for CJK (Chinese, Japanese, and Korean) translations9%10% Note on the suffix of .sty:11% This is not implemented as a LaTeX style file, but as a file containing12% plain LaTeX code to be included into preamble.13% ".sty" is chosen because ".tex" would cause the build scripts to confuse14% this file with a LaTeX main file.15%16% Copyright (C) 2022 Akira Yokosawa17 18% Custom width parameters for TOC19% - Redefine low-level commands defined in report.cls.20% - Indent of 2 chars is preserved for ease of comparison.21% Summary of changes from default params:22% Width of page number (\@pnumwidth): 1.55em -> 2.7em23% Width of chapter number: 1.5em -> 2.4em24% Indent of section number: 1.5em -> 2.4em25% Width of section number: 2.6em -> 3.2em26% Indent of subsection number: 4.1em -> 5.6em27% Width of subsection number: 3.5em -> 4.3em28%29% These params can have 4 digit page counts, 3 digit chapter counts,30% section counts of 4 digits + 1 period (e.g., 18.10), and subsection counts31% of 5 digits + 2 periods (e.g., 18.7.13).32\makeatletter33%% Redefine \@pnumwidth (page number width)34\renewcommand*\@pnumwidth{2.7em}35%% Redefine \l@chapter (chapter list entry)36\renewcommand*\l@chapter[2]{%37 \ifnum \c@tocdepth >\m@ne38 \addpenalty{-\@highpenalty}%39 \vskip 1.0em \@plus\p@40 \setlength\@tempdima{2.4em}%41 \begingroup42 \parindent \z@ \rightskip \@pnumwidth43 \parfillskip -\@pnumwidth44 \leavevmode \bfseries45 \advance\leftskip\@tempdima46 \hskip -\leftskip47 #1\nobreak\hfil48 \nobreak\hb@xt@\@pnumwidth{\hss #2%49 \kern-\p@\kern\p@}\par50 \penalty\@highpenalty51 \endgroup52 \fi}53%% Redefine \l@section and \l@subsection54\renewcommand*\l@section{\@dottedtocline{1}{2.4em}{3.2em}}55\renewcommand*\l@subsection{\@dottedtocline{2}{5.6em}{4.3em}}56\makeatother57%% Prevent default \sphinxtableofcontentshook from overwriting above tweaks.58\renewcommand{\sphinxtableofcontentshook}{} % Empty the hook59 60% Prevent column squeezing of tabulary. \tymin is set by Sphinx as:61% \setlength{\tymin}{3\fontcharwd\font`0 }62% , which is too short.63\setlength{\tymin}{20em}64 65% Adjust \headheight for fancyhdr66\addtolength{\headheight}{1.6pt}67\addtolength{\topmargin}{-1.6pt}68 69% Translations have Asian (CJK) characters which are only displayed if70% xeCJK is used71\usepackage{ifthen}72\newboolean{enablecjk}73\setboolean{enablecjk}{false}74\IfFontExistsTF{Noto Sans CJK SC}{75 \IfFileExists{xeCJK.sty}{76 \setboolean{enablecjk}{true}77 }{}78}{}79\ifthenelse{\boolean{enablecjk}}{80 % Load xeCJK when both the Noto Sans CJK font and xeCJK.sty are available.81 \usepackage{xeCJK}82 % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits83 % its emulation.84 % Select KR variant at the beginning of each document so that quotation85 % and apostorph symbols of half-width is used in TOC of Latin documents.86 \IfFontExistsTF{Noto Serif CJK KR}{87 \setCJKmainfont{Noto Serif CJK KR}[AutoFakeSlant]88 }{89 \setCJKmainfont{Noto Sans CJK KR}[AutoFakeSlant]90 }91 \setCJKsansfont{Noto Sans CJK KR}[AutoFakeSlant]92 \setCJKmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]93 % Teach xeCJK of half-width symbols94 \xeCJKDeclareCharClass{HalfLeft}{`“,`‘}95 \xeCJKDeclareCharClass{HalfRight}{`”,`’}96 % CJK Language-specific font choices97 %% for Simplified Chinese98 \IfFontExistsTF{Noto Serif CJK SC}{99 \newCJKfontfamily[SCmain]\scmain{Noto Serif CJK SC}[AutoFakeSlant]100 \newCJKfontfamily[SCserif]\scserif{Noto Serif CJK SC}[AutoFakeSlant]101 }{102 \newCJKfontfamily[SCmain]\scmain{Noto Sans CJK SC}[AutoFakeSlant]103 \newCJKfontfamily[SCserif]\scserif{Noto Sans CJK SC}[AutoFakeSlant]104 }105 \newCJKfontfamily[SCsans]\scsans{Noto Sans CJK SC}[AutoFakeSlant]106 \newCJKfontfamily[SCmono]\scmono{Noto Sans Mono CJK SC}[AutoFakeSlant]107 %% for Traditional Chinese108 \IfFontExistsTF{Noto Serif CJK TC}{109 \newCJKfontfamily[TCmain]\tcmain{Noto Serif CJK TC}[AutoFakeSlant]110 \newCJKfontfamily[TCserif]\tcserif{Noto Serif CJK TC}[AutoFakeSlant]111 }{112 \newCJKfontfamily[TCmain]\tcmain{Noto Sans CJK TC}[AutoFakeSlant]113 \newCJKfontfamily[TCserif]\tcserif{Noto Sans CJK TC}[AutoFakeSlant]114 }115 \newCJKfontfamily[TCsans]\tcsans{Noto Sans CJK TC}[AutoFakeSlant]116 \newCJKfontfamily[TCmono]\tcmono{Noto Sans Mono CJK TC}[AutoFakeSlant]117 %% for Korean118 \IfFontExistsTF{Noto Serif CJK KR}{119 \newCJKfontfamily[KRmain]\krmain{Noto Serif CJK KR}[AutoFakeSlant]120 \newCJKfontfamily[KRserif]\krserif{Noto Serif CJK KR}[AutoFakeSlant]121 }{122 \newCJKfontfamily[KRmain]\krmain{Noto Sans CJK KR}[AutoFakeSlant]123 \newCJKfontfamily[KRserif]\krserif{Noto Sans CJK KR}[AutoFakeSlant]124 }125 \newCJKfontfamily[KRsans]\krsans{Noto Sans CJK KR}[AutoFakeSlant]126 \newCJKfontfamily[KRmono]\krmono{Noto Sans Mono CJK KR}[AutoFakeSlant]127 %% for Japanese128 \IfFontExistsTF{Noto Serif CJK JP}{129 \newCJKfontfamily[JPmain]\jpmain{Noto Serif CJK JP}[AutoFakeSlant]130 \newCJKfontfamily[JPserif]\jpserif{Noto Serif CJK JP}[AutoFakeSlant]131 }{132 \newCJKfontfamily[JPmain]\jpmain{Noto Sans CJK JP}[AutoFakeSlant]133 \newCJKfontfamily[JPserif]\jpserif{Noto Sans CJK JP}[AutoFakeSlant]134 }135 \newCJKfontfamily[JPsans]\jpsans{Noto Sans CJK JP}[AutoFakeSlant]136 \newCJKfontfamily[JPmono]\jpmono{Noto Sans Mono CJK JP}[AutoFakeSlant]137 % Define custom macros to on/off CJK138 %% One and half spacing for CJK contents139 \newcommand{\kerneldocCJKon}{\makexeCJKactive\onehalfspacing}140 \newcommand{\kerneldocCJKoff}{\makexeCJKinactive\singlespacing}141 % Define custom macros for switching CJK font setting142 %% for Simplified Chinese143 \newcommand{\kerneldocBeginSC}{%144 \begingroup%145 \scmain%146 \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in SC147 \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in SC148 \renewcommand{\CJKrmdefault}{SCserif}%149 \renewcommand{\CJKsfdefault}{SCsans}%150 \renewcommand{\CJKttdefault}{SCmono}%151 \xeCJKsetup{CJKspace = false}% gobble white spaces by ' '152 % For CJK ascii-art alignment153 \setmonofont{Noto Sans Mono CJK SC}[AutoFakeSlant]%154 }155 \newcommand{\kerneldocEndSC}{\endgroup}156 %% for Traditional Chinese157 \newcommand{\kerneldocBeginTC}{%158 \begingroup%159 \tcmain%160 \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in TC161 \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in TC162 \renewcommand{\CJKrmdefault}{TCserif}%163 \renewcommand{\CJKsfdefault}{TCsans}%164 \renewcommand{\CJKttdefault}{TCmono}%165 \xeCJKsetup{CJKspace = false}% gobble white spaces by ' '166 % For CJK ascii-art alignment167 \setmonofont{Noto Sans Mono CJK TC}[AutoFakeSlant]%168 }169 \newcommand{\kerneldocEndTC}{\endgroup}170 %% for Korean171 \newcommand{\kerneldocBeginKR}{%172 \begingroup%173 \krmain%174 \renewcommand{\CJKrmdefault}{KRserif}%175 \renewcommand{\CJKsfdefault}{KRsans}%176 \renewcommand{\CJKttdefault}{KRmono}%177 % \xeCJKsetup{CJKspace = true} % true by default178 % For CJK ascii-art alignment (still misaligned for Hangul)179 \setmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]%180 }181 \newcommand{\kerneldocEndKR}{\endgroup}182 %% for Japanese183 \newcommand{\kerneldocBeginJP}{%184 \begingroup%185 \jpmain%186 \renewcommand{\CJKrmdefault}{JPserif}%187 \renewcommand{\CJKsfdefault}{JPsans}%188 \renewcommand{\CJKttdefault}{JPmono}%189 \xeCJKsetup{CJKspace = false}% gobble white space by ' '190 % For CJK ascii-art alignment191 \setmonofont{Noto Sans Mono CJK JP}[AutoFakeSlant]%192 }193 \newcommand{\kerneldocEndJP}{\endgroup}194 195 % Single spacing in literal blocks196 \fvset{baselinestretch=1}197 % To customize \sphinxtableofcontents198 \usepackage{etoolbox}199 % Inactivate CJK after tableofcontents200 \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{}201 \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC202 % Suppress extra white space at latin .. non-latin in literal blocks203 \AtBeginEnvironment{sphinxVerbatim}{\CJKsetecglue{}}204}{ % Don't enable CJK205 % Custom macros to on/off CJK and switch CJK fonts (Dummy)206 \newcommand{\kerneldocCJKon}{}207 \newcommand{\kerneldocCJKoff}{}208 %% By defining \kerneldocBegin(SC|TC|KR|JP) as commands with an argument209 %% and ignore the argument (#1) in their definitions, whole contents of210 %% CJK chapters can be ignored.211 \newcommand{\kerneldocBeginSC}[1]{%212 %% Put a note on missing CJK fonts or the xecjk package in place of213 %% zh_CN translation.214 \begin{sphinxadmonition}{note}{Note on missing fonts and a package:}215 Translations of Simplified Chinese (zh\_CN), Traditional Chinese216 (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped217 due to the lack of suitable font families and/or the texlive-xecjk218 package.219 220 If you want them, please install non-variable ``Noto Sans CJK''221 font families along with the texlive-xecjk package by following222 instructions from223 \sphinxcode{./scripts/sphinx-pre-install}.224 Having optional non-variable ``Noto Serif CJK'' font families will225 improve the looks of those translations.226 \end{sphinxadmonition}}227 \newcommand{\kerneldocEndSC}{}228 \newcommand{\kerneldocBeginTC}[1]{}229 \newcommand{\kerneldocEndTC}{}230 \newcommand{\kerneldocBeginKR}[1]{}231 \newcommand{\kerneldocEndKR}{}232 \newcommand{\kerneldocBeginJP}[1]{}233 \newcommand{\kerneldocEndJP}{}234}235