-
Notifications
You must be signed in to change notification settings - Fork 41
/
mlsshared.sty
191 lines (176 loc) · 8.46 KB
/
mlsshared.sty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
% 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 morekeywords=[3] 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,%
expandable,extends,external,final,flow,for,%
function,if,in,inner,initial,input,import,loop,model,%
nondiscrete,% Not a keyword anymore, right?
operator,outer,%
output,package,parameter,partial,record,redeclare,replaceable,return,%
size,% Not a keyword, right?
stream,terminate,then,type,when,while,within,algorithm,equation,%
protected,public,and,false,not,or,true,pure,impure,%
transition,% Not a keyword
initialState% Not a keyword. What about all the other operators in statemachines.tex?
},%
% 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,% This is a keyword!
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},%
sensitive=true, % just in case
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,expandable,extends,external,final,flow,for,%
function,if,in,inner,initial,input,import,loop,model,%
nondiscrete,% Not a keyword anymore, right?
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
\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=true,
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=true,
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{\udfrac}[3][\@nil]{%
\def\tmp{#1}%
\ifx\tmp\@nnil
\frac{\ud#2}{\ud#3}%
\else
\frac{\ud^{#1}#2}{\ud#3^{#1}}%
\fi%
}
\newcommand{\pdfrac}[3][\@nil]{%
\def\tmp{#1}%
\ifx\tmp\@nnil
\frac{\partial#2}{\partial#3}%
\else
\frac{\partial^{#1}#2}{\partial#3^{#1}}%
\fi%
}
\newcommand{\abs}[1]{\left\lvert #1{} \right\rvert}
% Text mode additions
\newcommand{\textgreatereq}{$\geq$}
\newcommand{\textlesseq}{$\leq$}