There are two separate tasks here: making your keyboard produce the various Unicode symbols, and making those symbols meaningful to LaTeX.
- Producing Unicode symbols from your keyboard
If you're on a Mac, make a .keylayout file, put it in the ~/Library/Keyboard Layouts directory, then log out and back in again. Your new keyboard layout should now appear in System Preferences > Language & Text > Input Sources.
How does one create this keylayout? One option is to use an editor, such as Ukelele. I ended up tweaking mine by hand. Keylayouts are written in XML, in accordance with a specification given by Apple. My keylayout is called MathUnicode.keylayout, and can be downloaded here. It is based on the British keylayout. I give my keylayout a custom icon by saving MathUnicode.icns(which can be downloaded here) in the same directory.
Listed below are all of the key bindings in my layout. Several feature dead key sequences; for instance, the sequence alt--> (which produces ⟶) is produced by holding down alt while typing -->.
α (alpha) alta
β (beta) altb
γ (gamma) altg
Γ (Gamma) altG
δ (delta) altd
Δ (Delta) altD
ε (epsilon) alte
ζ (zeta) altz
η (eta) alth
θ (theta) alto
Θ (Theta) altO
ι (iota) alti
κ (kappa) altk
λ (lambda) altl
Λ (Lambda) altL
μ (mu) altm
ν (nu) altn
ξ (xi) altx
Ξ (Xi) altX
π (pi) altp
Π (Pi) altP
ρ (rho) altr
σ (sigma) alts
Σ (Sigma) altS
τ (tau) altt
υ (upsilon) altu
φ (phi) (altf
Φ (Phi) altF
χ (chi) altc
ψ (psi) alty
Ψ (Psi) altY
ω (omega) altw
Ω (Omega) altW
ℂ (complex numbers) altC
ℕ (naturals) altN
ℚ (rationals) altQ
ℝ (reals) altR
ℤ (integers) altZ
” (closing double quotes) alt'
“ (opening double quotes) alt`
¶ (paragraph) alt§
° (degrees) alt±
… (ellipsis) alt;
⌊ (lower left bracket) alt[
⌋ (lower right bracket) alt]
⌈ (upper left bracket) altshift[
⌉ (upper right bracket) altshift]
〈 (left angled bracket) alt<
〉(right angled bracket) alt>
⟦ (double left bracket) alt|[
⟧ (double right bracket) alt|]
↑ (up arrow) alt6
↓ (down arrow) alt7
⇑ (double up arrow) altshift6
⇓ (double down arrow) altshift7
← (left arrow) alt<-
→ (right arrow) alt->
↔ (left right arrow) alt<->
⇐ (double left arrow) alt<=
⇒ (double right arrow) alt=>
⇔ (double left right arrow) alt<=>
⟵ (long left arrow) alt<--
⟶ (long right arrow) alt-->
⟷ (long left right arrow) alt<-->
⟸ (long double left arrow) alt<==
⟹ (long double right arrow) alt==>
⟺ (long double left right arrow) alt<==>
↦ (maps-to) alt|->
⤇ (double maps-to) alt|=>
⟼ (long maps-to) alt|-->
⟾ (long double maps-to) alt|==>
⇀ (right harpoon) alt--`
⇝ (squiggly right arrow) alt~>
¬ (logical not) alt~
∨ (logical disjunction) alt</kbd>
∧ (logical conjunction) alt/</kbd>
∀ (for all) altA
∃ (exists) altE
∄ (does not exist) alt/E
.(ldotp, the dot in ∃x. p) alt,
⊦ (turnstile) alt|-
⊩ (double turnstile) alt||-
⊧ (models) alt|=
⟂ (bottom) alt _ | or alt| _
∅ (empty set) alt/0
∈ (member of) alt:
∉ (not member of) alt/:
∪ (union) altU
∩ (intersection) altI
⫛ (does not intersect) alt/I
⊂ (strict subset) alt(
⊃ (strict superset) alt)
⊆ (subset or equal) alt _ (
⊇ (superset or equal) alt _ )
∗ (centred asterisk) alt*
÷ (division) altshift/
× (times) alt8
| (bar) alt|
‖ (double bar) alt||
∤ (not bar) alt/|
◁ (left triangle) alt<|
▷ (right triangle) alt|>
◇ (diamond) alt<>
∘ (circle) alt0
· (centred dot) alt.
⊗ (circled times) alt08
⊛ (circled asterisk) alt0*
⊖ (circled minus) alt0-
⊕ (circled plus) alt0+
⊘ (circled slash) alt0/
⊙ (circled dot) alt0.
≝ (defined equal) altshift=
≠ (not equal) alt/= or alt=/
≡ (equivalent) alt==
≈ (approx) alt~~
≤ (less than or equal) alt _ < or alt< _
≥ (greater than or equal) alt _ >
∴ (therefore) altT
∵ (because) altB
∞ (infinity) alt9
∇ (nabla) altV
² (squared) altshift2
³ (cubed) altshift3
√ (root) altv
I have used this set-up for several years now, and am very happy with it. It is particularly useful when composing mathematical emails, where LaTeX is not available. The only snag I have found is that some keyboard shortcuts that use alt no longer work. To tackle this, I configured the keyboard shortcut cmdspace so that I can switch back to my default British layout whenever necessary.
- Getting LaTeX to understand Unicode symbols
Note: you're probably better off using XeTeX if you want Unicode in your LaTeX source files. But let's suppose you want to stick with vanilla LaTeX for the time being.
I save the following in the file MathUnicode.sty and include the MathUnicode package in all my LaTeX files.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Created by John Wickerson, 07 Jan 2010. % Updated 28 Mar 2010. % For use with the MathUnicode keyboard layout. \RequirePackage[T1]{fontenc} \RequirePackage[utf8x]{inputenc} \RequirePackage{amssymb} \RequirePackage{stmaryrd} \DeclareUnicodeCharacter{183}{\cdot} \DeclareUnicodeCharacter{915}{\ensuremath{\Gamma}} \DeclareUnicodeCharacter{916}{\ensuremath{\Delta}} \DeclareUnicodeCharacter{918}{\ensuremath{\Zeta}} \DeclareUnicodeCharacter{920}{\ensuremath{\Theta}} \DeclareUnicodeCharacter{923}{\ensuremath{\Lambda}} \DeclareUnicodeCharacter{926}{\ensuremath{\Xi}} \DeclareUnicodeCharacter{928}{\ensuremath{\Pi}} \DeclareUnicodeCharacter{931}{\ensuremath{\Sigma}} \DeclareUnicodeCharacter{933}{\ensuremath{\Upsilon}} \DeclareUnicodeCharacter{934}{\ensuremath{\Phi}} \DeclareUnicodeCharacter{935}{\ensuremath{\Chi}} \DeclareUnicodeCharacter{936}{\ensuremath{\Psi}} \DeclareUnicodeCharacter{937}{\ensuremath{\Omega}} \DeclareUnicodeCharacter{945}{\ensuremath{\alpha}} \DeclareUnicodeCharacter{946}{\ensuremath{\beta}} \DeclareUnicodeCharacter{947}{\ensuremath{\gamma}} \DeclareUnicodeCharacter{948}{\ensuremath{\delta}} \DeclareUnicodeCharacter{949}{\ensuremath{\epsilon}} \DeclareUnicodeCharacter{950}{\ensuremath{\zeta}} \DeclareUnicodeCharacter{951}{\ensuremath{\eta}} \DeclareUnicodeCharacter{952}{\ensuremath{\theta}} \DeclareUnicodeCharacter{953}{\ensuremath{\iota}} \DeclareUnicodeCharacter{954}{\ensuremath{\kappa}} \DeclareUnicodeCharacter{955}{\ensuremath{\lambda}} \DeclareUnicodeCharacter{956}{\ensuremath{\mu}} \DeclareUnicodeCharacter{957}{\ensuremath{\nu}} \DeclareUnicodeCharacter{958}{\ensuremath{\xi}} \DeclareUnicodeCharacter{959}{\ensuremath{\omicron}} \DeclareUnicodeCharacter{960}{\ensuremath{\pi}} \DeclareUnicodeCharacter{961}{\ensuremath{\rho}} \DeclareUnicodeCharacter{963}{\ensuremath{\sigma}} \DeclareUnicodeCharacter{964}{\ensuremath{\tau}} \DeclareUnicodeCharacter{965}{\ensuremath{\upsilon}} \DeclareUnicodeCharacter{966}{\ensuremath{\phi}} \DeclareUnicodeCharacter{967}{\ensuremath{\chi}} \DeclareUnicodeCharacter{968}{\ensuremath{\psi}} \DeclareUnicodeCharacter{969}{\ensuremath{\omega}} \DeclareUnicodeCharacter{8214}{\parallel} \DeclareUnicodeCharacter{8450}{\mathbb{C}} \DeclareUnicodeCharacter{8470}{\mathbb{N}} \DeclareUnicodeCharacter{8474}{\mathbb{Q}} \DeclareUnicodeCharacter{8477}{\mathbb{R}} \DeclareUnicodeCharacter{8484}{\mathbb{Z}} \DeclareUnicodeCharacter{8614}{\mathbin{\mapsto}} \DeclareUnicodeCharacter{8656}{\Leftarrow} \DeclareUnicodeCharacter{8657}{\Uparrow} \DeclareUnicodeCharacter{8658}{\Rightarrow} \DeclareUnicodeCharacter{8659}{\Downarrow} \DeclareUnicodeCharacter{8669}{\rightsquigarrow} \newcommand{\eqdef}{\stackrel{{\scriptsize\rm def}}{=}} \DeclareUnicodeCharacter{8797}{\eqdef} \DeclareUnicodeCharacter{8870}{\vdash} \DeclareUnicodeCharacter{8873}{\Vdash} \DeclareUnicodeCharacter{8871}{\models} \DeclareUnicodeCharacter{9121}{\lceil} \DeclareUnicodeCharacter{9123}{\lfloor} \DeclareUnicodeCharacter{9124}{\rceil} \DeclareUnicodeCharacter{9126}{\rfloor} \DeclareUnicodeCharacter{9655}{\triangleright} \DeclareUnicodeCharacter{9665}{\triangleleft} \DeclareUnicodeCharacter{9671}{\diamond} \DeclareUnicodeCharacter{9675}{\circ} \DeclareUnicodeCharacter{10178}{\bot} \DeclareUnicodeCharacter{10214}{\llbracket} % needs stmaryrd \DeclareUnicodeCharacter{10215}{\rrbracket} % needs stmaryrd \DeclareUnicodeCharacter{10229}{\longleftarrow} \DeclareUnicodeCharacter{10230}{\longrightarrow} \DeclareUnicodeCharacter{10231}{\longleftrightarrow} \DeclareUnicodeCharacter{10232}{\Longleftarrow} \DeclareUnicodeCharacter{10233}{\Longrightarrow} \DeclareUnicodeCharacter{10234}{\Longleftrightarrow} \DeclareUnicodeCharacter{10236}{\longmapsto} \DeclareUnicodeCharacter{10238}{\Longmapsto} % needs stmaryrd \DeclareUnicodeCharacter{10503}{\Mapsto} % needs stmaryrd \DeclareUnicodeCharacter{10971}{\mathrel{\not\hspace{-0.2em}\cap}} \DeclareUnicodeCharacter{65294}{\ldotp} \DeclareUnicodeCharacter{65372}{\mid}