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 | |
cee7db1b AY |
73 | \usepackage{ifthen} |
74 | \newboolean{enablecjk} | |
75 | \setboolean{enablecjk}{false} | |
398f7abd | 76 | \IfFontExistsTF{Noto Sans CJK SC}{ |
cee7db1b AY |
77 | \IfFileExists{xeCJK.sty}{ |
78 | \setboolean{enablecjk}{true} | |
79 | }{} | |
80 | }{} | |
81 | \ifthenelse{\boolean{enablecjk}}{ | |
82 | % Load xeCJK when both the Noto Sans CJK font and xeCJK.sty are available. | |
398f7abd | 83 | \usepackage{xeCJK} |
7cee33ce AY |
84 | % Noto CJK fonts don't provide slant shape. [AutoFakeSlant] permits |
85 | % its emulation. | |
86 | % Select KR variant at the beginning of each document so that quotation | |
87 | % and apostorph symbols of half-width is used in TOC of Latin documents. | |
398f7abd AY |
88 | \IfFontExistsTF{Noto Serif CJK KR}{ |
89 | \setCJKmainfont{Noto Serif CJK KR}[AutoFakeSlant] | |
90 | }{ | |
91 | \setCJKmainfont{Noto Sans CJK KR}[AutoFakeSlant] | |
92 | } | |
93 | \setCJKsansfont{Noto Sans CJK KR}[AutoFakeSlant] | |
94 | \setCJKmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant] | |
7cee33ce | 95 | % Teach xeCJK of half-width symbols |
398f7abd AY |
96 | \xeCJKDeclareCharClass{HalfLeft}{`“,`‘} |
97 | \xeCJKDeclareCharClass{HalfRight}{`”,`’} | |
98 | % CJK Language-specific font choices | |
7cee33ce | 99 | %% for Simplified Chinese |
398f7abd AY |
100 | \IfFontExistsTF{Noto Serif CJK SC}{ |
101 | \newCJKfontfamily[SCmain]\scmain{Noto Serif CJK SC}[AutoFakeSlant] | |
102 | \newCJKfontfamily[SCserif]\scserif{Noto Serif CJK SC}[AutoFakeSlant] | |
103 | }{ | |
104 | \newCJKfontfamily[SCmain]\scmain{Noto Sans CJK SC}[AutoFakeSlant] | |
105 | \newCJKfontfamily[SCserif]\scserif{Noto Sans CJK SC}[AutoFakeSlant] | |
106 | } | |
107 | \newCJKfontfamily[SCsans]\scsans{Noto Sans CJK SC}[AutoFakeSlant] | |
108 | \newCJKfontfamily[SCmono]\scmono{Noto Sans Mono CJK SC}[AutoFakeSlant] | |
7cee33ce | 109 | %% for Traditional Chinese |
398f7abd AY |
110 | \IfFontExistsTF{Noto Serif CJK TC}{ |
111 | \newCJKfontfamily[TCmain]\tcmain{Noto Serif CJK TC}[AutoFakeSlant] | |
112 | \newCJKfontfamily[TCserif]\tcserif{Noto Serif CJK TC}[AutoFakeSlant] | |
113 | }{ | |
114 | \newCJKfontfamily[TCmain]\tcmain{Noto Sans CJK TC}[AutoFakeSlant] | |
115 | \newCJKfontfamily[TCserif]\tcserif{Noto Sans CJK TC}[AutoFakeSlant] | |
116 | } | |
117 | \newCJKfontfamily[TCsans]\tcsans{Noto Sans CJK TC}[AutoFakeSlant] | |
118 | \newCJKfontfamily[TCmono]\tcmono{Noto Sans Mono CJK TC}[AutoFakeSlant] | |
7cee33ce | 119 | %% for Korean |
398f7abd AY |
120 | \IfFontExistsTF{Noto Serif CJK KR}{ |
121 | \newCJKfontfamily[KRmain]\krmain{Noto Serif CJK KR}[AutoFakeSlant] | |
122 | \newCJKfontfamily[KRserif]\krserif{Noto Serif CJK KR}[AutoFakeSlant] | |
123 | }{ | |
124 | \newCJKfontfamily[KRmain]\krmain{Noto Sans CJK KR}[AutoFakeSlant] | |
125 | \newCJKfontfamily[KRserif]\krserif{Noto Sans CJK KR}[AutoFakeSlant] | |
126 | } | |
127 | \newCJKfontfamily[KRsans]\krsans{Noto Sans CJK KR}[AutoFakeSlant] | |
128 | \newCJKfontfamily[KRmono]\krmono{Noto Sans Mono CJK KR}[AutoFakeSlant] | |
7cee33ce | 129 | %% for Japanese |
398f7abd AY |
130 | \IfFontExistsTF{Noto Serif CJK JP}{ |
131 | \newCJKfontfamily[JPmain]\jpmain{Noto Serif CJK JP}[AutoFakeSlant] | |
132 | \newCJKfontfamily[JPserif]\jpserif{Noto Serif CJK JP}[AutoFakeSlant] | |
133 | }{ | |
134 | \newCJKfontfamily[JPmain]\jpmain{Noto Sans CJK JP}[AutoFakeSlant] | |
135 | \newCJKfontfamily[JPserif]\jpserif{Noto Sans CJK JP}[AutoFakeSlant] | |
136 | } | |
137 | \newCJKfontfamily[JPsans]\jpsans{Noto Sans CJK JP}[AutoFakeSlant] | |
138 | \newCJKfontfamily[JPmono]\jpmono{Noto Sans Mono CJK JP}[AutoFakeSlant] | |
139 | % Dummy commands for Sphinx < 2.3 (no 'extrapackages' support) | |
140 | \providecommand{\onehalfspacing}{} | |
141 | \providecommand{\singlespacing}{} | |
142 | % Define custom macros to on/off CJK | |
7cee33ce | 143 | %% One and half spacing for CJK contents |
398f7abd AY |
144 | \newcommand{\kerneldocCJKon}{\makexeCJKactive\onehalfspacing} |
145 | \newcommand{\kerneldocCJKoff}{\makexeCJKinactive\singlespacing} | |
7cee33ce AY |
146 | % Define custom macros for switching CJK font setting |
147 | %% for Simplified Chinese | |
398f7abd AY |
148 | \newcommand{\kerneldocBeginSC}{% |
149 | \begingroup% | |
150 | \scmain% | |
7cee33ce AY |
151 | \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in SC |
152 | \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in SC | |
398f7abd AY |
153 | \renewcommand{\CJKrmdefault}{SCserif}% |
154 | \renewcommand{\CJKsfdefault}{SCsans}% | |
155 | \renewcommand{\CJKttdefault}{SCmono}% | |
7cee33ce | 156 | \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' |
398f7abd AY |
157 | % For CJK ascii-art alignment |
158 | \setmonofont{Noto Sans Mono CJK SC}[AutoFakeSlant]% | |
159 | } | |
160 | \newcommand{\kerneldocEndSC}{\endgroup} | |
7cee33ce | 161 | %% for Traditional Chinese |
398f7abd AY |
162 | \newcommand{\kerneldocBeginTC}{% |
163 | \begingroup% | |
164 | \tcmain% | |
7cee33ce AY |
165 | \xeCJKDeclareCharClass{FullLeft}{`“,`‘}% Full-width in TC |
166 | \xeCJKDeclareCharClass{FullRight}{`”,`’}% Full-width in TC | |
398f7abd AY |
167 | \renewcommand{\CJKrmdefault}{TCserif}% |
168 | \renewcommand{\CJKsfdefault}{TCsans}% | |
169 | \renewcommand{\CJKttdefault}{TCmono}% | |
7cee33ce | 170 | \xeCJKsetup{CJKspace = false}% gobble white spaces by ' ' |
398f7abd AY |
171 | % For CJK ascii-art alignment |
172 | \setmonofont{Noto Sans Mono CJK TC}[AutoFakeSlant]% | |
173 | } | |
174 | \newcommand{\kerneldocEndTC}{\endgroup} | |
7cee33ce | 175 | %% for Korean |
398f7abd AY |
176 | \newcommand{\kerneldocBeginKR}{% |
177 | \begingroup% | |
178 | \krmain% | |
179 | \renewcommand{\CJKrmdefault}{KRserif}% | |
180 | \renewcommand{\CJKsfdefault}{KRsans}% | |
181 | \renewcommand{\CJKttdefault}{KRmono}% | |
182 | % \xeCJKsetup{CJKspace = true} % true by default | |
183 | % For CJK ascii-art alignment (still misaligned for Hangul) | |
184 | \setmonofont{Noto Sans Mono CJK KR}[AutoFakeSlant]% | |
185 | } | |
186 | \newcommand{\kerneldocEndKR}{\endgroup} | |
7cee33ce | 187 | %% for Japanese |
398f7abd AY |
188 | \newcommand{\kerneldocBeginJP}{% |
189 | \begingroup% | |
190 | \jpmain% | |
191 | \renewcommand{\CJKrmdefault}{JPserif}% | |
192 | \renewcommand{\CJKsfdefault}{JPsans}% | |
193 | \renewcommand{\CJKttdefault}{JPmono}% | |
7cee33ce | 194 | \xeCJKsetup{CJKspace = false}% gobble white space by ' ' |
398f7abd AY |
195 | % For CJK ascii-art alignment |
196 | \setmonofont{Noto Sans Mono CJK JP}[AutoFakeSlant]% | |
197 | } | |
198 | \newcommand{\kerneldocEndJP}{\endgroup} | |
7cee33ce | 199 | |
398f7abd AY |
200 | % Single spacing in literal blocks |
201 | \fvset{baselinestretch=1} | |
202 | % To customize \sphinxtableofcontents | |
203 | \usepackage{etoolbox} | |
204 | % Inactivate CJK after tableofcontents | |
205 | \apptocmd{\sphinxtableofcontents}{\kerneldocCJKoff}{}{} | |
7cee33ce | 206 | \xeCJKsetup{CJKspace = true}% For inter-phrase space of Korean TOC |
cee7db1b | 207 | }{ % Don't enable CJK |
7cee33ce | 208 | % Custom macros to on/off CJK and switch CJK fonts (Dummy) |
398f7abd AY |
209 | \newcommand{\kerneldocCJKon}{} |
210 | \newcommand{\kerneldocCJKoff}{} | |
7cee33ce AY |
211 | %% By defining \kerneldocBegin(SC|TC|KR|JP) as commands with an argument |
212 | %% and ignore the argument (#1) in their definitions, whole contents of | |
213 | %% CJK chapters can be ignored. | |
398f7abd | 214 | \newcommand{\kerneldocBeginSC}[1]{% |
cee7db1b AY |
215 | %% Put a note on missing CJK fonts or the xecjk package in place of |
216 | %% zh_CN translation. | |
217 | \begin{sphinxadmonition}{note}{Note on missing fonts and a package:} | |
96c7f3b5 AY |
218 | Translations of Simplified Chinese (zh\_CN), Traditional Chinese |
219 | (zh\_TW), Korean (ko\_KR), and Japanese (ja\_JP) were skipped | |
cee7db1b AY |
220 | due to the lack of suitable font families and/or the texlive-xecjk |
221 | package. | |
96c7f3b5 AY |
222 | |
223 | If you want them, please install ``Noto Sans CJK'' font families | |
cee7db1b | 224 | along with the texlive-xecjk package by following instructions from |
96c7f3b5 AY |
225 | \sphinxcode{./scripts/sphinx-pre-install}. |
226 | Having optional ``Noto Serif CJK'' font families will improve | |
227 | the looks of those translations. | |
398f7abd AY |
228 | \end{sphinxadmonition}} |
229 | \newcommand{\kerneldocEndSC}{} | |
230 | \newcommand{\kerneldocBeginTC}[1]{} | |
231 | \newcommand{\kerneldocEndTC}{} | |
232 | \newcommand{\kerneldocBeginKR}[1]{} | |
233 | \newcommand{\kerneldocEndKR}{} | |
234 | \newcommand{\kerneldocBeginJP}[1]{} | |
235 | \newcommand{\kerneldocEndJP}{} | |
236 | } |