| """constants for LaTeX builder.""" |
| |
| from __future__ import annotations |
| |
| from typing import Any |
| |
| PDFLATEX_DEFAULT_FONTPKG = r''' |
| \usepackage{tgtermes} |
| \usepackage{tgheros} |
| \renewcommand{\ttdefault}{txtt} |
| ''' |
| |
| PDFLATEX_DEFAULT_FONTSUBSTITUTION = r''' |
| \expandafter\ifx\csname T@LGR\endcsname\relax |
| \else |
| % LGR was declared as font encoding |
| \substitutefont{LGR}{\rmdefault}{cmr} |
| \substitutefont{LGR}{\sfdefault}{cmss} |
| \substitutefont{LGR}{\ttdefault}{cmtt} |
| \fi |
| \expandafter\ifx\csname T@X2\endcsname\relax |
| \expandafter\ifx\csname T@T2A\endcsname\relax |
| \else |
| % T2A was declared as font encoding |
| \substitutefont{T2A}{\rmdefault}{cmr} |
| \substitutefont{T2A}{\sfdefault}{cmss} |
| \substitutefont{T2A}{\ttdefault}{cmtt} |
| \fi |
| \else |
| % X2 was declared as font encoding |
| \substitutefont{X2}{\rmdefault}{cmr} |
| \substitutefont{X2}{\sfdefault}{cmss} |
| \substitutefont{X2}{\ttdefault}{cmtt} |
| \fi |
| ''' |
| |
| XELATEX_DEFAULT_FONTPKG = r''' |
| \setmainfont{FreeSerif}[ |
| Extension = .otf, |
| UprightFont = *, |
| ItalicFont = *Italic, |
| BoldFont = *Bold, |
| BoldItalicFont = *BoldItalic |
| ] |
| \setsansfont{FreeSans}[ |
| Extension = .otf, |
| UprightFont = *, |
| ItalicFont = *Oblique, |
| BoldFont = *Bold, |
| BoldItalicFont = *BoldOblique, |
| ] |
| \setmonofont{FreeMono}[ |
| Extension = .otf, |
| UprightFont = *, |
| ItalicFont = *Oblique, |
| BoldFont = *Bold, |
| BoldItalicFont = *BoldOblique, |
| ] |
| ''' |
| |
| XELATEX_GREEK_DEFAULT_FONTPKG = (XELATEX_DEFAULT_FONTPKG + |
| '\n\\newfontfamily\\greekfont{FreeSerif}' + |
| '\n\\newfontfamily\\greekfontsf{FreeSans}' + |
| '\n\\newfontfamily\\greekfonttt{FreeMono}') |
| |
| LUALATEX_DEFAULT_FONTPKG = XELATEX_DEFAULT_FONTPKG |
| |
| DEFAULT_SETTINGS: dict[str, Any] = { |
| 'latex_engine': 'pdflatex', |
| 'papersize': '', |
| 'pointsize': '', |
| 'pxunit': '.75bp', |
| 'classoptions': '', |
| 'extraclassoptions': '', |
| 'maxlistdepth': '', |
| 'sphinxpkgoptions': '', |
| 'sphinxsetup': '', |
| 'fvset': '\\fvset{fontsize=auto}', |
| 'passoptionstopackages': '', |
| 'geometry': '\\usepackage{geometry}', |
| 'inputenc': '', |
| 'utf8extra': '', |
| 'cmappkg': '\\usepackage{cmap}', |
| 'fontenc': '\\usepackage[T1]{fontenc}', |
| 'amsmath': '\\usepackage{amsmath,amssymb,amstext}', |
| 'multilingual': '', |
| 'babel': '\\usepackage{babel}', |
| 'polyglossia': '', |
| 'fontpkg': PDFLATEX_DEFAULT_FONTPKG, |
| 'fontsubstitution': PDFLATEX_DEFAULT_FONTSUBSTITUTION, |
| 'substitutefont': '', |
| 'textcyrillic': '', |
| 'textgreek': '\\usepackage{textalpha}', |
| 'fncychap': '\\usepackage[Bjarne]{fncychap}', |
| 'hyperref': ('% Include hyperref last.\n' |
| '\\usepackage{hyperref}\n' |
| '% Fix anchor placement for figures with captions.\n' |
| '\\usepackage{hypcap}% it must be loaded after hyperref.\n' |
| '% Set up styles of URL: it should be placed after hyperref.\n' |
| '\\urlstyle{same}'), |
| 'contentsname': '', |
| 'extrapackages': '', |
| 'preamble': '', |
| 'title': '', |
| 'release': '', |
| 'author': '', |
| 'releasename': '', |
| 'makeindex': '\\makeindex', |
| 'shorthandoff': '', |
| 'maketitle': '\\sphinxmaketitle', |
| 'tableofcontents': '\\sphinxtableofcontents', |
| 'atendofbody': '', |
| 'printindex': '\\printindex', |
| 'transition': '\n\n\\bigskip\\hrule\\bigskip\n\n', |
| 'figure_align': 'htbp', |
| 'tocdepth': '', |
| 'secnumdepth': '', |
| } |
| |
| ADDITIONAL_SETTINGS: dict[Any, dict[str, Any]] = { |
| 'pdflatex': { |
| 'inputenc': '\\usepackage[utf8]{inputenc}', |
| 'utf8extra': ('\\ifdefined\\DeclareUnicodeCharacter\n' |
| '% support both utf8 and utf8x syntaxes\n' |
| ' \\ifdefined\\DeclareUnicodeCharacterAsOptional\n' |
| ' \\def\\sphinxDUC#1{\\DeclareUnicodeCharacter{"#1}}\n' |
| ' \\else\n' |
| ' \\let\\sphinxDUC\\DeclareUnicodeCharacter\n' |
| ' \\fi\n' |
| ' \\sphinxDUC{00A0}{\\nobreakspace}\n' |
| ' \\sphinxDUC{2500}{\\sphinxunichar{2500}}\n' |
| ' \\sphinxDUC{2502}{\\sphinxunichar{2502}}\n' |
| ' \\sphinxDUC{2514}{\\sphinxunichar{2514}}\n' |
| ' \\sphinxDUC{251C}{\\sphinxunichar{251C}}\n' |
| ' \\sphinxDUC{2572}{\\textbackslash}\n' |
| '\\fi'), |
| }, |
| 'xelatex': { |
| 'latex_engine': 'xelatex', |
| 'polyglossia': '\\usepackage{polyglossia}', |
| 'babel': '', |
| 'fontenc': ('\\usepackage{fontspec}\n' |
| '\\defaultfontfeatures[\\rmfamily,\\sffamily,\\ttfamily]{}'), |
| 'fontpkg': XELATEX_DEFAULT_FONTPKG, |
| 'fvset': '\\fvset{fontsize=\\small}', |
| 'fontsubstitution': '', |
| 'textgreek': '', |
| 'utf8extra': ('\\catcode`^^^^00a0\\active\\protected\\def^^^^00a0' |
| '{\\leavevmode\\nobreak\\ }'), |
| }, |
| 'lualatex': { |
| 'latex_engine': 'lualatex', |
| 'polyglossia': '\\usepackage{polyglossia}', |
| 'babel': '', |
| 'fontenc': ('\\usepackage{fontspec}\n' |
| '\\defaultfontfeatures[\\rmfamily,\\sffamily,\\ttfamily]{}'), |
| 'fontpkg': LUALATEX_DEFAULT_FONTPKG, |
| 'fvset': '\\fvset{fontsize=\\small}', |
| 'fontsubstitution': '', |
| 'textgreek': '', |
| 'utf8extra': ('\\catcode`^^^^00a0\\active\\protected\\def^^^^00a0' |
| '{\\leavevmode\\nobreak\\ }'), |
| }, |
| 'platex': { |
| 'latex_engine': 'platex', |
| 'babel': '', |
| 'classoptions': ',dvipdfmx', |
| 'fontpkg': PDFLATEX_DEFAULT_FONTPKG, |
| 'fontsubstitution': '', |
| 'textgreek': '', |
| 'fncychap': '', |
| 'geometry': '\\usepackage[dvipdfm]{geometry}', |
| }, |
| 'uplatex': { |
| 'latex_engine': 'uplatex', |
| 'babel': '', |
| 'classoptions': ',dvipdfmx', |
| 'fontpkg': PDFLATEX_DEFAULT_FONTPKG, |
| 'fontsubstitution': '', |
| 'textgreek': '', |
| 'fncychap': '', |
| 'geometry': '\\usepackage[dvipdfm]{geometry}', |
| }, |
| |
| # special settings for latex_engine + language_code |
| ('xelatex', 'fr'): { |
| # use babel instead of polyglossia by default |
| 'polyglossia': '', |
| 'babel': '\\usepackage{babel}', |
| }, |
| ('xelatex', 'zh'): { |
| 'polyglossia': '', |
| 'babel': '\\usepackage{babel}', |
| 'fontenc': '\\usepackage{xeCJK}', |
| # set formatcom=\xeCJKVerbAddon to prevent xeCJK from adding extra spaces in |
| # fancyvrb Verbatim environment. |
| 'fvset': '\\fvset{fontsize=\\small,formatcom=\\xeCJKVerbAddon}', |
| }, |
| ('xelatex', 'el'): { |
| 'fontpkg': XELATEX_GREEK_DEFAULT_FONTPKG, |
| }, |
| } |
| |
| |
| SHORTHANDOFF = r''' |
| \ifdefined\shorthandoff |
| \ifnum\catcode`\=\string=\active\shorthandoff{=}\fi |
| \ifnum\catcode`\"=\active\shorthandoff{"}\fi |
| \fi |
| ''' |