Skip to content

Commit

Permalink
Refactor preamble to allow parts be shared with figures
Browse files Browse the repository at this point in the history
  • Loading branch information
henrikt-ma committed Nov 11, 2020
1 parent c6edb93 commit 9b09beb
Show file tree
Hide file tree
Showing 2 changed files with 192 additions and 185 deletions.
172 changes: 172 additions & 0 deletions mlsshared.sty
@@ -0,0 +1,172 @@
% Package with preamble content to be shared by the main document and its figures.

% Formatting for filenames, URIs, etc.
% For now, the content is wrapped in \mbox to avoid hyphenation to inject
% hyphens. A better solution could be to change the directory separator
% characters to also produce an \allowbreak{} following the directory separator.
\newcommand{\filename}[1]{\mbox{\textsf{#1}}}

\usepackage{listings}
\usepackage{color}
\usepackage[table]{xcolor}

\definecolor{keywordcolor1} {rgb}{0.00, 0.20, 0.47}
\definecolor{keywordcolor3} {rgb}{0.33, 0.24, 0.03}
\definecolor{commentcolor} {rgb}{0.07, 0.46, 0.00}

% It would be nice to have comments set in normal variable-width font without any sort of
% column alignment by the listsings.sty package, just like the comments look in the LaTeXML build.
% Adding the following \commentfullflexible to the 'commentstyle'
% makes words look good, but the words are still aligned in mysterious ways.
%\let\commentfullflexible\lst@column@fullflexible

% See https://github.com/modelica-tools/listings-modelica/blob/master/listings-modelica.cfg
% Note: Changed comment color from green to [rgb]{0,0.4,0} - since the other variant was too distracting
% And added pure,impure,stream as keywords
% Remove cross as red
% Note: have basicstyle=\upshape\small\ttfamily in all languages,
% except the dialect [short]modelica - which is used for inline listings.
% Apart from that change that dialect should be identical to modelica

% The red keyword part is a bit unclear.
% The current logic is that "operators" are marked specially, but not normal functions.
%
% Note that Integer is both a predefined type and a function; we cannot treat them differently.
% Another solution would be to remove this completely.
\lstdefinelanguage{modelica}{% Language for use with the lstlisting environment.
basicstyle=\upshape\smallifpdf\ttfamily, % Font size for displayed code listings.
alsoletter={},
% otherkeywords={-, =, +, [, ], (, ), \{, \}, :, *, !},%
morekeywords=[1]{}, % blue Keywords
morekeywords=[2]{% blue + bold keywords
annotation,assert,block,break,class,connector,constant,constrainedby,discrete,%
each,encapsulated,enumeration,else,elseif,elsewhen,end,exit,expandable,extends,external,final,flow,for,%
function,if,in,inner,initial,input,import,loop,model,nondiscrete,operator,outer,%
output,package,parameter,partial,record,redeclare,replaceable,return,%
size,stream,terminate,then,type,when,while,within,algorithm,equation,%
protected,public,and,false,not,or,true,pure,impure,transition,initialState},%
% Note: initial is in both variants - depending on context, use first variant
morekeywords=[3]{% red keywords - only special functions and classes: 3.7.2 #derivative-and-special-purpose-operators-with-function-syntax
% 3.7.3 #event-related-operators-with-function-syntax (except initial) and 4.8 #predefined-types-and-classes
connect,der,delay,cardinality,homotopy,semiLinear,inStream,actualStream,spatialDistribution,getInstanceName,%
terminal,noEvent,smooth,sample,pre,edge,change,reinit,%
previous,hold,subSample,superSample,shiftSample,backSample,noClock,firstTick,interval,%
Real,Integer,Boolean,String},%
comment=[l]{//}, % comment lines
morecomment=[s]{/*}{*/}, % comment blocs
morestring=[b]{'},
morestring=[b]{"},
}[keywords,comments,strings]

\lstdefinelanguage[short]{modelica}[]{modelica}{% Language for use with the \lstinline command.
basicstyle=\upshape\ttfamily, % Font size for inline code snippets.
}

% Special dialect of Modelica to use when there are URLs appearing outside string literals, to avoid the part
% starting with '//' being treated as comment.
\lstdefinelanguage[nocomment]{modelica}[short]{modelica}{%
commentstyle=\upshape\ttfamily, % Camouflage comments as workaround for not being able to remove rest-of-line comment recognition.
}

% Note: within only a keyword in grammar
\lstdefinelanguage{grammar}{%
basicstyle=\upshape\smallifpdf\ttfamily, % size of fonts used for the code
alsoletter={},
alsodigit={-},
breaklines=true,
breakatwhitespace=true,
morekeywords=[2]{%
letters,annotation,assert,block,break,class,connector,constant,constrainedby,discrete,%
each,encapsulated,else,elseif,elsewhen,end,exit,expandable,extends,external,final,flow,for,%
function,if,in,inner,initial,input,import,loop,model,nondiscrete,operator,outer,%
output,package,parameter,partial,record,redeclare,replaceable,return,%
size,stream,terminate,then,type,when,while,algorithm,equation,%
protected,public,and,false,not,or,true,pure,impure,stream,transition,initialState,%
within},
morekeywords=[1]{|}
}[keywords,comments,strings]

% Duplicate this definition here to avoid issue - and name it "fortran77" to avoid problem in LatexML
\lstdefinelanguage{fortran77}{%
basicstyle=\upshape\smallifpdf\ttfamily, % size of fonts used for the code
morekeywords={%
ASSIGN,BACKSPACE,CALL,CHARACTER,%
CLOSE,COMMON,COMPLEX,CONTINUE,DATA,DIMENSION,DO,DOUBLE,%
ELSE,ELSEIF,END,ENDIF,ENDDO,ENTRY,EQUIVALENCE,EXTERNAL,%
FILE,FORMAT,FUNCTION,GO,TO,GOTO,IF,IMPLICIT,%
INQUIRE,INTEGER,INTRINSIC,LOGICAL,%
OPEN,PARAMETER,PAUSE,PRECISION,PRINT,PROGRAM,READ,REAL,%
RETURN,REWIND,STOP,SUBROUTINE,THEN,%
WRITE,SAVE},
morekeywords=[2]{%
ACCESS,BLANK,BLOCK,DIRECT,EOF,ERR,EXIST,%
FMT,FORM,FORMATTED,IOSTAT,NAMED,NEXTREC,NUMBER,OPENED,%
REC,RECL,SEQUENTIAL,STATUS,TYPE,UNFORMATTED,UNIT},
morekeywords=[3]{%
INT,DBLE,CMPLX,ICHAR,CHAR,AINT,ANINT,% left out real
NINT,ABS,MOD,SIGN,DIM,DPROD,MAX,MIN,AIMAG,CONJG,SQRT,EXP,LOG,%
LOG10,SIN,COS,TAN,ASIN,ACOS,ATAN,ATAN2,SINH,COSH,TANH,LGE,LLE,LLT,%
LEN,INDEX},
morekeywords=[4]{AND,EQ,EQV,FALSE,GE,GT,OR,LE,LT,NE,NEQV,NOT,TRUE},%
sensitive=f, % not Fortran-77 standard, but allowed in Fortran-95 %%
morecomment=[f]*,
morecomment=[f]C,
morecomment=[f]c,
morestring=[d]", % not Fortran-77 standard, but allowed in Fortran-95 %%
morestring=[d]'
}[keywords,comments,strings]

\lstdefinelanguage{C}{%
basicstyle=\upshape\smallifpdf\ttfamily, % size of fonts used for the code
morekeywords={%
auto,break,case,char,const,continue,default,do,double,%
else,enum,extern,float,for,goto,if,int,long,register,return,%
short,signed,sizeof,static,struct,switch,typedef,union,unsigned,%
void,volatile,while},
% henrikt-ma: How about adding some highlighting of 'size_t' as a recognized name?
sensitive,
morecomment=[s]{/*}{*/},
morecomment=[l]//, % nonstandard
morestring=[b]",
morestring=[b]',
moredelim=*[directive]\#,
moredirectives={%
define,elif,else,endif,error,if,ifdef,ifndef,line,%
include,pragma,undef,warning}
}[keywords,comments,strings,directives]

% Note: \lstinline!...! used for inline Modelica using [short]modelica

\lstset{%
backgroundcolor=\color{white}, % choose the background color
mathescape=true,
breaklines=true, % automatic line breaking only at white-space
keepspaces, % don't remove space such as those after closing parenthesis
captionpos=b, % sets the caption-position to bottom
commentstyle=\color{commentcolor}\sffamily, % comment style
keywordstyle=\color{red}, % Unused keyword style in bright red to make it easy to detect and fix.
keywordstyle=[1]\color{keywordcolor1},
keywordstyle=[2]\color{keywordcolor1}\bfseries,
keywordstyle=[3]\color{keywordcolor3},
stringstyle=\color{black}, % string literal style
language=[short]modelica, % Language that will be used by default, in particluar by plain \lstinline.
showstringspaces=false,
frame=lrtb,
belowskip=0pt,
}

% Misc math
\newcommand{\ud}{\mathrm{d}}
\newcommand{\pdfrac}[3][\@nil]{%
\def\tmp{#1}%
\ifx\tmp\@nnil
\frac{\ud#2}{\ud#3}%
\else
\frac{\ud^{#1}#2}{\ud#3^{#1}}%
\fi%
}
\newcommand{\abs}[1]{\left\lvert #1{} \right\rvert}

% Text mode additions
\newcommand{\textgreatereq}{$\geq$}
\newcommand{\textlesseq}{$\leq$}

0 comments on commit 9b09beb

Please sign in to comment.