Merge tag 'rproc-v5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc...
[linux-block.git] / Documentation / sphinx / kerneldoc-preamble.sty
CommitLineData
398f7abd
AY
1% -*- coding: utf-8 -*-
2% SPDX-License-Identifier: GPL-2.0
3%
4% LaTeX preamble for "make latexdocs" or "make pdfdocs" including:
5% - TOC width settings
6% - Setting of tabulary (\tymin)
7% - Headheight setting for fancyhdr
8% - Fontfamily settings for CJK (Chinese, Japanese, and Korean) translations
9%
10% Note on the suffix of .sty:
11% This is not implemented as a LaTeX style file, but as a file containing
12% plain LaTeX code to be included into preamble.
13% ".sty" is chosen because ".tex" would cause the build scripts to confuse
14% this file with a LaTeX main file.
15%
16% Copyright (C) 2022 Akira Yokosawa
17
7cee33ce
AY
18% Custom width parameters for TOC
19% - 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.7em
b86f46d5
AY
23% Width of chapter number: 1.5em -> 2.4em
24% Indent of section number: 1.5em -> 2.4em
7cee33ce 25% Width of section number: 2.6em -> 3.2em
b86f46d5 26% Indent of subsection number: 4.1em -> 5.6em
7cee33ce
AY
27% Width of subsection number: 3.5em -> 4.3em
28%
b86f46d5 29% These params can have 4 digit page counts, 3 digit chapter counts,
7cee33ce
AY
30% section counts of 4 digits + 1 period (e.g., 18.10), and subsection counts
31% of 5 digits + 2 periods (e.g., 18.7.13).
398f7abd
AY
32\makeatletter
33%% 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@ne
38 \addpenalty{-\@highpenalty}%
39 \vskip 1.0em \@plus\p@
b86f46d5 40 \setlength\@tempdima{2.4em}%
398f7abd
AY
41 \begingroup
42 \parindent \z@ \rightskip \@pnumwidth
43 \parfillskip -\@pnumwidth
44 \leavevmode \bfseries
45 \advance\leftskip\@tempdima
46 \hskip -\leftskip
47 #1\nobreak\hfil
48 \nobreak\hb@xt@\@pnumwidth{\hss #2%
49 \kern-\p@\kern\p@}\par
50 \penalty\@highpenalty
51 \endgroup
52 \fi}
53%% Redefine \l@section and \l@subsection
b86f46d5
AY
54\renewcommand*\l@section{\@dottedtocline{1}{2.4em}{3.2em}}
55\renewcommand*\l@subsection{\@dottedtocline{2}{5.6em}{4.3em}}
398f7abd
AY
56\makeatother
57%% Sphinx < 1.8 doesn't have \sphinxtableofcontentshook
58\providecommand{\sphinxtableofcontentshook}{}
59%% Undefine it for compatibility with Sphinx 1.7.9
60\renewcommand{\sphinxtableofcontentshook}{} % Empty the hook
7cee33ce
AY
61
62% Prevent column squeezing of tabulary. \tymin is set by Sphinx as:
63% \setlength{\tymin}{3\fontcharwd\font`0 }
64% , which is too short.
398f7abd
AY
65\setlength{\tymin}{20em}
66
67% Adjust \headheight for fancyhdr
68\addtolength{\headheight}{1.6pt}
69\addtolength{\topmargin}{-1.6pt}
70
71% Translations have Asian (CJK) characters which are only displayed if
72% xeCJK is used
73\IfFontExistsTF{Noto Sans CJK SC}{
7cee33ce 74 % Load xeCJK when CJK font is available
398f7abd 75 \usepackage{xeCJK}
7cee33ce
AY
76 % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits
77 % its emulation.
78 % Select KR variant at the beginning of each document so that quotation
79 % and apostorph symbols of half-width is used in TOC of Latin documents.
398f7abd
AY
80 \IfFontExistsTF{Noto Serif CJK KR}{
81 \setCJKmainfont{Noto Serif CJK KR}[AutoFakeSlant]
82 }{
83 \setCJKmainfont{Noto Sans CJK KR}[AutoFakeSlant]
84 }
85 \setCJKsansfont{Noto Sans CJK KR}[AutoFakeSlant]
86 \setCJKmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]
7cee33ce 87 % Teach xeCJK of half-width symbols
398f7abd
AY
88 \xeCJKDeclareCharClass{HalfLeft}{`“,`‘}
89 \xeCJKDeclareCharClass{HalfRight}{`”,`’}
90 % CJK Language-specific font choices
7cee33ce 91 %% for Simplified Chinese
398f7abd
AY
92 \IfFontExistsTF{Noto Serif CJK SC}{
93 \newCJKfontfamily[SCmain]\scmain{Noto Serif CJK SC}[AutoFakeSlant]
94 \newCJKfontfamily[SCserif]\scserif{Noto Serif CJK SC}[AutoFakeSlant]
95 }{
96 \newCJKfontfamily[SCmain]\scmain{Noto Sans CJK SC}[AutoFakeSlant]
97 \newCJKfontfamily[SCserif]\scserif{Noto Sans CJK SC}[AutoFakeSlant]
98 }
99 \newCJKfontfamily[SCsans]\scsans{Noto Sans CJK SC}[AutoFakeSlant]
100 \newCJKfontfamily[SCmono]\scmono{Noto Sans Mono CJK SC}[AutoFakeSlant]
7cee33ce 101 %% for Traditional Chinese
398f7abd
AY
102 \IfFontExistsTF{Noto Serif CJK TC}{
103 \newCJKfontfamily[TCmain]\tcmain{Noto Serif CJK TC}[AutoFakeSlant]
104 \newCJKfontfamily[TCserif]\tcserif{Noto Serif CJK TC}[AutoFakeSlant]
105 }{
106 \newCJKfontfamily[TCmain]\tcmain{Noto Sans CJK TC}[AutoFakeSlant]
107 \newCJKfontfamily[TCserif]\tcserif{Noto Sans CJK TC}[AutoFakeSlant]
108 }
109 \newCJKfontfamily[TCsans]\tcsans{Noto Sans CJK TC}[AutoFakeSlant]
110 \newCJKfontfamily[TCmono]\tcmono{Noto Sans Mono CJK TC}[AutoFakeSlant]
7cee33ce 111 %% for Korean
398f7abd
AY
112 \IfFontExistsTF{Noto Serif CJK KR}{
113 \newCJKfontfamily[KRmain]\krmain{Noto Serif CJK KR}[AutoFakeSlant]
114 \newCJKfontfamily[KRserif]\krserif{Noto Serif CJK KR}[AutoFakeSlant]
115 }{
116 \newCJKfontfamily[KRmain]\krmain{Noto Sans CJK KR}[AutoFakeSlant]
117 \newCJKfontfamily[KRserif]\krserif{Noto Sans CJK KR}[AutoFakeSlant]
118 }
119 \newCJKfontfamily[KRsans]\krsans{Noto Sans CJK KR}[AutoFakeSlant]
120 \newCJKfontfamily[KRmono]\krmono{Noto Sans Mono CJK KR}[AutoFakeSlant]
7cee33ce 121 %% for Japanese
398f7abd
AY
122 \IfFontExistsTF{Noto Serif CJK JP}{
123 \newCJKfontfamily[JPmain]\jpmain{Noto Serif CJK JP}[AutoFakeSlant]
124 \newCJKfontfamily[JPserif]\jpserif{Noto Serif CJK JP}[AutoFakeSlant]
125 }{
126 \newCJKfontfamily[JPmain]\jpmain{Noto Sans CJK JP}[AutoFakeSlant]
127 \newCJKfontfamily[JPserif]\jpserif{Noto Sans CJK JP}[AutoFakeSlant]
128 }
129 \newCJKfontfamily[JPsans]\jpsans{Noto Sans CJK JP}[AutoFakeSlant]
130 \newCJKfontfamily[JPmono]\jpmono{Noto Sans Mono CJK JP}[AutoFakeSlant]
131 % Dummy commands for Sphinx < 2.3 (no 'extrapackages' support)
132 \providecommand{\onehalfspacing}{}
133 \providecommand{\singlespacing}{}
134 % Define custom macros to on/off CJK
7cee33ce 135 %% One and half spacing for CJK contents
398f7abd
AY
136 \newcommand{\kerneldocCJKon}{\makexeCJKactive\onehalfspacing}
137 \newcommand{\kerneldocCJKoff}{\makexeCJKinactive\singlespacing}
7cee33ce
AY
138 % Define custom macros for switching CJK font setting
139 %% for Simplified Chinese
398f7abd
AY
140 \newcommand{\kerneldocBeginSC}{%
141 \begingroup%
142 \scmain%
7cee33ce
AY
143 \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in SC
144 \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in SC
398f7abd
AY
145 \renewcommand{\CJKrmdefault}{SCserif}%
146 \renewcommand{\CJKsfdefault}{SCsans}%
147 \renewcommand{\CJKttdefault}{SCmono}%
7cee33ce 148 \xeCJKsetup{CJKspace = false}% gobble white spaces by ' '
398f7abd
AY
149 % For CJK ascii-art alignment
150 \setmonofont{Noto Sans Mono CJK SC}[AutoFakeSlant]%
151 }
152 \newcommand{\kerneldocEndSC}{\endgroup}
7cee33ce 153 %% for Traditional Chinese
398f7abd
AY
154 \newcommand{\kerneldocBeginTC}{%
155 \begingroup%
156 \tcmain%
7cee33ce
AY
157 \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in TC
158 \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in TC
398f7abd
AY
159 \renewcommand{\CJKrmdefault}{TCserif}%
160 \renewcommand{\CJKsfdefault}{TCsans}%
161 \renewcommand{\CJKttdefault}{TCmono}%
7cee33ce 162 \xeCJKsetup{CJKspace = false}% gobble white spaces by ' '
398f7abd
AY
163 % For CJK ascii-art alignment
164 \setmonofont{Noto Sans Mono CJK TC}[AutoFakeSlant]%
165 }
166 \newcommand{\kerneldocEndTC}{\endgroup}
7cee33ce 167 %% for Korean
398f7abd
AY
168 \newcommand{\kerneldocBeginKR}{%
169 \begingroup%
170 \krmain%
171 \renewcommand{\CJKrmdefault}{KRserif}%
172 \renewcommand{\CJKsfdefault}{KRsans}%
173 \renewcommand{\CJKttdefault}{KRmono}%
174 % \xeCJKsetup{CJKspace = true} % true by default
175 % For CJK ascii-art alignment (still misaligned for Hangul)
176 \setmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]%
177 }
178 \newcommand{\kerneldocEndKR}{\endgroup}
7cee33ce 179 %% for Japanese
398f7abd
AY
180 \newcommand{\kerneldocBeginJP}{%
181 \begingroup%
182 \jpmain%
183 \renewcommand{\CJKrmdefault}{JPserif}%
184 \renewcommand{\CJKsfdefault}{JPsans}%
185 \renewcommand{\CJKttdefault}{JPmono}%
7cee33ce 186 \xeCJKsetup{CJKspace = false}% gobble white space by ' '
398f7abd
AY
187 % For CJK ascii-art alignment
188 \setmonofont{Noto Sans Mono CJK JP}[AutoFakeSlant]%
189 }
190 \newcommand{\kerneldocEndJP}{\endgroup}
7cee33ce 191
398f7abd
AY
192 % Single spacing in literal blocks
193 \fvset{baselinestretch=1}
194 % To customize \sphinxtableofcontents
195 \usepackage{etoolbox}
196 % Inactivate CJK after tableofcontents
197 \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{}
7cee33ce 198 \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC
398f7abd 199}{ % No CJK font found
7cee33ce 200 % Custom macros to on/off CJK and switch CJK fonts (Dummy)
398f7abd
AY
201 \newcommand{\kerneldocCJKon}{}
202 \newcommand{\kerneldocCJKoff}{}
7cee33ce
AY
203 %% By defining \kerneldocBegin(SC|TC|KR|JP) as commands with an argument
204 %% and ignore the argument (#1) in their definitions, whole contents of
205 %% CJK chapters can be ignored.
398f7abd 206 \newcommand{\kerneldocBeginSC}[1]{%
7cee33ce 207 %% Put a note on missing CJK fonts in place of zh_CN translation.
96c7f3b5
AY
208 \begin{sphinxadmonition}{note}{Note on missing fonts:}
209 Translations of Simplified Chinese (zh\_CN), Traditional Chinese
210 (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped
211 due to the lack of suitable font families.
212
213 If you want them, please install ``Noto Sans CJK'' font families
214 by following instructions from
215 \sphinxcode{./scripts/sphinx-pre-install}.
216 Having optional ``Noto Serif CJK'' font families will improve
217 the looks of those translations.
398f7abd
AY
218 \end{sphinxadmonition}}
219 \newcommand{\kerneldocEndSC}{}
220 \newcommand{\kerneldocBeginTC}[1]{}
221 \newcommand{\kerneldocEndTC}{}
222 \newcommand{\kerneldocBeginKR}[1]{}
223 \newcommand{\kerneldocEndKR}{}
224 \newcommand{\kerneldocBeginJP}[1]{}
225 \newcommand{\kerneldocEndJP}{}
226}