-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathmcode.sty
More file actions
executable file
·220 lines (198 loc) · 7.62 KB
/
Copy pathmcode.sty
File metadata and controls
executable file
·220 lines (198 loc) · 7.62 KB
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
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
%%
%% This is file `mcode.sty'
%%
%% It is supposed to help you easily include MATLAB source code
%% into LaTeX document, but have it nicely highlighted, using
%% the great listings package.
%%
%% For a demo document, please see
%% http://www.knorn.org/misc_files/mcode_demo.zip
%%
%% PLEASE NOTE that this package does nothing but save you from
%% figuring out some configurations in setting up the listings
%% package. ALL the work is done by that package! Thus, refer
%% your questions to the listings package documentation.
%%
%% Usage: You have three ways of including your MATLAB code. As
%% environment, as inline object and directly from an external
%% file.
%%
%% 1) Environment:
%%
%% \begin{lstlisting}
%% YOUR CODE HERE
%% \end{lstlisting}
%%
%%
%% 2) Inline object:
%%
%% Bla bla \mcode{CODEFRAGMENT} bla bla.
%%
%%
%% 3) Include external file (in environment form)
%%
%% \lstinputlisting{YOUR-FILE.m}
%%
%%
%% For your convenience this package has the following options:
%%
%% - bw if you intend to print the document (highlighting done
%% via text formatting (bold, italic) and shades of gray)
%%
%% - numbered if you want line numbers
%%
%% - framed if you want a frame around the source code blocks
%%
%% - final if you have ``gloablly'' set the draft option, the
%% listings package will not output the code at all. to
%% force it to do so anyway, load this package with the
%% final option (passes the ``final'' on to listings).
%%
%% For example, you may use \usepackage[numbered,framed]{mcode}
%% in your document preamble.
%%
%% Note: Inside code blocks you can escape to LaTeX text mode
%% using §...§. For ex. §text and some math: $x^2$§, which is
%% especially useful in comments for putting nicely typeset
%% equations etc. To get the same colour/style as in the rest
%% of the comment use \mcommentfont, i.e. §\mcommentfont $x^2$§
%%
%% A nice feature of the listings package is that you can re-
%% place certain strings by LaTeX strings; this is used for
%% some relation symbols, see below...
%%
%% To change the font used, edit the first line in the "custo-
%% mise below" section. And feel free to edit other things as
%% well. Refer to the documentation of the listings package to
%% see what else you could do. If an extra small font is re-
%% quired, use {\fontfamily{pcr}\fontsize{3}{4.6}\selectfont}
%% in the definition of \lstbasicfont.
%%
%% Author: Florian Knorn | floz@gmx.de | www.florian-knorn.com
%%
%% Version history:
%% 1.8 -- Fixed typo in documentation regarding §...§
%% 1.7 -- Added MATLAB block comment syntax %{ ...... %}
%% 1.6 -- Added some infos, dealing with keyword ``end''
%% 1.5 -- Tweaked check to see wether textcomp is loaded
%% 1.4 -- Fixed misconfig (mathescape now set to false)
%% 1.3 -- Purely cosmetic (tabs replaced by spaces)
%% 1.2 -- Added \lstset{showstringspaces=false}
%% 1.1 -- Added \mcode command and [final] option
%% 1.0 -- Release
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% D O N ' T T O U C H T H I S %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\fileversion{1.7}
\def\filedate{2010/02/01}
\typeout{-- Package: `mcode' \fileversion\space <\filedate> --}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{mcode}[\filedate\space\fileversion]
% for bw-option
\newif\ifbw
\DeclareOption{bw}{\bwtrue}
% numbered option
\newif\ifnumbered
\DeclareOption{numbered}{\numberedtrue}
% final option
\newif\iffinal
\DeclareOption{final}{\finaltrue}
% for framed option
\newif\ifframed
\DeclareOption{framed}{\framedtrue}
\DeclareOption*{% default
\PackageWarning{mcode}{Unknown option `\CurrentOption' !}%
}
\ProcessOptions
\ifbw\typeout{ - settings optimized for printing (bw formating)}
\else\typeout{ - settings optimized for display (colour formating)}\fi
\ifnumbered\typeout{ - line numbering enabled}\else\fi
\ifframed\typeout{ - framed listings}\else\fi
% This command allows you to typeset syntax highlighted Matlab
% code ``inline''. The font size \small seems to look best...
\newcommand{\mcode}[1]{\lstinline[basicstyle=\lstbasicfont\small]|#1|}
% check if color command exists
\ifx\color\undefined%
\RequirePackage{xcolor}%
\fi
% check if listings has been loaded
\ifx\lstset\undefined%
\iffinal
\RequirePackage[final]{listings}
\else
\RequirePackage{listings}
\fi
\fi
% Check if textcomp has been loaded (this package is needed for
% upright quotes '' (instead of typographic ones `´)...
\ifx\textquotesingle\undefined%
\RequirePackage{textcomp}%
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% C U S T O M I S E B E L O W %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% define the wanted font for all highlightings here
\def\lstbasicfont{\fontfamily{pcr}\selectfont\footnotesize}
% now let's define our own version of matlab highlighting
\lstdefinelanguage{matlabfloz}{%
alsoletter={...},%
morekeywords={% % keywords
break,case,catch,continue,elseif,else,end,for,function,global,%
if,otherwise,persistent,return,switch,try,while,...},%
comment=[l]\%,% % comments
morecomment=[l]...,% % comments
morecomment=[s]{\%\{}{\%\}}, % block comments
morestring=[m]',% % strings
}[keywords,comments,strings]%
% define the colours
\ifbw % use font formating and gray 'colors'
\def\mcommentfont{\color[gray]{.75}\itshape} %comments light gray and italic
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\bfseries, % keywords in bold
commentstyle=\mcommentfont, % comments
stringstyle=\color[gray]{0.5} % strings darker gray
}
\else% notbw => use colors : )
\def\mcommentfont{\color[rgb]{.133,.545,.133}} %comments in green
\lstset{language=matlabfloz, % use our version of highlighting
keywordstyle=\color[rgb]{0,0,1}, % keywords in blue
commentstyle=\mcommentfont, % comments
stringstyle=\color[rgb]{.627,.126,.941} % strings in purple
}
\fi%bw
\lstset{%
basicstyle={\lstbasicfont}, % set font
showstringspaces=false, % do not emphasize spaces in strings
tabsize=4, % number of spaces of a TAB
mathescape=false,escapechar=§, % escape to latex with §...§
upquote=true, % upright quotes
aboveskip={1.5\baselineskip}, % a bit of space above listings
columns=fixed, % nice spacing
%
% the following is for replacing some matlab relations like >= or ~=
% by the corresponding LaTeX symbols, which are much easier to read ...
literate=%
{~}{{$\neg$}}1 % \neg
{<=}{{\tiny$\leq$}}1 % \leq
{>=}{{\tiny$\geq$}}1 % \geq
{~=}{{\tiny$\neq$}}1 % \neq
{delta}{{\tiny$\Delta$}}1% \Delta
{iend}{{\fontfamily{pcr}\selectfont end}}3% end when indexing matrix elements
}
\ifnumbered% numbered option
\lstset{%
numbersep=3mm, numbers=left, numberstyle=\tiny, % number style
}
\fi
\ifframed% framed option
\lstset{%
frame=single, % frame
}
\ifnumbered%
\lstset{%
framexleftmargin=6mm, xleftmargin=6mm % tweak margins
}
\fi
\fi
\endinput
%% End of file `mcode.sty'.