xref: /openbmc/linux/Documentation/sphinx/kerneldoc-preamble.sty (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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