Sphinx: используйте другую директиву для другого формата вывода

Предположим, у вас есть документ reStructuredText и вы хотите экспортировать его в два формата с помощью Sphinx 2.x: HTML и PDF.

Вы хотите поместить немного разное содержимое в эти два формата. Например, текст "Я в формате HTML" отображается в версии HTML, тогда как "Я в формате PDF" появляется в версии PDF в том же месте документа.

Использование директивы replace, как показано ниже, даст вам "Я HTML" независимо от формата экспорта.

.. |foo| replace:: HTML

⋮

I am |foo|

Можно ли использовать другую директиву для другого формата экспорта?


person Culip    schedule 27.02.2020    source источник
comment
Делает ли необработанная директива то, что вы хотите? docutils.sourceforge.io/docs/ref/ первый/   -  person John Palmieri    schedule 27.02.2020
comment
Нет, я хочу использовать тот же текст представления (например, |foo|). Представьте, что у вас есть 1000 |foo| в ваших документах, и вы хотите определить, что это такое, в одном месте, например, в прологе в conf.py.   -  person Culip    schedule 27.02.2020


Ответы (2)


Это немного неуклюже, но это работает для меня:

.. role:: latex(raw)
   :format: latex

.. role:: html(raw)
   :format: html

.. |foo| replace:: :latex:`LaTeX text`:html:`HTML text`
.. |bar| replace:: :latex:`other latex text`:html:`other html text`
person John Palmieri    schedule 27.02.2020
comment
Это действительно сработало? Выходные данные PDF показывают оба: |foo| и |bar| были заменены на LaTeX textHTML text и other latex textother html text соответственно ☹ Я использовал rst2pdf. Я заменил все latex на pdf в примере скрипта, но это не помогло. HTML выглядит нормально. - person Culip; 28.02.2020
comment
Это сработало, когда я создал документ LaTeX, а также когда я создал PDF, используя pdflatex. Я не пробовал rst2pdf. - person John Palmieri; 28.02.2020

Решением может быть определение rst_prolog. (или rst_epilog) динамически на основе некоторых тег (например, это может быть тег builder).

conf.py:

prolog_for_html = """
.. |document_type| replace:: HTML
"""

prolog_for_latex = """
.. |document_type| replace:: latex
"""

if tags.has('html_prolog'):
    rst_prolog = prolog_for_html
elif tags.has('latex_prolog'):
    rst_prolog = prolog_for_latex

document.rst

This is a |document_type| document.

Makefile

html latex:
    sphinx-build -t $@_prolog -b $@ src build/$@
person sinoroc    schedule 28.02.2020