diff options
Diffstat (limited to 'macros/latex/contrib/docutils/docutils.sty')
-rw-r--r-- | macros/latex/contrib/docutils/docutils.sty | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/macros/latex/contrib/docutils/docutils.sty b/macros/latex/contrib/docutils/docutils.sty new file mode 100644 index 0000000000..b2b9ef7ec1 --- /dev/null +++ b/macros/latex/contrib/docutils/docutils.sty @@ -0,0 +1,222 @@ +%% 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 + } |