Commit | Line | Data |
---|---|---|
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 | } |