brintos

brintos / linux-shallow public Read only

0
0
Text · 9.4 KiB · 5d68395 Raw
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