我可以使用 Sphinx 指令生成笔记.. notes::
。但是,html 文件中的注释有背景颜色,而生成的 PDF 中的注释没有。
如何为 Sphinx 生成的 PDF 文件添加颜色?
我可以使用 Sphinx 指令生成笔记.. notes::
。但是,html 文件中的注释有背景颜色,而生成的 PDF 中的注释没有。
如何为 Sphinx 生成的 PDF 文件添加颜色?
您可以在您的文件中添加类似这样的内容(有关 LaTeX 输出的选项,conf.py
请参阅文档):
latex_custom = r'''
\definecolor{Admonition}{RGB}{221,233,239}
\makeatletter
\newenvironment{admonitionbox}{
\begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}
}{
\end{minipage}\end{lrbox}
\colorbox{Admonition}{\usebox{\@tempboxa}}
}
\renewenvironment{notice}[2]{
\begin{admonitionbox}
}{
\end{admonitionbox}
}
\makeatother
'''
latex_elements = {'preamble': latex_custom}
这是一个基本示例,它将更改所有警告框(注意、警告、提示等)的背景颜色。
我的解决方案受到尼古拉斯回答的启发。它建立在原始 sphinx 代码之上./_build/latex/sphinx.sty
。与 Nicolas 的解决方案相比,这个方案保留了原始的 Sphinx 布局(间距、框架等)并为其添加了背景颜色。此外,它以不同的方式处理lightbox
(注释、提示、提示、重要)和heavybox
(警告、警告、注意、危险、错误)警告框样式。
在您的文件中添加以下代码conf.py
(最终输出应如下所示):
latex_custom = r'''
\definecolor{AdmonitionHeavyColor}{RGB}{255,204,204}
\definecolor{AdmonitionLightColor}{RGB}{238,238,238}
\makeatletter
\renewcommand{\py@heavybox}{
\setlength{\fboxrule}{1pt}
\setlength{\fboxsep}{6pt}
\setlength{\py@noticelength}{\linewidth}
\addtolength{\py@noticelength}{-4\fboxsep}
\addtolength{\py@noticelength}{-2\fboxrule}
%\setlength{\shadowsize}{3pt}
\Sbox
\minipage{\py@noticelength}
}
\renewcommand{\py@endheavybox}{
\endminipage
\endSbox
\savebox{\@tempboxa}{\fbox{\TheSbox}}
\colorbox{AdmonitionHeavyColor}{\usebox{\@tempboxa}}
}
\renewcommand{\py@lightbox}{
{%
\setlength\parskip{0pt}\par
\noindent\rule[0ex]{\linewidth}{0.5pt}%
%\par\noindent\vspace{-0.2ex}%
}
\setlength{\py@noticelength}{\linewidth}
\setlength{\fboxrule}{0pt}
\setlength{\fboxsep}{2pt}
%\setlength{\py@noticelength}{\linewidth}
\addtolength{\py@noticelength}{-4\fboxsep}
\addtolength{\py@noticelength}{-2\fboxrule}
\Sbox
\minipage{\py@noticelength}
}
\renewcommand{\py@endlightbox}{
\endminipage
\endSbox
\savebox{\@tempboxa}{\fbox{\TheSbox}}
\colorbox{AdmonitionLightColor}{\usebox{\@tempboxa}}
{%
\setlength{\parskip}{0pt}%
\par\noindent\rule[0.5ex]{\linewidth}{0.5pt}%
\par\vspace{-0.5ex}%
}
}
\makeatother
'''
latex_elements = {'preamble': latex_custom}
在较新的版本中,您可以使用in your的sphinx_setup
键来相当容易地实现一些警告,例如:latex_elements
conf.py
latex_elements = {
'sphinxsetup': 'warningBgColor={RGB}{255,204,204}'
}
将警告背景颜色更改为红色。查看文档以获取更多信息。
在撰写本文时noteBgColor
,这似乎不是一个选择,因此这对 OP 中的内容没有特别帮助,但可以帮助其他警告。
使用 Latex if then else 为不同的警告创建不同颜色的框。将此添加到conf.py
latex_custom = r'''
\makeatletter
\usepackage{ifthen}
\usepackage{tcolorbox}
\tcbuselibrary{skins}
\renewenvironment{sphinxadmonition}[2]
{
%Green colored box for Conditions
\ifthenelse{\equal{#2}{Conditions}}{
\medskip
\begin{tcolorbox}[before={}, enhanced, colback=green!10,
colframe=green!65!black,fonttitle=\bfseries,
title=\sphinxstrong{#2}, arc=0mm, drop fuzzy shadow=blue!50!black!50!white]}{
%Blue colored box for Notes
\ifthenelse{\equal{#2}{Note:}}{
\medskip
\begin{tcolorbox}[before={}, enhanced, colback=blue!5!white,
colframe=blue!75!black,fonttitle=\bfseries,
title=\sphinxstrong{#2}, arc=0mm, drop fuzzy shadow=blue!50!black!50!white]}{
%Orange colored box for Warnings
\ifthenelse{\equal{#2}{Warning:}}{
\medskip
\begin{tcolorbox}[before={}, enhanced, colback=orange!5!white,
colframe=orange!75!black,fonttitle=\bfseries,
title=\sphinxstrong{#2}, arc=0mm, drop fuzzy shadow=blue!50!black!50!white]}{
%Red colored box for everthing else
\medskip
\begin{tcolorbox}[before={}, enhanced, colback=red!5!white,
colframe=red!75!black, fonttitle=\bfseries,
title=\sphinxstrong{#2}, arc=0mm, drop fuzzy shadow=blue!50!black!50!white]}
}
}
}
{
\end{tcolorbox}\par\bigskip
}
\makeatother
'''
latex_elements['preamble'] += latex_custom