blob: d31e14bed0b718e8e1c05edaf503328bb612f637 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: TeX
Bram Moolenaar97d62492012-11-15 21:28:22 +01003" Maintainer: Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
Bram Moolenaarb4ff5182015-11-10 21:15:48 +01004" Last Change: Oct 20, 2015
5" Version: 90
Bram Moolenaarac7bd632013-03-19 11:35:58 +01006" URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
Bram Moolenaar071d4272004-06-13 20:20:40 +00007"
8" Notes: {{{1
9"
10" 1. If you have a \begin{verbatim} that appears to overrun its boundaries,
11" use %stopzone.
12"
13" 2. Run-on equations ($..$ and $$..$$, particularly) can also be stopped
14" by suitable use of %stopzone.
15"
16" 3. If you have a slow computer, you may wish to modify
17"
18" syn sync maxlines=200
19" syn sync minlines=50
20"
21" to values that are more to your liking.
22"
23" 4. There is no match-syncing for $...$ and $$...$$; hence large
24" equation blocks constructed that way may exhibit syncing problems.
25" (there's no difference between begin/end patterns)
26"
27" 5. If you have the variable "g:tex_no_error" defined then none of the
28" lexical error-checking will be done.
29"
30" ie. let g:tex_no_error=1
Bram Moolenaara6878372014-03-22 21:02:50 +010031"
32" 6. Please see :help latex-syntax for information on
33" syntax folding :help tex-folding
34" spell checking :help tex-nospell
35" commands and mathzones :help tex-runon
36" new command highlighting :help tex-morecommands
37" error highlighting :help tex-error
38" new math groups :help tex-math
39" new styles :help tex-style
40" using conceal mode :help tex-conceal
Bram Moolenaar071d4272004-06-13 20:20:40 +000041
42" Version Clears: {{{1
43" For version 5.x: Clear all syntax items
44" For version 6.x: Quit when a syntax file was already loaded
45if version < 600
46 syntax clear
47elseif exists("b:current_syntax")
48 finish
49endif
Bram Moolenaar15146672011-10-20 22:22:38 +020050let s:keepcpo= &cpo
51set cpo&vim
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020052scriptencoding utf-8
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
54" Define the default highlighting. {{{1
55" For version 5.7 and earlier: only when not done already
56" For version 5.8 and later: only when an item doesn't have highlighting yet
57if version >= 508 || !exists("did_tex_syntax_inits")
58 let did_tex_syntax_inits = 1
59 if version < 508
60 command -nargs=+ HiLink hi link <args>
61 else
62 command -nargs=+ HiLink hi def link <args>
63 endif
64endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020065
66" by default, enable all region-based highlighting
67let s:tex_fast= "bcmMprsSvV"
68if exists("g:tex_fast")
69 if type(g:tex_fast) != 1
70 " g:tex_fast exists and is not a string, so
71 " turn off all optional region-based highighting
72 let s:tex_fast= ""
73 else
74 let s:tex_fast= g:tex_fast
75 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +000076endif
77
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020078" let user determine which classes of concealment will be supported
Bram Moolenaar7fc0c062010-08-10 21:43:35 +020079" a=accents/ligatures d=delimiters m=math symbols g=Greek s=superscripts/subscripts
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020080if !exists("g:tex_conceal")
Bram Moolenaarbc488a72013-07-05 21:01:22 +020081 let s:tex_conceal= 'abdmgsS'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020082else
83 let s:tex_conceal= g:tex_conceal
84endif
Bram Moolenaar6e932462014-09-09 18:48:09 +020085if !exists("g:tex_superscripts")
86 let g:tex_superscripts= "[0-9a-zA-W.,:;+-<>/()=]"
87endif
88if !exists("g:tex_subscripts")
89 let g:tex_subscripts= "[0-9aehijklmnoprstuvx,+-/().]"
90endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +020091
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +000092" Determine whether or not to use "*.sty" mode {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +000093" The user may override the normal determination by setting
94" g:tex_stylish to 1 (for "*.sty" mode)
95" or to 0 else (normal "*.tex" mode)
96" or on a buffer-by-buffer basis with b:tex_stylish
Bram Moolenaar81af9252010-12-10 20:35:50 +010097let s:extfname=expand("%:e")
Bram Moolenaar071d4272004-06-13 20:20:40 +000098if exists("g:tex_stylish")
99 let b:tex_stylish= g:tex_stylish
100elseif !exists("b:tex_stylish")
Bram Moolenaar81af9252010-12-10 20:35:50 +0100101 if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000102 let b:tex_stylish= 1
103 else
104 let b:tex_stylish= 0
105 endif
106endif
107
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000108" handle folding {{{1
109if !exists("g:tex_fold_enabled")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100110 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000111elseif g:tex_fold_enabled && !has("folding")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100112 let s:tex_fold_enabled= 0
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000113 echomsg "Ignoring g:tex_fold_enabled=".g:tex_fold_enabled."; need to re-compile vim for +fold support"
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100114else
115 let s:tex_fold_enabled= 1
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000116endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100117if s:tex_fold_enabled && &fdm == "manual"
Bram Moolenaar00a927d2010-05-14 23:24:24 +0200118 setl fdm=syntax
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000119endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100120if s:tex_fold_enabled && has("folding")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100121 com! -nargs=* TexFold <args> fold
122else
123 com! -nargs=* TexFold <args>
124endif
Bram Moolenaarf1f8bc52005-03-07 23:20:08 +0000125
Bram Moolenaaradc21822011-04-01 18:03:16 +0200126" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127" but _ is the only one that causes problems.
Bram Moolenaaradc21822011-04-01 18:03:16 +0200128" One may override this iskeyword setting by providing
129" g:tex_isk
130if exists("g:tex_isk")
131 exe "setlocal isk=".g:tex_isk
Bram Moolenaar071d4272004-06-13 20:20:40 +0000132else
Bram Moolenaaradc21822011-04-01 18:03:16 +0200133 setlocal isk=48-57,a-z,A-Z,192-255
134endif
135if b:tex_stylish
136 setlocal isk+=@-@
Bram Moolenaar071d4272004-06-13 20:20:40 +0000137endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100138if exists("g:tex_no_error") && g:tex_no_error
139 let s:tex_no_error= 1
140else
141 let s:tex_no_error= 0
142endif
143if exists("g:tex_comment_nospell") && g:tex_comment_nospell
144 let s:tex_comment_nospell= 1
145else
146 let s:tex_comment_nospell= 0
147endif
148if exists("g:tex_nospell") && g:tex_nospell
149 let s:tex_nospell = 1
150else
151 let s:tex_nospell = 0
Bram Moolenaard960d762011-09-21 19:22:10 +0200152endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000153
154" Clusters: {{{1
155" --------
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100156syn cluster texCmdGroup contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100157if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100158 syn cluster texCmdGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100160syn cluster texEnvGroup contains=texMatcher,texMathDelim,texSpecialChar,texStatement
161syn cluster texFoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell
162syn cluster texBoldGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
163syn cluster texItalGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell
164if !s:tex_nospell
165 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
166 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
Bram Moolenaard960d762011-09-21 19:22:10 +0200167else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100168 syn cluster texMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
169 syn cluster texStyleGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
Bram Moolenaard960d762011-09-21 19:22:10 +0200170endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100171syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100172syn cluster texRefGroup contains=texMatcher,texComment,texDelimiter
Bram Moolenaare2719092015-01-10 15:09:25 +0100173if !exists("g:tex_no_math")
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100174 syn cluster texPreambleMatchGroup contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTitle,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texMathZoneZ
175 syn cluster texMathZones contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
176 syn cluster texMatchGroup add=@texMathZones
177 syn cluster texMathDelimGroup contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
178 syn cluster texMathMatchGroup contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
179 syn cluster texMathZoneGroup contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100180 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100181 syn cluster texMathMatchGroup add=texMathError
182 syn cluster texMathZoneGroup add=texMathError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100184 syn cluster texMathZoneGroup add=@NoSpell
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +0000185 " following used in the \part \chapter \section \subsection \subsubsection
186 " \paragraph \subparagraph \author \title highlighting
187 syn cluster texDocGroup contains=texPartZone,@texPartGroup
188 syn cluster texPartGroup contains=texChapterZone,texSectionZone,texParaZone
189 syn cluster texChapterGroup contains=texSectionZone,texParaZone
190 syn cluster texSectionGroup contains=texSubSectionZone,texParaZone
191 syn cluster texSubSectionGroup contains=texSubSubSectionZone,texParaZone
192 syn cluster texSubSubSectionGroup contains=texParaZone
193 syn cluster texParaGroup contains=texSubParaZone
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200194 if has("conceal") && &enc == 'utf-8'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100195 syn cluster texMathZoneGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
196 syn cluster texMathMatchGroup add=texGreek,texSuperscript,texSubscript,texMathSymbol
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200197 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198endif
199
200" Try to flag {} and () mismatches: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200201if s:tex_fast =~ 'm'
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100202 if !s:tex_no_error
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100203 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup,texError
204 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup,texError,@NoSpell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100205 else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100206 syn region texMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" transparent contains=@texMatchGroup
207 syn region texMatcher matchgroup=Delimiter start="\[" end="]" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100208 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100209 if !s:tex_nospell
210 syn region texParen start="(" end=")" transparent contains=@texMatchGroup,@Spell
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100211 else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100212 syn region texParen start="(" end=")" transparent contains=@texMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100213 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100215if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000216 syn match texError "[}\])]"
217endif
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200218if s:tex_fast =~ 'M'
Bram Moolenaare2719092015-01-10 15:09:25 +0100219 if !exists("g:tex_no_math")
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100220 if !s:tex_no_error
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100221 syn match texMathError "}" contained
222 endif
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100223 syn region texMathMatcher matchgroup=Delimiter start="{" skip="\%(\\\\\)*\\}" end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100224 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225endif
226
227" TeX/LaTeX keywords: {{{1
228" Instead of trying to be All Knowing, I just match \..alphameric..
229" Note that *.tex files may not have "@" in their \commands
230if exists("g:tex_tex") || b:tex_stylish
231 syn match texStatement "\\[a-zA-Z@]\+"
232else
233 syn match texStatement "\\\a\+"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100234 if !s:tex_no_error
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 syn match texError "\\\a*@[a-zA-Z@]*"
236 endif
237endif
238
239" TeX/LaTeX delimiters: {{{1
240syn match texDelimiter "&"
241syn match texDelimiter "\\\\"
242
243" Tex/Latex Options: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200244syn match texOption "[^\\]\zs#\d\+\|^#\d\+"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000245
246" texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
247if b:tex_stylish
248 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
249 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
250else
251 syn match texAccent "\\[bcdvuH]\A"me=e-1
252 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)\A"me=e-1
253endif
254syn match texAccent "\\[bcdvuH]$"
255syn match texAccent +\\[=^.\~"`']+
256syn match texAccent +\\['=t'.c^ud"vb~Hr]{\a}+
257syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
258
259" \begin{}/\end{} section markers: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200260syn match texBeginEnd "\\begin\>\|\\end\>" nextgroup=texBeginEndName
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200261if s:tex_fast =~ 'm'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100262 syn region texBeginEndName matchgroup=Delimiter start="{" end="}" contained nextgroup=texBeginEndModifier contains=texComment
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100263 syn region texBeginEndModifier matchgroup=Delimiter start="\[" end="]" contained contains=texComment,@NoSpell
264endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000265
266" \documentclass, \documentstyle, \usepackage: {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200267syn match texDocType "\\documentclass\>\|\\documentstyle\>\|\\usepackage\>" nextgroup=texBeginEndName,texDocTypeArgs
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200268if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100269 syn region texDocTypeArgs matchgroup=Delimiter start="\[" end="]" contained nextgroup=texBeginEndName contains=texComment,@NoSpell
270endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000271
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000272" Preamble syntax-based folding support: {{{1
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100273if s:tex_fold_enabled && has("folding")
Bram Moolenaard38b0552012-04-25 19:07:41 +0200274 syn region texPreamble transparent fold start='\zs\\documentclass\>' end='\ze\\begin{document}' contains=texStyle,@texPreambleMatchGroup
Bram Moolenaara9a568c2006-03-14 23:04:27 +0000275endif
276
Bram Moolenaar071d4272004-06-13 20:20:40 +0000277" TeX input: {{{1
278syn match texInput "\\input\s\+[a-zA-Z/.0-9_^]\+"hs=s+7 contains=texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +0100279syn match texInputFile "\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280syn match texInputFile "\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}" contains=texStatement,texInputCurlies,texInputFileOpt
281syn match texInputCurlies "[{}]" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200282if s:tex_fast =~ 'm'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100283 syn region texInputFileOpt matchgroup=Delimiter start="\[" end="\]" contained contains=texComment
284endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000285
286" Type Styles (LaTeX 2.09): {{{1
287syn match texTypeStyle "\\rm\>"
288syn match texTypeStyle "\\em\>"
289syn match texTypeStyle "\\bf\>"
290syn match texTypeStyle "\\it\>"
291syn match texTypeStyle "\\sl\>"
292syn match texTypeStyle "\\sf\>"
293syn match texTypeStyle "\\sc\>"
294syn match texTypeStyle "\\tt\>"
295
296" Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
Bram Moolenaard38b0552012-04-25 19:07:41 +0200297if s:tex_conceal !~ 'b'
298 syn match texTypeStyle "\\textbf\>"
299 syn match texTypeStyle "\\textit\>"
300endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301syn match texTypeStyle "\\textmd\>"
302syn match texTypeStyle "\\textrm\>"
303syn match texTypeStyle "\\textsc\>"
304syn match texTypeStyle "\\textsf\>"
305syn match texTypeStyle "\\textsl\>"
306syn match texTypeStyle "\\texttt\>"
307syn match texTypeStyle "\\textup\>"
308syn match texTypeStyle "\\emph\>"
309
310syn match texTypeStyle "\\mathbb\>"
311syn match texTypeStyle "\\mathbf\>"
312syn match texTypeStyle "\\mathcal\>"
313syn match texTypeStyle "\\mathfrak\>"
314syn match texTypeStyle "\\mathit\>"
315syn match texTypeStyle "\\mathnormal\>"
316syn match texTypeStyle "\\mathrm\>"
317syn match texTypeStyle "\\mathsf\>"
318syn match texTypeStyle "\\mathtt\>"
319
320syn match texTypeStyle "\\rmfamily\>"
321syn match texTypeStyle "\\sffamily\>"
322syn match texTypeStyle "\\ttfamily\>"
323
324syn match texTypeStyle "\\itshape\>"
325syn match texTypeStyle "\\scshape\>"
326syn match texTypeStyle "\\slshape\>"
327syn match texTypeStyle "\\upshape\>"
328
329syn match texTypeStyle "\\bfseries\>"
330syn match texTypeStyle "\\mdseries\>"
331
332" Some type sizes: {{{1
333syn match texTypeSize "\\tiny\>"
334syn match texTypeSize "\\scriptsize\>"
335syn match texTypeSize "\\footnotesize\>"
336syn match texTypeSize "\\small\>"
337syn match texTypeSize "\\normalsize\>"
338syn match texTypeSize "\\large\>"
339syn match texTypeSize "\\Large\>"
340syn match texTypeSize "\\LARGE\>"
341syn match texTypeSize "\\huge\>"
342syn match texTypeSize "\\Huge\>"
343
344" Spacecodes (TeX'isms): {{{1
345" \mathcode`\^^@="2201 \delcode`\(="028300 \sfcode`\)=0 \uccode`X=`X \lccode`x=`x
346syn match texSpaceCode "\\\(math\|cat\|del\|lc\|sf\|uc\)code`"me=e-1 nextgroup=texSpaceCodeChar
347syn match texSpaceCodeChar "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)" contained
348
349" Sections, subsections, etc: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200350if s:tex_fast =~ 'p'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100351 if !s:tex_nospell
352 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup,@Spell
353 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup,@Spell
354 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup,@Spell
355 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup,@Spell
356 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup,@Spell
357 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
358 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup,@Spell
359 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@Spell
360 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup,@Spell
361 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup,@Spell
362 else
363 TexFold syn region texDocZone matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}' contains=@texFoldGroup,@texDocGroup
364 TexFold syn region texPartZone matchgroup=texSection start='\\part\>' end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texPartGroup
365 TexFold syn region texChapterZone matchgroup=texSection start='\\chapter\>' end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texChapterGroup
366 TexFold syn region texSectionZone matchgroup=texSection start='\\section\>' end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSectionGroup
367 TexFold syn region texSubSectionZone matchgroup=texSection start='\\subsection\>' end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSectionGroup
368 TexFold syn region texSubSubSectionZone matchgroup=texSection start='\\subsubsection\>' end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texSubSubSectionGroup
369 TexFold syn region texParaZone matchgroup=texSection start='\\paragraph\>' end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup,@texParaGroup
370 TexFold syn region texSubParaZone matchgroup=texSection start='\\subparagraph\>' end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)' contains=@texFoldGroup
371 TexFold syn region texTitle matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}' contains=@texFoldGroup
372 TexFold syn region texAbstract matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}' contains=@texFoldGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100373 endif
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000374endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000375
Bram Moolenaard38b0552012-04-25 19:07:41 +0200376" particular support for bold and italic {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200377if s:tex_fast =~ 'b'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100378 if s:tex_conceal =~ 'b'
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200379 if !exists("g:tex_nospell") || !g:tex_nospell
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200380 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
381 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
382 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup,@Spell
383 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup,@Spell
384 else
385 syn region texBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
386 syn region texBoldItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
387 syn region texItalStyle matchgroup=texTypeStyle start="\\textit\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texItalGroup
388 syn region texItalBoldStyle matchgroup=texTypeStyle start="\\textbf\s*{" matchgroup=texTypeStyle end="}" concealends contains=@texBoldGroup
Bram Moolenaar83d1b192015-04-13 14:22:40 +0200389 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100390 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +0200391endif
392
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393" Bad Math (mismatched): {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100394if !exists("g:tex_no_math") && !s:tex_no_error
395 syn match texBadMath "\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000396 syn match texBadMath "\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
397 syn match texBadMath "\\[\])]"
398endif
399
400" Math Zones: {{{1
Bram Moolenaare2719092015-01-10 15:09:25 +0100401if !exists("g:tex_no_math")
Bram Moolenaar488c6512005-08-11 20:09:58 +0000402 " TexNewMathZone: function creates a mathzone with the given suffix and mathzone name. {{{2
Bram Moolenaar071d4272004-06-13 20:20:40 +0000403 " Starred forms are created if starform is true. Starred
404 " forms have syntax group and synchronization groups with a
405 " "S" appended. Handles: cluster, syntax, sync, and HiLink.
406 fun! TexNewMathZone(sfx,mathzone,starform)
407 let grpname = "texMathZone".a:sfx
408 let syncname = "texSyncMathZone".a:sfx
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100409 if s:tex_fold_enabled
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000410 let foldcmd= " fold"
411 else
412 let foldcmd= ""
413 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000414 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200415 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100416 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
417 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
418 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
419 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100420 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 if a:starform
422 let grpname = "texMathZone".a:sfx.'S'
423 let syncname = "texSyncMathZone".a:sfx.'S'
424 exe "syn cluster texMathZones add=".grpname
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200425 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100426 exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
427 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
428 exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
429 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100430 exe 'hi def link '.grpname.' texMath'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000431 endif
432 endfun
433
434 " Standard Math Zones: {{{2
435 call TexNewMathZone("A","align",1)
436 call TexNewMathZone("B","alignat",1)
437 call TexNewMathZone("C","displaymath",1)
438 call TexNewMathZone("D","eqnarray",1)
439 call TexNewMathZone("E","equation",1)
440 call TexNewMathZone("F","flalign",1)
441 call TexNewMathZone("G","gather",1)
442 call TexNewMathZone("H","math",1)
443 call TexNewMathZone("I","multline",1)
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100444 call TexNewMathZone("J","subequations",0)
445 call TexNewMathZone("K","xalignat",1)
446 call TexNewMathZone("L","xxalignat",0)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000447
448 " Inline Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200449 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100450 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200451 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
452 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend concealends contains=@texMathZoneGroup
453 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" concealends contains=@texMathZoneGroup
454 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend concealends contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100455 else
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200456 syn region texMathZoneV matchgroup=Delimiter start="\\(" matchgroup=Delimiter end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup
457 syn region texMathZoneW matchgroup=Delimiter start="\\\[" matchgroup=Delimiter end="\\]\|%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100458 syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\%(\\\\\)*\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200459 syn region texMathZoneY matchgroup=Delimiter start="\$\$" matchgroup=Delimiter end="\$\$" end="%stopzone\>" keepend contains=@texMathZoneGroup
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100460 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +0200461 syn region texMathZoneZ matchgroup=texStatement start="\\ensuremath\s*{" matchgroup=texStatement end="}" end="%stopzone\>" contains=@texMathZoneGroup
Bram Moolenaare0021c72010-07-28 17:25:21 +0200462 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000463
464 syn match texMathOper "[_^=]" contained
465
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200466 " Text Inside Math Zones: {{{2
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200467 if s:tex_fast =~ 'M'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100468 if !exists("g:tex_nospell") || !g:tex_nospell
469 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup,@Spell
470 else
471 syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{' end='}' contains=@texFoldGroup
472 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200473 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200474
Bram Moolenaar071d4272004-06-13 20:20:40 +0000475 " \left..something.. and \right..something.. support: {{{2
476 syn match texMathDelimBad contained "\S"
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200477 if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
478 syn match texMathDelim contained "\\left\\{\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
479 syn match texMathDelim contained "\\right\\}\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
Bram Moolenaaradc21822011-04-01 18:03:16 +0200480 let s:texMathDelimList=[
481 \ ['<' , '<'] ,
482 \ ['>' , '>'] ,
483 \ ['(' , '('] ,
484 \ [')' , ')'] ,
485 \ ['\[' , '['] ,
486 \ [']' , ']'] ,
487 \ ['\\{' , '{'] ,
488 \ ['\\}' , '}'] ,
489 \ ['|' , '|'] ,
490 \ ['\\|' , '‖'] ,
491 \ ['\\backslash' , '\'] ,
492 \ ['\\downarrow' , '↓'] ,
493 \ ['\\Downarrow' , '⇓'] ,
494 \ ['\\langle' , '<'] ,
495 \ ['\\lbrace' , '['] ,
496 \ ['\\lceil' , '⌈'] ,
497 \ ['\\lfloor' , '⌊'] ,
498 \ ['\\lgroup' , '⌊'] ,
499 \ ['\\lmoustache' , '⎛'] ,
500 \ ['\\rangle' , '>'] ,
501 \ ['\\rbrace' , ']'] ,
502 \ ['\\rceil' , '⌉'] ,
503 \ ['\\rfloor' , '⌋'] ,
504 \ ['\\rgroup' , '⌋'] ,
505 \ ['\\rmoustache' , '⎞'] ,
506 \ ['\\uparrow' , '↑'] ,
507 \ ['\\Uparrow' , '↑'] ,
508 \ ['\\updownarrow', '↕'] ,
509 \ ['\\Updownarrow', '⇕']]
510 syn match texMathDelim '\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
511 for texmath in s:texMathDelimList
512 exe "syn match texMathDelim '\\\\[bB]igg\\=[lr]\\=".texmath[0]."' contained conceal cchar=".texmath[1]
513 endfor
514
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200515 else
516 syn match texMathDelim contained "\\\(left\|right\)\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
Bram Moolenaaradc21822011-04-01 18:03:16 +0200517 syn match texMathDelim contained "\\[bB]igg\=[lr]\=\>" skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
518 syn match texMathDelimSet2 contained "\\" nextgroup=texMathDelimKey,texMathDelimBad
519 syn match texMathDelimSet1 contained "[<>()[\]|/.]\|\\[{}|]"
520 syn keyword texMathDelimKey contained backslash lceil lVert rgroup uparrow
521 syn keyword texMathDelimKey contained downarrow lfloor rangle rmoustache Uparrow
522 syn keyword texMathDelimKey contained Downarrow lgroup rbrace rvert updownarrow
523 syn keyword texMathDelimKey contained langle lmoustache rceil rVert Updownarrow
524 syn keyword texMathDelimKey contained lbrace lvert rfloor
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200525 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526 syn match texMathDelim contained "\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
527 syn match texMathDelim contained "\\lefteqn\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000528endif
529
530" Special TeX characters ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
531syn match texSpecialChar "\\[$&%#{}_]"
532if b:tex_stylish
533 syn match texSpecialChar "\\[SP@][^a-zA-Z@]"me=e-1
534else
535 syn match texSpecialChar "\\[SP@]\A"me=e-1
536endif
537syn match texSpecialChar "\\\\"
Bram Moolenaare2719092015-01-10 15:09:25 +0100538if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539 syn match texOnlyMath "[_^]"
540endif
541syn match texSpecialChar "\^\^[0-9a-f]\{2}\|\^\^\S"
Bram Moolenaarbc488a72013-07-05 21:01:22 +0200542if s:tex_conceal !~ 'S'
543 syn match texSpecialChar '\\glq\>' contained conceal cchar=‚
544 syn match texSpecialChar '\\grq\>' contained conceal cchar=‘
545 syn match texSpecialChar '\\glqq\>' contained conceal cchar=„
546 syn match texSpecialChar '\\grqq\>' contained conceal cchar=“
547 syn match texSpecialChar '\\hyp\>' contained conceal cchar=-
548endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000549
550" Comments: {{{1
551" Normal TeX LaTeX : %....
552" Documented TeX Format: ^^A... -and- leading %s (only)
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100553if !s:tex_comment_nospell
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000554 syn cluster texCommentGroup contains=texTodo,@Spell
555else
556 syn cluster texCommentGroup contains=texTodo,@NoSpell
557endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000558syn case ignore
Bram Moolenaar18144c82006-04-12 21:52:12 +0000559syn keyword texTodo contained combak fixme todo xxx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000560syn case match
Bram Moolenaar81af9252010-12-10 20:35:50 +0100561if s:extfname == "dtx"
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100562 syn match texComment "\^\^A.*$" contains=@texCommentGroup
563 syn match texComment "^%\+" contains=@texCommentGroup
Bram Moolenaar071d4272004-06-13 20:20:40 +0000564else
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100565 if s:tex_fold_enabled
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100566 " allows syntax-folding of 2 or more contiguous comment lines
567 " single-line comments are not folded
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100568 syn match texComment "%.*$" contains=@texCommentGroup
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100569 if s:tex_fast =~ 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100570 TexFold syn region texComment start="^\zs\s*%.*\_s*%" skip="^\s*%" end='^\ze\s*[^%]' contains=@texCommentGroup
571 TexFold syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaarfd2ac762006-03-01 22:09:21 +0000572 endif
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100573 else
574 syn match texComment "%.*$" contains=@texCommentGroup
575 if s:tex_fast =~ 'c'
Bram Moolenaarb4ff5182015-11-10 21:15:48 +0100576 syn region texNoSpell contained matchgroup=texComment start="%\s*nospell\s*{" end="%\s*nospell\s*}" contains=@texFoldGroup,@NoSpell
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100577 endif
578 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000579endif
580
581" Separate lines used for verb` and verb# so that the end conditions {{{1
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200582" will appropriately terminate.
583" If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200584if s:tex_fast =~ 'v'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100585 if exists("g:tex_verbspell") && g:tex_verbspell
586 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>" contains=@Spell
587 " listings package:
588 syn region texZone start="\\begin{lstlisting}" end="\\end{lstlisting}\|%stopzone\>" contains=@Spell
589 if version < 600
590 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>" contains=@Spell
591 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>" contains=@Spell
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200592 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100593 if b:tex_stylish
594 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>" contains=@Spell
595 else
596 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>" contains=@Spell
597 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200598 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100599 else
600 syn region texZone start="\\begin{[vV]erbatim}" end="\\end{[vV]erbatim}\|%stopzone\>"
601 if version < 600
602 syn region texZone start="\\verb\*\=`" end="`\|%stopzone\>"
603 syn region texZone start="\\verb\*\=#" end="#\|%stopzone\>"
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200604 else
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100605 if b:tex_stylish
606 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z@]\)" end="\z1\|%stopzone\>"
607 else
608 syn region texZone start="\\verb\*\=\z([^\ta-zA-Z]\)" end="\z1\|%stopzone\>"
609 endif
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200610 endif
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100611 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000612endif
613
614" Tex Reference Zones: {{{1
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200615if s:tex_fast =~ 'r'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100616 syn region texZone matchgroup=texStatement start="@samp{" end="}\|%stopzone\>" contains=@texRefGroup
617 syn region texRefZone matchgroup=texStatement start="\\nocite{" end="}\|%stopzone\>" contains=@texRefGroup
618 syn region texRefZone matchgroup=texStatement start="\\bibliography{" end="}\|%stopzone\>" contains=@texRefGroup
619 syn region texRefZone matchgroup=texStatement start="\\label{" end="}\|%stopzone\>" contains=@texRefGroup
620 syn region texRefZone matchgroup=texStatement start="\\\(page\|eq\)ref{" end="}\|%stopzone\>" contains=@texRefGroup
621 syn region texRefZone matchgroup=texStatement start="\\v\=ref{" end="}\|%stopzone\>" contains=@texRefGroup
622 syn region texRefOption contained matchgroup=Delimiter start='\[' end=']' contains=@texRefGroup,texRefZone nextgroup=texRefOption,texCite
Bram Moolenaar6e932462014-09-09 18:48:09 +0200623 syn region texCite contained matchgroup=Delimiter start='{' end='}' contains=@texRefGroup,texRefZone,texCite
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100624endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200625syn match texRefZone '\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
Bram Moolenaar071d4272004-06-13 20:20:40 +0000626
627" Handle newcommand, newenvironment : {{{1
628syn match texNewCmd "\\newcommand\>" nextgroup=texCmdName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200629if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100630 syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
631 syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]" nextgroup=texCmdBody skipwhite skipnl
632 syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]" matchgroup=Delimiter end="}" contains=@texCmdGroup
633endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000634syn match texNewEnv "\\newenvironment\>" nextgroup=texEnvName skipwhite skipnl
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200635if s:tex_fast =~ 'V'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100636 syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvBgn skipwhite skipnl
637 syn region texEnvBgn contained matchgroup=Delimiter start="{"rs=s+1 end="}" nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
638 syn region texEnvEnd contained matchgroup=Delimiter start="{"rs=s+1 end="}" skipwhite skipnl contains=@texEnvGroup
639endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000640
641" Definitions/Commands: {{{1
642syn match texDefCmd "\\def\>" nextgroup=texDefName skipwhite skipnl
643if b:tex_stylish
644 syn match texDefName contained "\\[a-zA-Z@]\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
645 syn match texDefName contained "\\[^a-zA-Z@]" nextgroup=texDefParms,texCmdBody skipwhite skipnl
646else
647 syn match texDefName contained "\\\a\+" nextgroup=texDefParms,texCmdBody skipwhite skipnl
648 syn match texDefName contained "\\\A" nextgroup=texDefParms,texCmdBody skipwhite skipnl
649endif
650syn match texDefParms contained "#[^{]*" contains=texDefParm nextgroup=texCmdBody skipwhite skipnl
651syn match texDefParm contained "#\d\+"
652
653" TeX Lengths: {{{1
Bram Moolenaar9964e462007-05-05 17:54:07 +0000654syn match texLength "\<\d\+\([.,]\d\+\)\=\s*\(true\)\=\s*\(bp\|cc\|cm\|dd\|em\|ex\|in\|mm\|pc\|pt\|sp\)\>"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000655
656" TeX String Delimiters: {{{1
657syn match texString "\(``\|''\|,,\)"
658
Bram Moolenaar5c736222010-01-06 20:54:52 +0100659" makeatletter -- makeatother sections
Bram Moolenaara0f849e2015-10-30 14:37:44 +0100660if !s:tex_no_error
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200661 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100662 syn region texStyle matchgroup=texStatement start='\\makeatletter' end='\\makeatother' contains=@texStyleGroup contained
663 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100664 syn match texStyleStatement "\\[a-zA-Z@]\+" contained
Bram Moolenaar543b7ef2013-06-01 14:50:56 +0200665 if s:tex_fast =~ 'S'
Bram Moolenaarac7bd632013-03-19 11:35:58 +0100666 syn region texStyleMatcher matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]" end="}" contains=@texStyleGroup,texError contained
667 syn region texStyleMatcher matchgroup=Delimiter start="\[" end="]" contains=@texStyleGroup,texError contained
668 endif
Bram Moolenaar5c736222010-01-06 20:54:52 +0100669endif
670
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200671" Conceal mode support (supports set cole=2) {{{1
Bram Moolenaarb2c03502010-07-02 20:20:09 +0200672if has("conceal") && &enc == 'utf-8'
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200673
674 " Math Symbols {{{2
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200675 " (many of these symbols were contributed by Björn Winckler)
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200676 if s:tex_conceal =~ 'm'
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200677 let s:texMathList=[
Bram Moolenaaradc21822011-04-01 18:03:16 +0200678 \ ['|' , '‖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200679 \ ['aleph' , 'ℵ'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100680 \ ['amalg' , '∐'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200681 \ ['angle' , '∠'],
682 \ ['approx' , '≈'],
683 \ ['ast' , '∗'],
684 \ ['asymp' , '≍'],
685 \ ['backepsilon' , '∍'],
686 \ ['backsimeq' , '≃'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200687 \ ['backslash' , '∖'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200688 \ ['barwedge' , '⊼'],
689 \ ['because' , '∵'],
690 \ ['between' , '≬'],
691 \ ['bigcap' , '∩'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100692 \ ['bigcirc' , '○'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200693 \ ['bigcup' , '∪'],
694 \ ['bigodot' , '⊙'],
695 \ ['bigoplus' , '⊕'],
696 \ ['bigotimes' , '⊗'],
697 \ ['bigsqcup' , '⊔'],
698 \ ['bigtriangledown', '∇'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100699 \ ['bigtriangleup' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200700 \ ['bigvee' , '⋁'],
701 \ ['bigwedge' , '⋀'],
702 \ ['blacksquare' , '∎'],
703 \ ['bot' , '⊥'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100704 \ ['bowtie' , '⋈'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200705 \ ['boxdot' , '⊡'],
706 \ ['boxminus' , '⊟'],
707 \ ['boxplus' , '⊞'],
708 \ ['boxtimes' , '⊠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100709 \ ['bullet' , '•'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200710 \ ['bumpeq' , '≏'],
711 \ ['Bumpeq' , '≎'],
712 \ ['cap' , '∩'],
713 \ ['Cap' , '⋒'],
714 \ ['cdot' , '·'],
715 \ ['cdots' , '⋯'],
716 \ ['circ' , '∘'],
717 \ ['circeq' , '≗'],
718 \ ['circlearrowleft', '↺'],
719 \ ['circlearrowright', '↻'],
720 \ ['circledast' , '⊛'],
721 \ ['circledcirc' , '⊚'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200722 \ ['clubsuit' , '♣'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200723 \ ['complement' , '∁'],
724 \ ['cong' , '≅'],
725 \ ['coprod' , '∐'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200726 \ ['copyright' , '©'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200727 \ ['cup' , '∪'],
728 \ ['Cup' , '⋓'],
729 \ ['curlyeqprec' , '⋞'],
730 \ ['curlyeqsucc' , '⋟'],
731 \ ['curlyvee' , '⋎'],
732 \ ['curlywedge' , '⋏'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100733 \ ['dagger' , '†'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200734 \ ['dashv' , '⊣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100735 \ ['ddagger' , '‡'],
736 \ ['ddots' , '⋱'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200737 \ ['diamond' , '⋄'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200738 \ ['diamondsuit' , '♢'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200739 \ ['div' , '÷'],
740 \ ['doteq' , '≐'],
741 \ ['doteqdot' , '≑'],
742 \ ['dotplus' , '∔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100743 \ ['dots' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200744 \ ['dotsb' , '⋯'],
745 \ ['dotsc' , '…'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200746 \ ['dotsi' , '⋯'],
747 \ ['dotso' , '…'],
748 \ ['doublebarwedge' , '⩞'],
749 \ ['downarrow' , '↓'],
750 \ ['Downarrow' , '⇓'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100751 \ ['ell' , 'ℓ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200752 \ ['emptyset' , '∅'],
753 \ ['eqcirc' , '≖'],
754 \ ['eqsim' , '≂'],
755 \ ['eqslantgtr' , '⪖'],
756 \ ['eqslantless' , '⪕'],
757 \ ['equiv' , '≡'],
758 \ ['exists' , '∃'],
759 \ ['fallingdotseq' , '≒'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200760 \ ['flat' , '♭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200761 \ ['forall' , '∀'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100762 \ ['frown' , '⁔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200763 \ ['ge' , '≥'],
764 \ ['geq' , '≥'],
765 \ ['geqq' , '≧'],
766 \ ['gets' , '←'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100767 \ ['gg' , '⟫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200768 \ ['gneqq' , '≩'],
769 \ ['gtrdot' , '⋗'],
770 \ ['gtreqless' , '⋛'],
771 \ ['gtrless' , '≷'],
772 \ ['gtrsim' , '≳'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200773 \ ['hbar' , 'ℏ'],
774 \ ['heartsuit' , '♡'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200775 \ ['hookleftarrow' , '↩'],
776 \ ['hookrightarrow' , '↪'],
777 \ ['iiint' , '∭'],
778 \ ['iint' , '∬'],
779 \ ['Im' , 'ℑ'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200780 \ ['imath' , 'ɩ'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200781 \ ['in' , '∈'],
782 \ ['infty' , '∞'],
783 \ ['int' , '∫'],
784 \ ['lceil' , '⌈'],
785 \ ['ldots' , '…'],
786 \ ['le' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100787 \ ['leadsto' , '↝'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200788 \ ['left(' , '('],
789 \ ['left\[' , '['],
790 \ ['left\\{' , '{'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100791 \ ['leftarrow' , '←'],
792 \ ['Leftarrow' , '⇐'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100793 \ ['leftarrowtail' , '↢'],
794 \ ['leftharpoondown', '↽'],
795 \ ['leftharpoonup' , '↼'],
Bram Moolenaar97d62492012-11-15 21:28:22 +0100796 \ ['leftrightarrow' , '↔'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100797 \ ['Leftrightarrow' , '⇔'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200798 \ ['leftrightsquigarrow', '↭'],
799 \ ['leftthreetimes' , '⋋'],
800 \ ['leq' , '≤'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100801 \ ['leq' , '≤'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200802 \ ['leqq' , '≦'],
803 \ ['lessdot' , '⋖'],
804 \ ['lesseqgtr' , '⋚'],
805 \ ['lesssim' , '≲'],
806 \ ['lfloor' , '⌊'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100807 \ ['ll' , '≪'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200808 \ ['lmoustache' , '╭'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200809 \ ['lneqq' , '≨'],
810 \ ['ltimes' , '⋉'],
811 \ ['mapsto' , '↦'],
812 \ ['measuredangle' , '∡'],
813 \ ['mid' , '∣'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100814 \ ['models' , '╞'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200815 \ ['mp' , '∓'],
816 \ ['nabla' , '∇'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200817 \ ['natural' , '♮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200818 \ ['ncong' , '≇'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200819 \ ['ne' , '≠'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100820 \ ['nearrow' , '↗'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200821 \ ['neg' , '¬'],
822 \ ['neq' , '≠'],
823 \ ['nexists' , '∄'],
824 \ ['ngeq' , '≱'],
825 \ ['ngeqq' , '≱'],
826 \ ['ngtr' , '≯'],
827 \ ['ni' , '∋'],
828 \ ['nleftarrow' , '↚'],
829 \ ['nLeftarrow' , '⇍'],
830 \ ['nLeftrightarrow', '⇎'],
831 \ ['nleq' , '≰'],
832 \ ['nleqq' , '≰'],
833 \ ['nless' , '≮'],
834 \ ['nmid' , '∤'],
835 \ ['notin' , '∉'],
836 \ ['nprec' , '⊀'],
837 \ ['nrightarrow' , '↛'],
838 \ ['nRightarrow' , '⇏'],
839 \ ['nsim' , '≁'],
840 \ ['nsucc' , '⊁'],
841 \ ['ntriangleleft' , '⋪'],
842 \ ['ntrianglelefteq', '⋬'],
843 \ ['ntriangleright' , '⋫'],
844 \ ['ntrianglerighteq', '⋭'],
845 \ ['nvdash' , '⊬'],
846 \ ['nvDash' , '⊭'],
847 \ ['nVdash' , '⊮'],
848 \ ['nwarrow' , '↖'],
849 \ ['odot' , '⊙'],
850 \ ['oint' , '∮'],
851 \ ['ominus' , '⊖'],
852 \ ['oplus' , '⊕'],
853 \ ['oslash' , '⊘'],
854 \ ['otimes' , '⊗'],
855 \ ['owns' , '∋'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200856 \ ['P' , '¶'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100857 \ ['parallel' , '║'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200858 \ ['partial' , '∂'],
859 \ ['perp' , '⊥'],
860 \ ['pitchfork' , '⋔'],
861 \ ['pm' , '±'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200862 \ ['prec' , '≺'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100863 \ ['precapprox' , '⪷'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200864 \ ['preccurlyeq' , '≼'],
865 \ ['preceq' , '⪯'],
866 \ ['precnapprox' , '⪹'],
867 \ ['precneqq' , '⪵'],
868 \ ['precsim' , '≾'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200869 \ ['prime' , '′'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200870 \ ['prod' , '∏'],
871 \ ['propto' , '∝'],
872 \ ['rceil' , '⌉'],
873 \ ['Re' , 'ℜ'],
874 \ ['rfloor' , '⌋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200875 \ ['right)' , ')'],
876 \ ['right]' , ']'],
877 \ ['right\\}' , '}'],
Bram Moolenaare2719092015-01-10 15:09:25 +0100878 \ ['rightarrow' , '→'],
879 \ ['Rightarrow' , '⇒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100880 \ ['rightarrowtail' , '↣'],
881 \ ['rightleftharpoons', '⇌'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200882 \ ['rightsquigarrow', '↝'],
883 \ ['rightthreetimes', '⋌'],
884 \ ['risingdotseq' , '≓'],
Bram Moolenaaradc21822011-04-01 18:03:16 +0200885 \ ['rmoustache' , '╮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200886 \ ['rtimes' , '⋊'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200887 \ ['S' , '§'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200888 \ ['searrow' , '↘'],
889 \ ['setminus' , '∖'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200890 \ ['sharp' , '♯'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200891 \ ['sim' , '∼'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100892 \ ['simeq' , '⋍'],
893 \ ['smile' , '‿'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200894 \ ['spadesuit' , '♠'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200895 \ ['sphericalangle' , '∢'],
896 \ ['sqcap' , '⊓'],
897 \ ['sqcup' , '⊔'],
898 \ ['sqsubset' , '⊏'],
899 \ ['sqsubseteq' , '⊑'],
900 \ ['sqsupset' , '⊐'],
901 \ ['sqsupseteq' , '⊒'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100902 \ ['star' , '✫'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200903 \ ['subset' , '⊂'],
904 \ ['Subset' , '⋐'],
905 \ ['subseteq' , '⊆'],
906 \ ['subseteqq' , '⫅'],
907 \ ['subsetneq' , '⊊'],
908 \ ['subsetneqq' , '⫋'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200909 \ ['succ' , '≻'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100910 \ ['succapprox' , '⪸'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200911 \ ['succcurlyeq' , '≽'],
912 \ ['succeq' , '⪰'],
913 \ ['succnapprox' , '⪺'],
914 \ ['succneqq' , '⪶'],
915 \ ['succsim' , '≿'],
916 \ ['sum' , '∑'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100917 \ ['supset' , '⊃'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200918 \ ['Supset' , '⋑'],
919 \ ['supseteq' , '⊇'],
920 \ ['supseteqq' , '⫆'],
921 \ ['supsetneq' , '⊋'],
922 \ ['supsetneqq' , '⫌'],
923 \ ['surd' , '√'],
924 \ ['swarrow' , '↙'],
925 \ ['therefore' , '∴'],
926 \ ['times' , '×'],
927 \ ['to' , '→'],
928 \ ['top' , '⊤'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200929 \ ['triangle' , '∆'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200930 \ ['triangleleft' , '⊲'],
931 \ ['trianglelefteq' , '⊴'],
932 \ ['triangleq' , '≜'],
933 \ ['triangleright' , '⊳'],
934 \ ['trianglerighteq', '⊵'],
935 \ ['twoheadleftarrow', '↞'],
936 \ ['twoheadrightarrow', '↠'],
937 \ ['uparrow' , '↑'],
938 \ ['Uparrow' , '⇑'],
939 \ ['updownarrow' , '↕'],
940 \ ['Updownarrow' , '⇕'],
941 \ ['varnothing' , '∅'],
942 \ ['vartriangle' , '∆'],
943 \ ['vdash' , '⊢'],
944 \ ['vDash' , '⊨'],
945 \ ['Vdash' , '⊩'],
946 \ ['vdots' , '⋮'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200947 \ ['vee' , '∨'],
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100948 \ ['veebar' , '⊻'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200949 \ ['Vvdash' , '⊪'],
950 \ ['wedge' , '∧'],
Bram Moolenaard960d762011-09-21 19:22:10 +0200951 \ ['wp' , '℘'],
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200952 \ ['wr' , '≀']]
Bram Moolenaar6be7f872012-01-20 21:08:56 +0100953" \ ['jmath' , 'X']
954" \ ['uminus' , 'X']
955" \ ['uplus' , 'X']
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200956 for texmath in s:texMathList
Bram Moolenaar81af9252010-12-10 20:35:50 +0100957 if texmath[0] =~ '\w$'
958 exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
959 else
960 exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
961 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +0200962 endfor
Bram Moolenaar74cbdf02010-08-04 23:03:17 +0200963
964 if &ambw == "double"
965 syn match texMathSymbol '\\gg\>' contained conceal cchar=≫
966 syn match texMathSymbol '\\ll\>' contained conceal cchar=≪
967 else
968 syn match texMathSymbol '\\gg\>' contained conceal cchar=⟫
969 syn match texMathSymbol '\\ll\>' contained conceal cchar=⟪
970 endif
Bram Moolenaard960d762011-09-21 19:22:10 +0200971
972 syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
973 syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
974 syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
975 syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
976 syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
977 syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
978 syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
979 syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
980 syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
981 syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
982 syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
983 syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
984 syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
985 syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
986 syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
987 syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
988 syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
989 syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
990 syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
991 syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
Bram Moolenaare2719092015-01-10 15:09:25 +0100992" syn match texMathSymbol '\\bar{a}' contained conceal cchar=a̅
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200993 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +0200994
995 " Greek {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +0200996 if s:tex_conceal =~ 'g'
997 fun! s:Greek(group,pat,cchar)
998 exe 'syn match '.a:group." '".a:pat."' contained conceal cchar=".a:cchar
999 endfun
1000 call s:Greek('texGreek','\\alpha\>' ,'α')
1001 call s:Greek('texGreek','\\beta\>' ,'β')
1002 call s:Greek('texGreek','\\gamma\>' ,'γ')
1003 call s:Greek('texGreek','\\delta\>' ,'δ')
1004 call s:Greek('texGreek','\\epsilon\>' ,'ϵ')
1005 call s:Greek('texGreek','\\varepsilon\>' ,'ε')
1006 call s:Greek('texGreek','\\zeta\>' ,'ζ')
1007 call s:Greek('texGreek','\\eta\>' ,'η')
1008 call s:Greek('texGreek','\\theta\>' ,'θ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001009 call s:Greek('texGreek','\\vartheta\>' ,'ϑ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001010 call s:Greek('texGreek','\\kappa\>' ,'κ')
1011 call s:Greek('texGreek','\\lambda\>' ,'λ')
1012 call s:Greek('texGreek','\\mu\>' ,'μ')
1013 call s:Greek('texGreek','\\nu\>' ,'ν')
1014 call s:Greek('texGreek','\\xi\>' ,'ξ')
1015 call s:Greek('texGreek','\\pi\>' ,'π')
1016 call s:Greek('texGreek','\\varpi\>' ,'ϖ')
1017 call s:Greek('texGreek','\\rho\>' ,'ρ')
1018 call s:Greek('texGreek','\\varrho\>' ,'ϱ')
1019 call s:Greek('texGreek','\\sigma\>' ,'σ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001020 call s:Greek('texGreek','\\varsigma\>' ,'ς')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001021 call s:Greek('texGreek','\\tau\>' ,'τ')
1022 call s:Greek('texGreek','\\upsilon\>' ,'υ')
Bram Moolenaare2719092015-01-10 15:09:25 +01001023 call s:Greek('texGreek','\\phi\>' ,'ϕ')
1024 call s:Greek('texGreek','\\varphi\>' ,'φ')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001025 call s:Greek('texGreek','\\chi\>' ,'χ')
1026 call s:Greek('texGreek','\\psi\>' ,'ψ')
1027 call s:Greek('texGreek','\\omega\>' ,'ω')
1028 call s:Greek('texGreek','\\Gamma\>' ,'Γ')
1029 call s:Greek('texGreek','\\Delta\>' ,'Δ')
1030 call s:Greek('texGreek','\\Theta\>' ,'Θ')
1031 call s:Greek('texGreek','\\Lambda\>' ,'Λ')
1032 call s:Greek('texGreek','\\Xi\>' ,'Χ')
1033 call s:Greek('texGreek','\\Pi\>' ,'Π')
1034 call s:Greek('texGreek','\\Sigma\>' ,'Σ')
1035 call s:Greek('texGreek','\\Upsilon\>' ,'Υ')
1036 call s:Greek('texGreek','\\Phi\>' ,'Φ')
1037 call s:Greek('texGreek','\\Psi\>' ,'Ψ')
1038 call s:Greek('texGreek','\\Omega\>' ,'Ω')
1039 delfun s:Greek
1040 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001041
1042 " Superscripts/Subscripts {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001043 if s:tex_conceal =~ 's'
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001044 if s:tex_fast =~ 's'
Bram Moolenaarac7bd632013-03-19 11:35:58 +01001045 syn region texSuperscript matchgroup=Delimiter start='\^{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1046 syn region texSubscript matchgroup=Delimiter start='_{' skip="\\\\\|\\[{}]" end='}' contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
1047 endif
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001048 " s:SuperSub:
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001049 fun! s:SuperSub(group,leader,pat,cchar)
Bram Moolenaar6e932462014-09-09 18:48:09 +02001050 if a:pat =~ '^\\' || (a:leader == '\^' && a:pat =~ g:tex_superscripts) || (a:leader == '_' && a:pat =~ g:tex_subscripts)
1051" call Decho("SuperSub: group<".a:group."> leader<".a:leader."> pat<".a:pat."> cchar<".a:cchar.">")
1052 exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
Bram Moolenaar541f92d2015-06-19 13:27:23 +02001053 exe 'syn match '.a:group."s '".a:pat ."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
Bram Moolenaar6e932462014-09-09 18:48:09 +02001054 endif
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001055 endfun
1056 call s:SuperSub('texSuperscript','\^','0','⁰')
1057 call s:SuperSub('texSuperscript','\^','1','¹')
1058 call s:SuperSub('texSuperscript','\^','2','²')
1059 call s:SuperSub('texSuperscript','\^','3','³')
1060 call s:SuperSub('texSuperscript','\^','4','⁴')
1061 call s:SuperSub('texSuperscript','\^','5','⁵')
1062 call s:SuperSub('texSuperscript','\^','6','⁶')
1063 call s:SuperSub('texSuperscript','\^','7','⁷')
1064 call s:SuperSub('texSuperscript','\^','8','⁸')
1065 call s:SuperSub('texSuperscript','\^','9','⁹')
1066 call s:SuperSub('texSuperscript','\^','a','ᵃ')
1067 call s:SuperSub('texSuperscript','\^','b','ᵇ')
1068 call s:SuperSub('texSuperscript','\^','c','ᶜ')
1069 call s:SuperSub('texSuperscript','\^','d','ᵈ')
1070 call s:SuperSub('texSuperscript','\^','e','ᵉ')
1071 call s:SuperSub('texSuperscript','\^','f','ᶠ')
1072 call s:SuperSub('texSuperscript','\^','g','ᵍ')
1073 call s:SuperSub('texSuperscript','\^','h','ʰ')
1074 call s:SuperSub('texSuperscript','\^','i','ⁱ')
1075 call s:SuperSub('texSuperscript','\^','j','ʲ')
1076 call s:SuperSub('texSuperscript','\^','k','ᵏ')
1077 call s:SuperSub('texSuperscript','\^','l','ˡ')
1078 call s:SuperSub('texSuperscript','\^','m','ᵐ')
1079 call s:SuperSub('texSuperscript','\^','n','ⁿ')
1080 call s:SuperSub('texSuperscript','\^','o','ᵒ')
1081 call s:SuperSub('texSuperscript','\^','p','ᵖ')
1082 call s:SuperSub('texSuperscript','\^','r','ʳ')
1083 call s:SuperSub('texSuperscript','\^','s','ˢ')
1084 call s:SuperSub('texSuperscript','\^','t','ᵗ')
1085 call s:SuperSub('texSuperscript','\^','u','ᵘ')
1086 call s:SuperSub('texSuperscript','\^','v','ᵛ')
1087 call s:SuperSub('texSuperscript','\^','w','ʷ')
1088 call s:SuperSub('texSuperscript','\^','x','ˣ')
1089 call s:SuperSub('texSuperscript','\^','y','ʸ')
1090 call s:SuperSub('texSuperscript','\^','z','ᶻ')
1091 call s:SuperSub('texSuperscript','\^','A','ᴬ')
1092 call s:SuperSub('texSuperscript','\^','B','ᴮ')
1093 call s:SuperSub('texSuperscript','\^','D','ᴰ')
1094 call s:SuperSub('texSuperscript','\^','E','ᴱ')
1095 call s:SuperSub('texSuperscript','\^','G','ᴳ')
1096 call s:SuperSub('texSuperscript','\^','H','ᴴ')
1097 call s:SuperSub('texSuperscript','\^','I','ᴵ')
1098 call s:SuperSub('texSuperscript','\^','J','ᴶ')
1099 call s:SuperSub('texSuperscript','\^','K','ᴷ')
1100 call s:SuperSub('texSuperscript','\^','L','ᴸ')
1101 call s:SuperSub('texSuperscript','\^','M','ᴹ')
1102 call s:SuperSub('texSuperscript','\^','N','ᴺ')
1103 call s:SuperSub('texSuperscript','\^','O','ᴼ')
1104 call s:SuperSub('texSuperscript','\^','P','ᴾ')
1105 call s:SuperSub('texSuperscript','\^','R','ᴿ')
1106 call s:SuperSub('texSuperscript','\^','T','ᵀ')
1107 call s:SuperSub('texSuperscript','\^','U','ᵁ')
1108 call s:SuperSub('texSuperscript','\^','W','ᵂ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001109 call s:SuperSub('texSuperscript','\^',',','︐')
1110 call s:SuperSub('texSuperscript','\^',':','︓')
1111 call s:SuperSub('texSuperscript','\^',';','︔')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001112 call s:SuperSub('texSuperscript','\^','+','⁺')
1113 call s:SuperSub('texSuperscript','\^','-','⁻')
1114 call s:SuperSub('texSuperscript','\^','<','˂')
1115 call s:SuperSub('texSuperscript','\^','>','˃')
1116 call s:SuperSub('texSuperscript','\^','/','ˊ')
1117 call s:SuperSub('texSuperscript','\^','(','⁽')
1118 call s:SuperSub('texSuperscript','\^',')','⁾')
1119 call s:SuperSub('texSuperscript','\^','\.','˙')
1120 call s:SuperSub('texSuperscript','\^','=','˭')
1121 call s:SuperSub('texSubscript','_','0','₀')
1122 call s:SuperSub('texSubscript','_','1','₁')
1123 call s:SuperSub('texSubscript','_','2','₂')
1124 call s:SuperSub('texSubscript','_','3','₃')
1125 call s:SuperSub('texSubscript','_','4','₄')
1126 call s:SuperSub('texSubscript','_','5','₅')
1127 call s:SuperSub('texSubscript','_','6','₆')
1128 call s:SuperSub('texSubscript','_','7','₇')
1129 call s:SuperSub('texSubscript','_','8','₈')
1130 call s:SuperSub('texSubscript','_','9','₉')
1131 call s:SuperSub('texSubscript','_','a','ₐ')
1132 call s:SuperSub('texSubscript','_','e','ₑ')
1133 call s:SuperSub('texSubscript','_','i','ᵢ')
1134 call s:SuperSub('texSubscript','_','o','ₒ')
1135 call s:SuperSub('texSubscript','_','u','ᵤ')
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001136 call s:SuperSub('texSubscript','_',',','︐')
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001137 call s:SuperSub('texSubscript','_','+','₊')
1138 call s:SuperSub('texSubscript','_','-','₋')
1139 call s:SuperSub('texSubscript','_','/','ˏ')
1140 call s:SuperSub('texSubscript','_','(','₍')
1141 call s:SuperSub('texSubscript','_',')','₎')
1142 call s:SuperSub('texSubscript','_','\.','‸')
1143 call s:SuperSub('texSubscript','_','r','ᵣ')
1144 call s:SuperSub('texSubscript','_','v','ᵥ')
1145 call s:SuperSub('texSubscript','_','x','ₓ')
1146 call s:SuperSub('texSubscript','_','\\beta\>' ,'ᵦ')
1147 call s:SuperSub('texSubscript','_','\\delta\>','ᵨ')
1148 call s:SuperSub('texSubscript','_','\\phi\>' ,'ᵩ')
1149 call s:SuperSub('texSubscript','_','\\gamma\>','ᵧ')
1150 call s:SuperSub('texSubscript','_','\\chi\>' ,'ᵪ')
1151 delfun s:SuperSub
1152 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001153
1154 " Accented characters: {{{2
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001155 if s:tex_conceal =~ 'a'
1156 if b:tex_stylish
1157 syn match texAccent "\\[bcdvuH][^a-zA-Z@]"me=e-1
1158 syn match texLigature "\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)[^a-zA-Z@]"me=e-1
1159 else
1160 fun! s:Accents(chr,...)
1161 let i= 1
Bram Moolenaara6878372014-03-22 21:02:50 +01001162 for accent in ["`","\\'","^",'"','\~','\.','=',"c","H","k","r","u","v"]
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001163 if i > a:0
1164 break
1165 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001166 if strlen(a:{i}) == 0 || a:{i} == ' ' || a:{i} == '?'
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001167 let i= i + 1
1168 continue
1169 endif
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001170 if accent =~ '\a'
1171 exe "syn match texAccent '".'\\'.accent.'\(\s*{'.a:chr.'}\|\s\+'.a:chr.'\)'."' conceal cchar=".a:{i}
1172 else
1173 exe "syn match texAccent '".'\\'.accent.'\s*\({'.a:chr.'}\|'.a:chr.'\)'."' conceal cchar=".a:{i}
1174 endif
Bram Moolenaare0021c72010-07-28 17:25:21 +02001175 let i= i + 1
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001176 endfor
1177 endfun
Bram Moolenaar6e932462014-09-09 18:48:09 +02001178 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
1179 call s:Accents('a','à','á','â','ä','ã','ȧ','ā',' ',' ','ą','å','ă','ǎ')
1180 call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ','Ā',' ',' ','Ą','Å','Ă','Ǎ')
1181 call s:Accents('c',' ','ć','ĉ',' ',' ','ċ',' ','ç',' ',' ',' ',' ','č')
1182 call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ',' ','Ç',' ',' ',' ',' ','Č')
1183 call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
1184 call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
1185 call s:Accents('e','è','é','ê','ë','ẽ','ė','ē','ȩ',' ','ę',' ','ĕ','ě')
1186 call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ē','Ȩ',' ','Ę',' ','Ĕ','Ě')
1187 call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ',' ','ģ',' ',' ',' ','ğ','ǧ')
1188 call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ',' ','Ģ',' ',' ',' ','Ğ','Ǧ')
1189 call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
1190 call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
1191 call s:Accents('i','ì','í','î','ï','ĩ','į','ī',' ',' ','į',' ','ĭ','ǐ')
1192 call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ','Ī',' ',' ','Į',' ','Ĭ','Ǐ')
1193 call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
1194 call s:Accents('k',' ',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ','ǩ')
1195 call s:Accents('K',' ',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ','Ǩ')
1196 call s:Accents('l',' ','ĺ','ľ',' ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
1197 call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
1198 call s:Accents('n',' ','ń',' ',' ','ñ',' ',' ','ņ',' ',' ',' ',' ','ň')
1199 call s:Accents('N',' ','Ń',' ',' ','Ñ',' ',' ','Ņ',' ',' ',' ',' ','Ň')
1200 call s:Accents('o','ò','ó','ô','ö','õ','ȯ','ō',' ','ő','ǫ',' ','ŏ','ǒ')
1201 call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ','Ō',' ','Ő','Ǫ',' ','Ŏ','Ǒ')
1202 call s:Accents('r',' ','ŕ',' ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
1203 call s:Accents('R',' ','Ŕ',' ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
1204 call s:Accents('s',' ','ś','ŝ',' ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
1205 call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
1206 call s:Accents('t',' ',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
1207 call s:Accents('T',' ',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
1208 call s:Accents('u','ù','ú','û','ü','ũ',' ','ū',' ','ű','ų','ů','ŭ','ǔ')
1209 call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ','Ū',' ','Ű','Ų','Ů','Ŭ','Ǔ')
1210 call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1211 call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
1212 call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1213 call s:Accents('Y','Ỳ','Ý','Ŷ','Ÿ','Ỹ',' ',' ',' ',' ',' ',' ',' ',' ')
1214 call s:Accents('z',' ','ź',' ',' ',' ','ż',' ',' ',' ',' ',' ',' ','ž')
1215 call s:Accents('Z',' ','Ź',' ',' ',' ','Ż',' ',' ',' ',' ',' ',' ','Ž')
Bram Moolenaara6878372014-03-22 21:02:50 +01001216 call s:Accents('\\i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ',' ','ĭ',' ')
1217 " \` \' \^ \" \~ \. \= \c \H \k \r \u \v
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001218 delfun s:Accents
1219 syn match texAccent '\\aa\>' conceal cchar=å
1220 syn match texAccent '\\AA\>' conceal cchar=Å
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001221 syn match texAccent '\\o\>' conceal cchar=ø
1222 syn match texAccent '\\O\>' conceal cchar=Ø
Bram Moolenaar4b22cdb2010-08-02 22:12:46 +02001223 syn match texLigature '\\AE\>' conceal cchar=Æ
1224 syn match texLigature '\\ae\>' conceal cchar=æ
1225 syn match texLigature '\\oe\>' conceal cchar=œ
1226 syn match texLigature '\\OE\>' conceal cchar=Œ
1227 syn match texLigature '\\ss\>' conceal cchar=ß
1228 endif
Bram Moolenaar611df5b2010-07-26 22:51:56 +02001229 endif
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001230endif
1231
1232" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001233" LaTeX synchronization: {{{1
1234syn sync maxlines=200
1235syn sync minlines=50
1236
1237syn sync match texSyncStop groupthere NONE "%stopzone\>"
1238
1239" Synchronization: {{{1
1240" The $..$ and $$..$$ make for impossible sync patterns
1241" (one can't tell if a "$$" starts or stops a math zone by itself)
1242" The following grouptheres coupled with minlines above
1243" help improve the odds of good syncing.
Bram Moolenaare2719092015-01-10 15:09:25 +01001244if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001245 syn sync match texSyncMathZoneA groupthere NONE "\\end{abstract}"
1246 syn sync match texSyncMathZoneA groupthere NONE "\\end{center}"
1247 syn sync match texSyncMathZoneA groupthere NONE "\\end{description}"
1248 syn sync match texSyncMathZoneA groupthere NONE "\\end{enumerate}"
1249 syn sync match texSyncMathZoneA groupthere NONE "\\end{itemize}"
1250 syn sync match texSyncMathZoneA groupthere NONE "\\end{table}"
1251 syn sync match texSyncMathZoneA groupthere NONE "\\end{tabular}"
1252 syn sync match texSyncMathZoneA groupthere NONE "\\\(sub\)*section\>"
1253endif
1254
Bram Moolenaarb2c03502010-07-02 20:20:09 +02001255" ---------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +00001256" Highlighting: {{{1
1257if did_tex_syntax_inits == 1
1258 let did_tex_syntax_inits= 2
1259 " TeX highlighting groups which should share similar highlighting
Bram Moolenaar6e932462014-09-09 18:48:09 +02001260 if !exists("g:tex_no_error")
Bram Moolenaar543b7ef2013-06-01 14:50:56 +02001261 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001262 HiLink texBadMath texError
1263 HiLink texMathDelimBad texError
1264 HiLink texMathError texError
1265 if !b:tex_stylish
1266 HiLink texOnlyMath texError
1267 endif
1268 endif
1269 HiLink texError Error
1270 endif
1271
Bram Moolenaard38b0552012-04-25 19:07:41 +02001272 hi texBoldStyle gui=bold cterm=bold
1273 hi texItalStyle gui=italic cterm=italic
1274 hi texBoldItalStyle gui=bold,italic cterm=bold,italic
1275 hi texItalBoldStyle gui=bold,italic cterm=bold,italic
Bram Moolenaard960d762011-09-21 19:22:10 +02001276 HiLink texCite texRefZone
Bram Moolenaar071d4272004-06-13 20:20:40 +00001277 HiLink texDefCmd texDef
1278 HiLink texDefName texDef
1279 HiLink texDocType texCmdName
1280 HiLink texDocTypeArgs texCmdArgs
1281 HiLink texInputFileOpt texCmdArgs
1282 HiLink texInputCurlies texDelimiter
1283 HiLink texLigature texSpecialChar
Bram Moolenaare2719092015-01-10 15:09:25 +01001284 if !exists("g:tex_no_math")
Bram Moolenaar071d4272004-06-13 20:20:40 +00001285 HiLink texMathDelimSet1 texMathDelim
1286 HiLink texMathDelimSet2 texMathDelim
1287 HiLink texMathDelimKey texMathDelim
1288 HiLink texMathMatcher texMath
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001289 HiLink texAccent texStatement
1290 HiLink texGreek texStatement
1291 HiLink texSuperscript texStatement
1292 HiLink texSubscript texStatement
Bram Moolenaar6be7f872012-01-20 21:08:56 +01001293 HiLink texSuperscripts texSuperscript
1294 HiLink texSubscripts texSubscript
Bram Moolenaar7fc0c062010-08-10 21:43:35 +02001295 HiLink texMathSymbol texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001296 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001297 HiLink texMathZoneW texMath
1298 HiLink texMathZoneX texMath
1299 HiLink texMathZoneY texMath
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001300 HiLink texMathZoneV texMath
Bram Moolenaar071d4272004-06-13 20:20:40 +00001301 HiLink texMathZoneZ texMath
1302 endif
Bram Moolenaard38b0552012-04-25 19:07:41 +02001303 HiLink texBeginEnd texCmdName
1304 HiLink texBeginEndName texSection
Bram Moolenaar071d4272004-06-13 20:20:40 +00001305 HiLink texSpaceCode texStatement
Bram Moolenaar5c736222010-01-06 20:54:52 +01001306 HiLink texStyleStatement texStatement
Bram Moolenaar071d4272004-06-13 20:20:40 +00001307 HiLink texTypeSize texType
1308 HiLink texTypeStyle texType
1309
1310 " Basic TeX highlighting groups
1311 HiLink texCmdArgs Number
1312 HiLink texCmdName Statement
1313 HiLink texComment Comment
1314 HiLink texDef Statement
1315 HiLink texDefParm Special
1316 HiLink texDelimiter Delimiter
1317 HiLink texInput Special
1318 HiLink texInputFile Special
1319 HiLink texLength Number
1320 HiLink texMath Special
1321 HiLink texMathDelim Statement
1322 HiLink texMathOper Operator
1323 HiLink texNewCmd Statement
1324 HiLink texNewEnv Statement
1325 HiLink texOption Number
Bram Moolenaard960d762011-09-21 19:22:10 +02001326 HiLink texRefZone Special
Bram Moolenaar071d4272004-06-13 20:20:40 +00001327 HiLink texSection PreCondit
1328 HiLink texSpaceCodeChar Special
1329 HiLink texSpecialChar SpecialChar
1330 HiLink texStatement Statement
1331 HiLink texString String
1332 HiLink texTodo Todo
1333 HiLink texType Type
1334 HiLink texZone PreCondit
1335
1336 delcommand HiLink
1337endif
1338
Bram Moolenaar15146672011-10-20 22:22:38 +02001339" Cleanup: {{{1
Bram Moolenaara0f849e2015-10-30 14:37:44 +01001340delc TexFold
Bram Moolenaar81af9252010-12-10 20:35:50 +01001341unlet s:extfname
Bram Moolenaar071d4272004-06-13 20:20:40 +00001342let b:current_syntax = "tex"
Bram Moolenaar15146672011-10-20 22:22:38 +02001343let &cpo = s:keepcpo
1344unlet s:keepcpo
Bram Moolenaare90ee312010-08-05 22:08:47 +02001345" vim: ts=8 fdm=marker