summaryrefslogtreecommitdiffstats
path: root/sphinx/builders/latex/constants.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/builders/latex/constants.py')
-rw-r--r--sphinx/builders/latex/constants.py210
1 files changed, 210 insertions, 0 deletions
diff --git a/sphinx/builders/latex/constants.py b/sphinx/builders/latex/constants.py
new file mode 100644
index 0000000..ce646d0
--- /dev/null
+++ b/sphinx/builders/latex/constants.py
@@ -0,0 +1,210 @@
+"""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
+'''