Skip to content

Commit

Permalink
Merge pull request #6711 from jfbu/latex_greekfix
Browse files Browse the repository at this point in the history
Add latexpdf support for Greek as main language (via xelatex use)
  • Loading branch information
jfbu committed Oct 8, 2019
2 parents 94a0979 + 6a1ea84 commit d000de6
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Bugs fixed
----------

* #6641: LaTeX: Undefined control sequence ``\sphinxmaketitle``
* #6710: LaTeX not well configured for Greek language as main language

Testing
--------
Expand Down
5 changes: 5 additions & 0 deletions doc/latex.rst
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,11 @@ into the generated ``.tex`` files. Its ``'sphinxsetup'`` key is described

.. attention::

If Greek is main language, do not use this key. Since Sphinx 2.2.1,
``xelatex`` will be used automatically as :confval:`latex_engine`.
Formerly, Sphinx did not support producing PDF via LaTeX with Greek as
main language.

Prior to 2.0, Unicode Greek letters were escaped to use LaTeX math
mark-up. This is not the case anymore, and the above must be used
(only in case of ``'pdflatex'`` engine) if the source contains such
Expand Down
12 changes: 11 additions & 1 deletion doc/usage/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1841,7 +1841,17 @@ These options influence LaTeX output.
``'xelatex'`` or ``'lualatex'`` and making sure to use an OpenType font
with wide-enough glyph coverage is often easier than trying to make
``'pdflatex'`` work with the extra Unicode characters. Since Sphinx 2.0
the default is the GNU FreeFont which covers well Latin, Cyrillic and Greek.
the default is the GNU FreeFont which covers well Latin, Cyrillic and
Greek.

.. versionchanged:: 2.1.0

Use ``xelatex`` (and LaTeX package ``xeCJK``) by default for Chinese
documents.

.. versionchanged:: 2.2.1

Use ``xelatex`` by default for Greek documents.

Contrarily to :ref:`MathJaX math rendering in HTML output <math-support>`,
LaTeX requires some extra configuration to support Unicode literals in
Expand Down
2 changes: 2 additions & 0 deletions sphinx/builders/latex/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,8 @@ def default_latex_engine(config: Config) -> str:
return 'platex'
elif (config.language or '').startswith('zh'):
return 'xelatex'
elif config.language == 'el':
return 'xelatex'
else:
return 'pdflatex'

Expand Down
7 changes: 7 additions & 0 deletions sphinx/writers/latex.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@
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 = {
Expand Down Expand Up @@ -226,6 +230,9 @@
('xelatex', 'zh'): {
'fontenc': '\\usepackage{xeCJK}',
},
('xelatex', 'el'): {
'fontpkg': XELATEX_GREEK_DEFAULT_FONTPKG,
},
} # type: Dict[Any, Dict[str, Any]]

EXTRA_RE = re.compile(r'^(.*\S)\s+\(([^()]*)\)\s*$')
Expand Down
11 changes: 11 additions & 0 deletions tests/test_build_latex.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,17 @@ def test_latex_additional_settings_for_language_code(app, status, warning):
assert r'\usepackage{xeCJK}' in result


@pytest.mark.sphinx('latex', testroot='basic', confoverrides={'language': 'el'})
def test_latex_additional_settings_for_greek(app, status, warning):
app.builder.build_all()
result = (app.outdir / 'test.tex').text(encoding='utf8')
print(result)
print(status.getvalue())
print(warning.getvalue())
assert '\\usepackage{polyglossia}\n\\setmainlanguage{greek}' in result
assert '\\newfontfamily\\greekfonttt{FreeMono}' in result


@pytest.mark.sphinx('latex', testroot='latex-title')
def test_latex_title_after_admonitions(app, status, warning):
app.builder.build_all()
Expand Down

0 comments on commit d000de6

Please sign in to comment.