224 lines
5.3 KiB
TeX
224 lines
5.3 KiB
TeX
%% docutils.sty: macros for Docutils LaTeX output.
|
|
%%
|
|
%% Copyright © 2020 Günter Milde
|
|
%% Released under the terms of the `2-Clause BSD license`, in short:
|
|
%%
|
|
%% Copying and distribution of this file, with or without modification,
|
|
%% are permitted in any medium without royalty provided the copyright
|
|
%% notice and this notice are preserved.
|
|
%% This file is offered as-is, without any warranty.
|
|
|
|
% .. include:: README.md
|
|
%
|
|
% Implementation
|
|
% ==============
|
|
%
|
|
% ::
|
|
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesPackage{docutils}
|
|
[2021/05/18 macros for Docutils LaTeX output]
|
|
|
|
% Helpers
|
|
% -------
|
|
%
|
|
% duclass::
|
|
|
|
% class handling for environments (block-level elements)
|
|
% \begin{DUclass}{spam} tries \DUCLASSspam and
|
|
% \end{DUclass}{spam} tries \endDUCLASSspam
|
|
\ifx\DUclass\undefined % poor man's "provideenvironment"
|
|
\newenvironment{DUclass}[1]%
|
|
{% "#1" does not work in end-part of environment.
|
|
\def\DocutilsClassFunctionName{DUCLASS#1}
|
|
\csname \DocutilsClassFunctionName \endcsname}%
|
|
{\csname end\DocutilsClassFunctionName \endcsname}%
|
|
\fi
|
|
|
|
% providelength::
|
|
|
|
% Provide a length variable and set default, if it is new
|
|
\providecommand*{\DUprovidelength}[2]{
|
|
\ifthenelse{\isundefined{#1}}{\newlength{#1}\setlength{#1}{#2}}{}
|
|
}
|
|
|
|
|
|
% Configuration defaults
|
|
% ----------------------
|
|
%
|
|
% See `Docutils LaTeX Writer`_ for details.
|
|
%
|
|
% abstract::
|
|
|
|
\providecommand*{\DUCLASSabstract}{
|
|
\renewcommand{\DUtitle}[1]{\centerline{\textbf{##1}}}
|
|
}
|
|
|
|
% dedication::
|
|
|
|
% special topic for dedications
|
|
\providecommand*{\DUCLASSdedication}{%
|
|
\renewenvironment{quote}{\begin{center}}{\end{center}}%
|
|
}
|
|
|
|
% TODO: add \em to set dedication text in italics?
|
|
%
|
|
% docinfo::
|
|
|
|
% width of docinfo table
|
|
\DUprovidelength{\DUdocinfowidth}{0.9\linewidth}
|
|
|
|
% error::
|
|
|
|
\providecommand*{\DUCLASSerror}{\color{red}}
|
|
|
|
% highlight_rules::
|
|
|
|
% basic code highlight:
|
|
\providecommand*\DUrolecomment[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
|
|
\providecommand*\DUroledeleted[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
|
|
\providecommand*\DUrolekeyword[1]{\textbf{#1}}
|
|
\providecommand*\DUrolestring[1]{\textit{#1}}
|
|
|
|
% Elements
|
|
% --------
|
|
%
|
|
% Definitions for unknown or to-be-configured Docutils elements.
|
|
%
|
|
% admonition::
|
|
|
|
% admonition environment (specially marked topic)
|
|
\ifx\DUadmonition\undefined % poor man's "provideenvironment"
|
|
\newbox{\DUadmonitionbox}
|
|
\newenvironment{DUadmonition}%
|
|
{\begin{center}
|
|
\begin{lrbox}{\DUadmonitionbox}
|
|
\begin{minipage}{0.9\linewidth}
|
|
}%
|
|
{ \end{minipage}
|
|
\end{lrbox}
|
|
\fbox{\usebox{\DUadmonitionbox}}
|
|
\end{center}
|
|
}
|
|
\fi
|
|
|
|
% fieldlist::
|
|
|
|
% field list environment (for separate configuration of `field lists`)
|
|
\ifthenelse{\isundefined{\DUfieldlist}}{
|
|
\newenvironment{DUfieldlist}%
|
|
{\quote\description}
|
|
{\enddescription\endquote}
|
|
}{}
|
|
|
|
% footnotes::
|
|
|
|
% numerical or symbol footnotes with hyperlinks and backlinks
|
|
\providecommand*{\DUfootnotemark}[3]{%
|
|
\raisebox{1em}{\hypertarget{#1}{}}%
|
|
\hyperlink{#2}{\textsuperscript{#3}}%
|
|
}
|
|
\providecommand{\DUfootnotetext}[4]{%
|
|
\begingroup%
|
|
\renewcommand{\thefootnote}{%
|
|
\protect\raisebox{1em}{\protect\hypertarget{#1}{}}%
|
|
\protect\hyperlink{#2}{#3}}%
|
|
\footnotetext{#4}%
|
|
\endgroup%
|
|
}
|
|
|
|
% inline::
|
|
|
|
% custom inline roles: \DUrole{#1}{#2} tries \DUrole#1{#2}
|
|
\providecommand*{\DUrole}[2]{%
|
|
\ifcsname DUrole#1\endcsname%
|
|
\csname DUrole#1\endcsname{#2}%
|
|
\else%
|
|
#2%
|
|
\fi%
|
|
}
|
|
|
|
% legend::
|
|
|
|
% legend environment (in figures and formal tables)
|
|
\ifthenelse{\isundefined{\DUlegend}}{
|
|
\newenvironment{DUlegend}{\small}{}
|
|
}{}
|
|
|
|
% lineblock::
|
|
|
|
% line block environment
|
|
\DUprovidelength{\DUlineblockindent}{2.5em}
|
|
\ifthenelse{\isundefined{\DUlineblock}}{
|
|
\newenvironment{DUlineblock}[1]{%
|
|
\list{}{\setlength{\partopsep}{\parskip}
|
|
\addtolength{\partopsep}{\baselineskip}
|
|
\setlength{\topsep}{0pt}
|
|
\setlength{\itemsep}{0.15\baselineskip}
|
|
\setlength{\parsep}{0pt}
|
|
\setlength{\leftmargin}{#1}}
|
|
\raggedright
|
|
}
|
|
{\endlist}
|
|
}{}
|
|
|
|
% optionlist::
|
|
|
|
% list of command line options
|
|
\providecommand*{\DUoptionlistlabel}[1]{\bfseries #1 \hfill}
|
|
\DUprovidelength{\DUoptionlistindent}{3cm}
|
|
\ifthenelse{\isundefined{\DUoptionlist}}{
|
|
\newenvironment{DUoptionlist}{%
|
|
\list{}{\setlength{\labelwidth}{\DUoptionlistindent}
|
|
\setlength{\rightmargin}{1cm}
|
|
\setlength{\leftmargin}{\rightmargin}
|
|
\addtolength{\leftmargin}{\labelwidth}
|
|
\addtolength{\leftmargin}{\labelsep}
|
|
\renewcommand{\makelabel}{\DUoptionlistlabel}}
|
|
}
|
|
{\endlist}
|
|
}{}
|
|
|
|
% rubric::
|
|
|
|
% informal heading
|
|
\providecommand*{\DUrubric}[1]{\subsubsection*{\emph{#1}}}
|
|
|
|
% sidebar::
|
|
|
|
% text outside the main text flow
|
|
\providecommand{\DUsidebar}[1]{%
|
|
\begin{center}
|
|
\colorbox[gray]{0.80}{\parbox{0.9\linewidth}{#1}}
|
|
\end{center}
|
|
}
|
|
|
|
% title::
|
|
|
|
% title for topics, admonitions, unsupported section levels, and sidebar
|
|
\providecommand*{\DUtitle}[1]{%
|
|
\smallskip\noindent\textbf{#1}\smallskip}
|
|
|
|
% subtitle::
|
|
|
|
% subtitle (for sidebar)
|
|
\providecommand*{\DUsubtitle}[1]{\par\emph{#1}\smallskip}
|
|
|
|
% documentsubtitle::
|
|
|
|
% subtitle (in document title)
|
|
\providecommand*{\DUdocumentsubtitle}[1]{{\large #1}}
|
|
|
|
% titlereference::
|
|
|
|
% titlereference standard role
|
|
\providecommand*{\DUroletitlereference}[1]{\textsl{#1}}
|
|
|
|
% transition::
|
|
|
|
% transition (break / fancybreak / anonymous section)
|
|
\providecommand*{\DUtransition}{%
|
|
\hspace*{\fill}\hrulefill\hspace*{\fill}
|
|
\vskip 0.5\baselineskip
|
|
}
|