| LaTeX keymap (Richard Atterer)
| Note that many symbols are only allowed when in math mode.
| This keymap tries to produce better readable documents by not inserting
| e.g. "\bullet{}", but "\bullet " and checking if the next key pressed
| afterwards is Space, in which case the " " is replaced with "\ ".
| There is support for users of the german package.
|
| Press HOME to activate the extension keymap for the following keypress.
|
| Your Types file must initialise TeX_sp to 0 and TeX_de to 1 or 0, depending
| on whether you use the german package or not. For example:
|	LaTeX		&1ACA	TeX:SET (TeX_sp=0):SET (TeX_de=0)
|
| Note that this is currently done in !ZapTeX.!Setup. This isn't ideal, and
| will be replaced in the future will a better method (hopefully).

		&800	&0	&1FF	TeX

		&000-1FF	*
| Remove space at line end
RETURN		&01D	IF ((@#TeX_sp) AND (@CHAROFF -1=32)):DELETE "PREV":ENDIF:SET (TeX_sp=0):RETURN
| May have to insert \ before the space
Space		&020  IF ((@#TeX_sp) AND (@CHAROFF -1=32)):DELETE "PREV":INSERT "\ ":ELSE:CHAR ' ':ENDIF:SET (TeX_sp=0)
| ': If pressed twice and using german, enter "' (i.e. press '' to get )
,		&027	IF ((@#TeX_de) AND (@CHAROFF -1=39) AND (@CHAROFF -2<>34)):DELETE "PREV":INSERT """'":ELSE:CHAR '''':ENDIF
| Comma: If pressed twice and using german, enter "` (i.e. press ,, to get )
,		&02C	IF ((@#TeX_de) AND (@CHAROFF -1=44)):DELETE "PREV":INSERT """`":ELSE:CHAR ',':ENDIF
| Replace three dots with \ldots
.		&02E	IF ((@CHAROFF -1=46) AND (@CHAROFF -2=46)):DELETE "PREV":DELETE "PREV":INSERT"\ldots ":SET (TeX_sp=1):ELSE:CHAR '.':ENDIF
| cReturn inserts \\ before the RETURN
cReturn		&13D	IF ((@#TeX_sp) AND (@CHAROFF -1=32)):DELETE "PREV":ENDIF:SET (TeX_sp=0):INSERT "\\":RETURN

HOME		&01E	KEYMAPN "TeX extras"

		&080	INSERT "\surd ":SET (TeX_sp=1)
		&081	INSERT "\^{W}"
		&082	INSERT "\^{w}"
		&083	BEEP
		&084	BEEP
		&085	INSERT "\^{Y}"
		&086	INSERT "\^{y}"
		&087	BEEP
		&088	INSERT "\Leftarrow ":SET (TeX_sp=1)
		&089	INSERT "\Rightarrow ":SET (TeX_sp=1)
		&08A	INSERT "\Downarrow ":SET (TeX_sp=1)
		&08B	INSERT "\Uparrow ":SET (TeX_sp=1)
		&08C	INSERT "\ldots ":SET (TeX_sp=1): REM(don't use '...')
		&08D	INSERT "$^{\mathrm{TM}}$"
		&08E	INSERT "\kern-.05em\raise.5ex\hbox{\the\scriptfont0 0}\kern-.15em/\kern-.15em\lower.25ex\hbox{\the\scriptfont0 00}"
		&08F	INSERT "\bullet ":SET (TeX_sp=1):REM(in German ,this is correct, not this)
		&090	IF (@#TeX_de):INSERT "\glq ":SET (TeX_sp=1):ELSE:CHAR '`':ENDIF
		&091	IF (@#TeX_de):INSERT "\grq ":SET (TeX_sp=1):ELSE:CHAR 39:ENDIF
		&092	INSERT "\flq ":SET (TeX_sp=1):REM(needs german)
		&093	INSERT "\frq ":SET (TeX_sp=1):REM(needs german)
		&094	INSERT "``"
		&095	IF (@#TeX_de):INSERT """'":ELSE:INSERT "''":ENDIF
		&096	IF (@#TeX_de):INSERT """`":ELSE:INSERT ",,":ENDIF
		&097	INSERT "--"
		&098	INSERT "---"
		&099	INSERT "$-$":REM(minus acc. to ISO)
		&09A	INSERT "\OE ":SET (TeX_sp=1)
		&09B	INSERT "\oe ":SET (TeX_sp=1)
		&09C	INSERT "\dag ":SET (TeX_sp=1):REM(\dagger in math)
		&09D	INSERT "\ddag ":SET (TeX_sp=1):REM(\ddagger in math)
		&09E	INSERT "fi"
		&09F	INSERT "fl"
		&0A0	INSERT "~":REM(non-breaking space)
		&0A1	INSERT "!`"
		&0A2	INSERT "$\not\!\mathrm{c}$":REM(yuk!-)
		&0A3	INSERT "\pounds ":SET (TeX_sp=1)
		&0A4	BEEP
		&0A5	BEEP
		&0A6	BEEP
		&0A7	INSERT "\S ":SET (TeX_sp=1)
		&0A8	INSERT "\""{}":LEFT
		&0A9	INSERT "\copyright ":SET (TeX_sp=1)
		&0AA	INSERT "$^{\mathrm{\underline{a}}}$"
		&0AB	INSERT """<":REM(needs german package)
		&0AC	INSERT "\neg ":SET (TeX_sp=1):REM(non-breaking hyphen)
		&0AD	IF (@#TeX_de):INSERT """~":ELSE:CHAR '-':ENDIF
		&0AE	INSERT "\hspace{.5em}\makebox[0pt]{$\bigcirc$}\makebox[0pt]{\scriptsize R}\hspace{.5em}"
		&0AF	INSERT "\rule[1.5ex]{.5em}{.1ex}"
		&0B0	INSERT "$^{\circ}$"
		&0B1	INSERT "\pm ":SET (TeX_sp=1)
		&0B2	INSERT "$^{2}$"
		&0B3	INSERT "$^{3}$"
		&0B4	INSERT "\'{}":LEFT
		&0B5	INSERT "\mu ":SET (TeX_sp=1)
		&0B6	INSERT "\P ":SET (TeX_sp=1)
		&0B7	INSERT "\cdot ":SET (TeX_sp=1)
		&0B8	INSERT "\c{}":LEFT
		&0B9	INSERT "$^{1}$"
		&0BA	INSERT "$^{\mathrm{\underline{o}}}$"
		&0BB	INSERT """>":REM(needs german package)
		&0BC	INSERT "$^{1\!\!}/\!_{4}$"
		&0BD	INSERT "$^{1\!\!}/\!_{2}$"
		&0BE	INSERT "$^{3\!\!}/\!_{4}$"
		&0BF	INSERT "?`"
		&0C0	INSERT "\`{A}"
		&0C1	INSERT "\'{A}"
		&0C2	INSERT "\^{A}"
		&0C3	INSERT "\~{A}"
		&0C4	IF (@#TeX_de):INSERT """A":ELSE:INSERT "\""{A}":ENDIF
		&0C5	INSERT "\AA ":SET (TeX_sp=1)
		&0C6	INSERT "\AE ":SET (TeX_sp=1)
		&0C7	INSERT "\c{C}"
		&0C8	INSERT "\`{E}"
		&0C9	INSERT "\'{E}"
		&0CA	INSERT "\^{E}"
		&0CB	INSERT "\""{E}"
		&0CC	INSERT "\`{I}"
		&0CD	INSERT "\'{I}"
		&0CE	INSERT "\^{I}"
		&0CF	INSERT "\""{I}"
		&0D0	INSERT "\makebox[0pt][l]{\rule[.75ex]{.3em}{.1ex}}D"
		&0D1	INSERT "\~{N}"
		&0D2	INSERT "\`{O}"
		&0D3	INSERT "\'{O}"
		&0D4	INSERT "\^{O}"
		&0D5	INSERT "\~{O}"
		&0D6	IF (@#TeX_de):INSERT """O":ELSE:INSERT "\""{O}":ENDIF
		&0D7	INSERT "\times ":SET (TeX_sp=1)
		&0D8	INSERT "\O ":SET (TeX_sp=1)
		&0D9	INSERT "\`{U}"
		&0DA	INSERT "\'{U}"
		&0DB	INSERT "\^{U}"
		&0DC	IF (@#TeX_de):INSERT """U":ELSE:INSERT "\""{U}":ENDIF
		&0DD	INSERT "\'{Y}"
		&0DE	BEEP
		&0DF	IF (@#TeX_de):INSERT """s":ELSE:INSERT "\ss ":ENDIF
		&0E0	INSERT "\`{a}"
		&0E1	INSERT "\'{a}"
		&0E2	INSERT "\^{a}"
		&0E3	INSERT "\~{a}"
		&0E4	IF (@#TeX_de):INSERT """a":ELSE:INSERT "\""{a}":ENDIF
		&0E5	INSERT "\aa ":SET (TeX_sp=1)
		&0E6	INSERT "\ae ":SET (TeX_sp=1)
		&0E7	INSERT "\c{c}"
		&0E8	INSERT "\`{e}"
		&0E9	INSERT "\'{e}"
		&0EA	INSERT "\^{e}"
		&0EB	INSERT "\""{e}"
		&0EC	INSERT "\`{\i}"
		&0ED	INSERT "\'{\i}"
		&0EE	INSERT "\^{\i}"
		&0EF	INSERT "\""{\i}"
		&0F0	BEEP
		&0F1	INSERT "\~{n}"
		&0F2	INSERT "\`{o}"
		&0F3	INSERT "\'{o}"
		&0F4	INSERT "\^{o}"
		&0F5	INSERT "\~{o}"
		&0F6	IF (@#TeX_de):INSERT """o":ELSE:INSERT "\""{o}":ENDIF
		&0F7	INSERT "\div ":SET (TeX_sp=1)
		&0F8	INSERT "\o ":SET (TeX_sp=1)
		&0F9	INSERT "\`{u}"
		&0FA	INSERT "\'{u}"
		&0FB	INSERT "\^{u}"
		&0FC	IF (@#TeX_de):INSERT """u":ELSE:INSERT "\""{u}":ENDIF
		&0FD	INSERT "\'{y}"
		&0FE	BEEP
		&0FF	INSERT "\""{y}"

| LaTeX keymap extensions
| Available after the HOME key has been pressed.
| Note: Many keypresses act differently if there is a selection, making it
|	the argument of the command they generate.

		&800	&27	&132	TeX extras

'		&027	IF (@#TeX_de):INSERT "\grq ":SET (TeX_sp=1):ELSE:LATEX_QUOTE:ENDIF
(		&028	INSERT "\(\)":LEFT:LEFT
,		&02C	IF (@#TeX_de):INSERT "\glq ":SET (TeX_sp=1):ELSE:LATEX_QUOTE:ENDIF

| lowercase letters: similar to HTML keymap in some places
b		&062	IF (@SELHERE):CUT:INSERT "\textbf{":PASTE:CHAR '}':ELSE:INSERT "\textbf{}":LEFT:ENDIF
c		&063	IF (@SELHERE):CUT:INSERT "\textsc{":PASTE:CHAR '}':ELSE:INSERT "\textsc{}":LEFT:ENDIF
d		&064	IF (@SELHERE):CUT:INSERT "\index{":PASTE:CHAR '}':ELSE:INSERT "\index{}":LEFT:ENDIF
e		&065	IF (@SELHERE):CUT:INSERT "\emph{":PASTE:CHAR '}':ELSE:INSERT "\emph{}":LEFT:ENDIF
f		&066	INSERT "%":RETURNNOINDENT:INSERT "\footnote{}":LEFT
i		&069	INSERT "\item ":REM(list item)
l		&06C	IF (@SELHERE):CUT:INSERT "\label{":PASTE:CHAR '}':ELSE:INSERT "\label{}":LEFT:ENDIF
n		&06E	INSERT "\\":RETURN
o		&06F	LATEX_ENVIRONMENT "enumerate":INSERT "  ":REM(ordered list)
p		&070	IF (@SELHERE):CUT:INSERT "\pageref{":PASTE:CHAR '}':ELSE:INSERT "\pageref{}":LEFT:ENDIF
q		&071	LATEX_ENVIRONMENT "quote"
r		&072	IF (@SELHERE):CUT:INSERT "\ref{":PASTE:CHAR '}':ELSE:INSERT
 "\ref{}":LEFT:ENDIF
s		&073	IF (@SELHERE):CUT:INSERT "\textsf{":PASTE:CHAR '}':ELSE:INSERT "\textsf{}":LEFT:ENDIF
t		&074	IF (@SELHERE):CUT:INSERT "\texttt{":PASTE:CHAR '}':ELSE:INSERT "\texttt{}":LEFT:ENDIF
u		&075	LATEX_ENVIRONMENT "itemize":INSERT "  ":REM(unordered list)
v		&076	LATEX_ENVIRONMENT "verbatim"
x		&078	LATEX_ENVIRONMENT

| 1 to 5: section etc.
1		&031	RETURNNOINDENT:INSERT "\section{}":RETURN:LEFT:LEFT
2		&032	RETURNNOINDENT:INSERT "\subsection{}":RETURN:LEFT:LEFT
3		&033	RETURNNOINDENT:INSERT "\subsubsection{}":RETURN:LEFT:LEFT
4		&034	RETURNNOINDENT:INSERT "\paragraph{}":RETURN:LEFT:LEFT
5		&035	RETURNNOINDENT:INSERT "\subparagraph{}":RETURN:LEFT:LEFT
| shift 1 to 2: forward to next (sub)section
| Attempts to support German layout keyboards too.
! (s1)		&021	LATEX_NEXTSECTION
@ (s2)		&040	LATEX_NEXTSUBSECTION
quote (ger-s2)	&022	IF (@#TeX_de):LATEX_NEXTSUBSECTION:ELSE:LATEX_QUOTE
:ENDIF
| ctrl 1 to 2: back to previous (sub)section
c1		&131	LATEX_PREVSECTION
c2		&132	LATEX_PREVSUBSECTION

| uppercase A to Z: macros defined in the document
A		&041	DROPMARK:SEARCHBACK "% key A: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
B		&042	DROPMARK:SEARCHBACK "% key B: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
C		&043	DROPMARK:SEARCHBACK "% key C: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
D		&044	DROPMARK:SEARCHBACK "% key D: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
E		&045	DROPMARK:SEARCHBACK "% key E: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
F		&046	DROPMARK:SEARCHBACK "% key F: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
G		&047	DROPMARK:SEARCHBACK "% key G: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
H		&048	DROPMARK:SEARCHBACK "% key H: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
I		&049	DROPMARK:SEARCHBACK "% key I: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
J		&04A	DROPMARK:SEARCHBACK "% key J: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
K		&04B	DROPMARK:SEARCHBACK "% key K: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
L		&04C	DROPMARK:SEARCHBACK "% key L: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
M		&04D	DROPMARK:SEARCHBACK "% key M: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
N		&04E	DROPMARK:SEARCHBACK "% key N: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
O		&04F	DROPMARK:SEARCHBACK "% key O: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
P		&050	DROPMARK:SEARCHBACK "% key P: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
Q		&051	DROPMARK:SEARCHBACK "% key Q: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
R		&052	DROPMARK:SEARCHBACK "% key R: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
S		&053	DROPMARK:SEARCHBACK "% key S: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
T		&054	DROPMARK:SEARCHBACK "% key T: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
U		&055	DROPMARK:SEARCHBACK "% key U: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
V		&056	DROPMARK:SEARCHBACK "% key V: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
W		&057	DROPMARK:SEARCHBACK "% key W: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
X		&058	DROPMARK:SEARCHBACK "% key X: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
Y		&059	DROPMARK:SEARCHBACK "% key Y: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
Z		&05A	DROPMARK:SEARCHBACK "% key Z: ":CLEARSEL:SELREGION:CRIGHT:ESCAPE:LASTMARK:COPYSEL:CLEARSEL:IF (@CHAROFF -1 = 32):SET (TeX_sp=1):ENDIF
