summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/metanorma/metanorma.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/metanorma/metanorma.cls')
-rw-r--r--macros/latex/contrib/metanorma/metanorma.cls132
1 files changed, 132 insertions, 0 deletions
diff --git a/macros/latex/contrib/metanorma/metanorma.cls b/macros/latex/contrib/metanorma/metanorma.cls
new file mode 100644
index 0000000000..894f9a860d
--- /dev/null
+++ b/macros/latex/contrib/metanorma/metanorma.cls
@@ -0,0 +1,132 @@
+%
+% tex2mn 0.5.0 - converts Metanorma documents from LaTeX to AsciiDoc
+%
+% Copyright (C) 2019-2020 Ribose Inc. <open.source@ribose.com>
+% This project is available under the terms of the MIT License.
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{metanorma}
+ [2019/07/07 Metanorma]
+
+\LoadClass{article}
+
+\RequirePackage{graphicx}
+\RequirePackage{hyperref}
+% TODO: what's the best baseline AMS setup?
+\RequirePackage{amsmath}
+\RequirePackage{subcaption}
+\RequirePackage{enumitem}
+
+\RequirePackage{verbatim}
+
+\RequirePackage{xparse}
+
+%% RDF %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \RequirePackage{lxRDFa}
+% Let's not introduce another (mostly trivial) dependency, and just embed it:
+\DeclareRobustCommand{\lxRDFa}[2][]{}
+\DeclareRobustCommand{\lxRDF}[2][]{}
+
+\NewDocumentCommand{\mn}{m}
+ {\lxRDF[#1]{property=mn:attributes}}
+
+%% Document attributes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+
+\NewDocumentCommand{\set}{mm}{%
+ \lxRDF{property=#1,content=#2}%
+ \expandafter\def\csname metadata@#1\endcsname{#2}}
+
+\@onlypreamble\set
+
+\NewDocumentCommand{\get}{m}
+ {\csname metadata@#1\endcsname}
+
+\makeatother
+
+\NewDocumentCommand{\att}{om}{#2}
+
+%% General style %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% No indentation on paragraphs.
+\setlength\parindent{0pt}
+
+%% Strikethrough %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% `normalem` avoids changes to the behaviour of emphasis.
+\RequirePackage[normalem]{ulem}
+
+% We decouple the class' API from the package choice.
+\let\textst\sout
+
+%% Blocks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\RequirePackage[framemethod=TikZ]{mdframed}
+
+\mdfdefinestyle{mnbase}{
+ frametitlerule=true,
+ frametitlefont=\sffamily\bfseries\scshape\small,
+ linecolor=gray,
+}
+
+% Admonitions
+
+\mdfdefinestyle{note}{linecolor=blue,frametitle=Note}
+\mdfdefinestyle{tip}{linecolor=green,frametitle=Tip}
+\mdfdefinestyle{important}{linecolor=yellow,frametitle=Important}
+\mdfdefinestyle{caution}{linecolor=red,frametitle=Caution}
+\mdfdefinestyle{warning}{linecolor=orange,frametitle=Warning}
+
+\newmdenv[style=mnbase,style=note]{note}
+\newmdenv[style=mnbase,style=tip]{tip}
+\newmdenv[style=mnbase,style=important]{important}
+\newmdenv[style=mnbase,style=caution]{caution}
+\newmdenv[style=mnbase,style=warning]{warning}
+
+% Requirement, recommendation and permission
+
+\mdfdefinestyle{requirement}{linecolor=gray,frametitle=Requirement}
+\mdfdefinestyle{recommendation}{linecolor=gray,frametitle=Recommendation}
+\mdfdefinestyle{permission}{linecolor=gray,frametitle=Permission}
+
+\newmdenv[style=mnbase,style=requirement]{requirement}
+\newmdenv[style=mnbase,style=recommendation]{recommendation}
+\newmdenv[style=mnbase,style=permission]{permission}
+
+% Specification, measurement target, verification and import
+
+\mdfdefinestyle{specification}{linecolor=lightgray,frametitle=Specification}
+\mdfdefinestyle{measurement-target}{linecolor=lightgray,frametitle=Measurement target}
+\mdfdefinestyle{verification}{linecolor=lightgray,frametitle=Verification}
+\mdfdefinestyle{import}{linecolor=lightgray,frametitle=Import}
+
+\newmdenv[style=mnbase,style=specification]{specification}
+\newmdenv[style=mnbase,style=measurement-target]{measurement-target}
+\newmdenv[style=mnbase,style=verification]{verification}
+\newmdenv[style=mnbase,style=import]{import}
+
+%% Terms and definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NewDocumentCommand{\alt}{m}{{\large #1}\par}
+\NewDocumentCommand{\deprecated}{m}{\textbf{DEPRECATED:} #1\par}
+\NewDocumentCommand{\domain}{m}{\textbf{DOMAIN:} #1\par}
+
+\mdfdefinestyle{example}{linecolor=lightgray,frametitle=Example}
+\mdfdefinestyle{source}{linecolor=lightgray,frametitle=Source}
+
+\newmdenv[style=mnbase,style=example]{example}
+\newmdenv[style=mnbase,style=source]{source}
+
+%% Citation macros %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% TODO: handle localities formatting
+\NewDocumentCommand{\mncite}{omo}{\cite[#1]{#2}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newlist{key}{description}{1}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%