diff --git a/doc/latex.rst b/doc/latex.rst index dd5fd1679..81f70dc1e 100644 --- a/doc/latex.rst +++ b/doc/latex.rst @@ -817,6 +817,8 @@ Macros multiple paragraphs in header cells of tables. .. versionadded:: 1.6.3 ``\sphinxstylecodecontinued`` and ``\sphinxstylecodecontinues``. + .. versionadded:: 2.4.0 + ``\sphinxkeyboard`` - ``\sphinxtableofcontents``: it is a wrapper (defined differently in :file:`sphinxhowto.cls` and in :file:`sphinxmanual.cls`) of standard ``\tableofcontents``. The macro diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index 3e67b5610..e27b44aa8 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -1836,6 +1836,7 @@ \protected\def\sphinxtitleref#1{\emph{#1}} \protected\def\sphinxmenuselection#1{\emph{#1}} \protected\def\sphinxguilabel#1{\emph{#1}} +\protected\def\sphinxkeyboard#1{\sphinxcode{#1}} \protected\def\sphinxaccelerator#1{\underline{#1}} \protected\def\sphinxcrossref#1{\emph{#1}} \protected\def\sphinxtermref#1{\emph{#1}} diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 55348145f..a370b5144 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -1935,6 +1935,8 @@ class LaTeXTranslator(SphinxTranslator): def visit_literal(self, node: Element) -> None: if self.in_title: self.body.append(r'\sphinxstyleliteralintitle{\sphinxupquote{') + elif 'kbd' in node['classes']: + self.body.append(r'\sphinxkeyboard{\sphinxupquote{') else: self.body.append(r'\sphinxcode{\sphinxupquote{') diff --git a/tests/test_markup.py b/tests/test_markup.py index edf4d7379..b6d99db90 100644 --- a/tests/test_markup.py +++ b/tests/test_markup.py @@ -230,6 +230,13 @@ def get_verifier(verify, verify_re): '

Foo

', r'\sphinxguilabel{Foo}', ), + ( + # kbd role + 'verify', + ':kbd:`space`', + '

space

', + '\\sphinxkeyboard{\\sphinxupquote{space}}', + ), ( # non-interpolation of dashes in option role 'verify_re',