%% 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 % % Implementation % ============== % % :: \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{docutils} [2020/08/28 v0.17 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]{\subsubsection*{#1}} % 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 }