# Math Speech Strings and Localization

This post describes how OfficeMath speech is localized into multiple (~18) languages. The facility doesn’t handle all Unicode math symbols or all math notations. But it handles the most common symbols and notations. There are two tables that need to be translated into the supported languages: a Unicode math symbol speech table and a math function table.

## Unicode Math Symbol Speech Table

To localize the speech for Unicode characters, perform a binary search by character code in the math symbol speech table for the desired language. The table for English follows. Notably missing are speech strings for U+002D ‘–‘, U+2329 ‘〈’, and U+232A ‘〉’. Input routines replace these nonmathematical characters by the corresponding math symbols U+2212 ‘−‘, U+27E8 ‘⟨’, and U+27E9 ‘⟩’, respectively. The character names in the table don’t always agree with the names in the Unicode Standard. The latter names cannot be changed for stability reasons even if the names are suboptimal or incorrect for math.

! ( ) + / < = > @ [ ] { | } |
, (space: comma gives a small pause)
factorial open paren close paren plus over less than equals greater than , next row, open bracket close bracket open brace vertical bar close brace |
! ( ) + / < = > @ [ ] { | } |

00A6
00AC 00AF 00B0 00B1 00B7 00F7 0131 0237 |
, atop,
not overbar degrees plus or minus dot divided by dotless i dotless j |
¦
¬ ¯ ° ± · ÷ ı ȷ |

0300
0301 0302 0303 0305 0307 0308 |
grave
acute hat tilde bar dot double dot |
̀
́ ̂ ̃ ̅ ̇ ̈ |

03B1
03B2 03B3 03B4 03B5 03B6 03B7 03B8 03B9 03BA 03BB 03BC 03BD 03BE 03BF 03C0 03C1 03C2 03C3 03C4 03C5 03C6 03C7 03C8 03C9 03D1 03D5 03DC 03DD 03F5 |
alpha
beta gamma delta script epsilon zeta eta theta iota kappa lambda mu nu xi omicron pi rho final sigma sigma tau upsilon script phi chi psi omega script theta phi cap digamma digamma epsilon |
α
β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϑ ϕ Ϝ ϝ ϵ |

200B
2016 2026 2032 2044 2045 2046 2146 |
,
double vertical line dot dot dot prime slash , equation , differential d |
‖ … ′ ⁄ ⁅ ⁆ ⅆ |

2190
2191 2192 2193 2194 21D2 21D4 |
left arrow
up arrow goes to down arrow left right arrow implies if and only if |
←
↑ → ↓ ↔ ⇒ ⇔ |

2200
2201 2202 2203 2204 2205 2206 2207 2208 2209 220A 220B 220C 220D 220E 220F |
for all
complement partial there exists there doesn’t exist empty set increment dell element of not element of small element of contains as member doesn’t contain as member small contains as member q e d product |
∀
∁ ∂ ∃ ∄ ∅ ∆ ∇ ∈ ∉ ∊ ∋ ∌ ∍ ∎ ∏ |

2210
2211 2212 2213 2214 2215 2216 2217 2218 2219 221A 221B 221C 221D 221E 221F |
coproduct
sum minus minus or plus dot plus linear divide set minus asterisk operator ring operator bullet square root cube root fourth root proportional to infinity right angle |
∐
∑ − ∓ ∔ ∕ ∖ ∗ ∘ ∙ √ ∛ ∜ ∝ ∞ ∟ |

2220
2221 2222 2223 2224 2225 2226 2227 2228 2229 222A 222B 222C 222D 222E 222F |
angle
measured angle spherical angle divides doesn’t divide parallel to not parallel to logical andd logical or intersection union integral double integral triple integral contour integral surface integral |
∠
∡ ∢ ∣ ∤ ∥ ∦ ∧ ∨ ∩ ∪ ∫ ∬ ∭ ∮ ∯ |

2230
2231 2232 2233 2234 2235 2236 2237 2238 2239 223A 223B 223C 223D 223E 223F |
volume integral
clockwise integral clockwise contour integral anticlockwise contour integral therefore because ratio proportion dot minus excess geometric proportion homothetic tilde operator reverse tilde operator inverted lazy s sine wave |
∰
∱ ∲ ∳ ∴ ∵ ∶ ∷ ∸ ∹ ∺ ∻ ∼ ∽ ∾ ∿ |

2240
2241 2242 2243 2244 2245 2246 2247 2248 2249 224A 224B 224C 224D 224E 224F |
wreath product
not tilde minus tilde asymptotically equal to not asymptotically equal to approximately equal to approximately but not equal to neither approximately nor equal to almost equal to not almost equal to almost equal or equal to triple tilde all equal to equivalent to geometrically equivalent to difference between |
≀
≁ ≂ ≃ ≄ ≅ ≆ ≇ ≈ ≉ ≊ ≋ ≌ ≍ ≎ ≏ |

2250
2251 2252 2253 2254 2255 2256 2257 2258 2259 225A 225B 225C 225D 225E 225F |
approaches the limit
geometrically equal to nearly equals image of or approximately equal to colon equals equals colon, ring in equal to ring equal to corresponds to estimates equiangular to star equals delta equals equals by definition measured by questioned equals |
≐
≑ ≒ ≓ ≔ ≕ ≖ ≗ ≘ ≙ ≚ ≛ ≜ ≝ ≞ ≟ |

2260
2261 2262 2263 2264 2265 2266 2267 2268 2269 226A 226B 226C 226D 226E 226F |
not equal
identical to not identical to strictly equivalent to less than or equal to greater than or equal to less than over equal to greater than over equal to less than but not equal to greater than but not equal to much less than much greater than between not equivalent to not less than not greater than |
≠
≡ ≢ ≣ ≤ ≥ ≦ ≧ ≨ ≩ ≪ ≫ ≬ ≭ ≮ ≯ |

2270
2271 2272 2273 2274 2275 2276 2277 2278 2279 227A 227B 227C 227D 227E 227F |
not less than or equal
not greater than or equal less than or equivalent greater than or equivalent to neither less than nor equivalent to neither greater than nor equivalent to less than or greater than greater than or less than neither less than nor greater than neither greater than nor less than precedes succeeds precedes or equals succeeds or equals precedes or is equivalent to succeeds or is equivalent to |
≰
≱ ≲ ≳ ≴ ≵ ≶ ≷ ≸ ≹ ≺ ≻ ≼ ≽ ≾ ≿ |

2280
2281 2282 2283 2284 2285 2286 2287 2288 2289 228A 228B 228C 228D 228E 228F |
doesn’t precede
doesn’t succeed subset of superset of not subset of not superset of subset or equals superset or equals neither a subset nor equal to neither a superset nor equal to subset of with not equal to superset of with not equal to multiset multiset times multiset union square image of |
⊀
⊁ ⊂ ⊃ ⊄ ⊅ ⊆ ⊇ ⊈ ⊉ ⊊ ⊋ ⊌ ⊍ ⊎ ⊏ |

2290
2291 2292 2293 2294 2295 2296 2297 2298 2299 229A 229B 229C 229D 229E 229F |
square original of
square image of or equal to square original of or equal to square cap square cup circled plus circled minus circled times circled divide circled dot circled ring circled asterisk circled equals circled dash squared plus squared minus |
⊐
⊑ ⊒ ⊓ ⊔ ⊕ ⊖ ⊗ ⊘ ⊙ ⊚ ⊛ ⊜ ⊝ ⊞ ⊟ |

22A0
22A1 22A2 22A3 22A4 22A5 22A6 22A7 22A8 22A9 22AA 22AB 22AC 22AD 22AE 22AF |
squared times
squared dot right tack left tack down tack up tack reduces to models results in forces triple vertical bar right turnstile double vertical bar double right turnstile does not prove doesn’t result in doesn’t force negated double vertical bar double right turnstile |
⊠
⊡ ⊢ ⊣ ⊤ ⊥ ⊦ ⊧ ⊨ ⊩ ⊪ ⊫ ⊬ ⊭ ⊮ ⊯ |

22B0
22B1 22B2 22B3 22B4 22B5 22B6 22B7 22B8 22B9 22BA 22BB 22BC 22BD 22BE 22BF |
precedes under relation
succeeds under relation is a normal subgroup of contains as normal subgroup is a normal subgroup of – or equals contains as normal subgroup of or equals original of image of multimap hermeetian conjugate matrix intercalate xor nand nor right angle with arc right triangle |
⊰
⊱ ⊲ ⊳ ⊴ ⊵ ⊶ ⊷ ⊸ ⊹ ⊺ ⊻ ⊼ ⊽ ⊾ ⊿ |

22C0
22C1 22C2 22C3 22C4 22C5 22C6 22C7 22C8 22C9 22CA 22CB 22CC 22CD 22CE 22CF |
n-ary logical andd
n-ary logical or n-ary intersection n-ary union diamond dot star division times bowtie left normal factor semidirect product right normal factor semidirect product left semidirect product right semidirect product reverse tilde equals curly logical or curly logical andd |
⋀
⋁ ⋂ ⋃ ⋄ ⋅ ⋆ ⋇ ⋈ ⋉ ⋊ ⋋ ⋌ ⋍ ⋎ ⋏ |

22D0
22D1 22D2 22D3 22D4 22D5 22D6 22D7 22D8 22D9 22DA 22DB 22DC 22DD 22DE 22DF |
double subset
double superset double intersection double union pitchfork equal and parallel to dotted less than dotted greater than very much less than very much greater than less than equals or greater than greater than equals or less than equals or less than equals or greater than equals or precedes equals or succeeds |
⋐
⋑ ⋒ ⋓ ⋔ ⋕ ⋖ ⋗ ⋘ ⋙ ⋚ ⋛ ⋜ ⋝ ⋞ ⋟ |

22E0
22E1 22E2 22E3 22E4 22E5 22E6 22E7 22E8 22E9 22EA 22EB 22EC 22ED 22EE 22EF |
doesn’t precede or equal
doesn’t succeed or equal not square image of or equal to not square original of or equal to square image of or not equal to square original of or not equal to less than but not equivalent to greater than but not equivalent to precedes but not equivalent to succeeds but not equivalent to not normal subgroup of does not contain as normal subgroup not normal subgroup of or equal to does not contain as normal subgroup or = vertical ellipsis midline horizontal ellipsis |
⋠
⋡ ⋢ ⋣ ⋤ ⋥ ⋦ ⋧ ⋨ ⋩ ⋪ ⋫ ⋬ ⋭ ⋮ ⋯ |

22F0
22F1 22F2 22F3 22F4 22F5 22F6 22F7 22F8 22F9 22FA 22FB 22FC 22FD 22FE 22FF |
up right diagonal ellipsis
down right diagonal ellipsis element of with long horizontal stroke element of w vertical bar at end of stroke small element of w vertical bar at end of stroke dotted element of overbar element of small overbar element of underbar element of double stroke element of long-stroke contains contains w vertical bar at end of stroke small contains w vertical bar at end of stroke overbar contains small overbar contains z notation bag membership |
⋰
⋱ ⋲ ⋳ ⋴ ⋵ ⋶ ⋷ ⋸ ⋹ ⋺ ⋻ ⋼ ⋽ ⋾ ⋿ |

2308
2309 230A 230B 2329 232A 23B4 23B5 23DC 23DD 23DE 23DF 23E0 23E1 |
open ceiling
close ceiling open floor close floor open angle bracket close angle bracket over bracket under bracket over paren under paren over brace under brace over shell under shell |
⌈
⌉ ⌊ ⌋ 〈 〉 ⎴ ⎵ ⏜ ⏝ ⏞ ⏟ ⏠ ⏡ |

24AD
2502 252C 2534 2581 2588 2592 25A0 25AD 27E6 27E7 27E8 27E9 3016 3017 |
root (UnicodeMath)
vertical bar lower limit upper limit underbar equation array (UnicodeMath) of (UnicodeMath) matrix (UnicodeMath) boxed formula (UnicodeMath) open white square bracket close white square bracket open angle bracket close angle bracket , (UnicodeMath “begin”) , (UnicodeMath “end”) |
⒭
│ ┬ ┴ ▁ █ ▒ ■ ▭ ⟦ ⟧ ⟨ ⟩ 〖 〗 |

## Math Function Speech Table

The index of a string in the following table can be used as a language token. These speech tokens can be used in a localized table to retrieve the corresponding strings in the localized language. OfficeMath supports about 18 languages this way. This approach doesn’t support speaking math in a different order than in English. The aim is to provide understandable speech even if it isn’t the most elegant.

Speech string |
Meaning |

accent
box boxed formula brackets brackets with separators equation array fraction function left sub superscript lower limit matrix n ary expression (null string place holder: no speech) overbar phantom root slashed fraction stack stretch stack subscript sub superscript superscript underbar upper limit |
First 24 entries are names of LineServices math objects and must be in the order of tomAccent..tomUpperLimit |

half, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, halves, thirds, fourths, fifths, sixths, sevenths, eighths, ninths, tenths | Ordinals. Used for simple fractions and nested parens |

cosine, cotangent, cosecant, secant, sine, tangent, arccosine, arccotangent, arccosecant, arcsecant, arcsine, arctangent | Trigonometric functions |

open paren, open second paren, open third paren, open fourth paren, open fifth paren, open sixth paren, open seventh paren, open eighth paren, open ninth paren, open tenth paren | Open parentheses |

close paren, close second paren, close third paren, close fourth paren, close fifth paren, close sixth paren, close seventh paren, close eighth paren, close ninth paren, close tenth paren | Close parentheses |

absolute value
argument a. smash base base text bold bold fraktur bold italic bold script by cap column cross cubed |
Lead in for absolute value object
Second arg of function object Kind of phantom object First arg of sub/superscript object Second argument of ruby object Math alphanumeric qualifier Math alphanumeric qualifier Math alphanumeric qualifier Math alphanumeric qualifier <row> “by” <column> matrix Upper-case modifier Part of “end column” x if followed by math bold Simple exponent |

degree
denominator determinant double-struck d smash element empty empty equation end end absolute value end equation equation fraktur from function name |
Radical degree
Lead in for compound denom Determinant object Math alphanumeric qualifier Kind of phantom object Matrix element Empty argument Empty equation (math zone) Verb to end object or argument End compound absolute value End equation (math zone) E.g., in “end equation” Math alphanumeric qualifier Lower limit lead in if upper limit First argument of function object |

h smash
horizontal phantom hyperbolic integral integrand inverse limit as lower element equation monospace numbered equation numerator over , phantom smash product quantity radicand ruby ruby text |
Kind of phantom object
Kind of phantom object Trig modifier Integral n-ary object Third argument for integral Trig modifier Lead words for lim function Name of lower element in stack Lead in for equation (math zone) Math alphanumeric qualifier Numbered equation Start of compound numerator Lower limit lead in; no upper limit Pause Kind of phantom object Product n-ary object End absolute value to a power Radical radicand Object with phonetic annotation Phonetic annotation text |

sans-serif
sans-serif bold sans-serif italic sans-serif bold italic squared script start sub summand summation to to the upper element upright vertical phantom with |
Math alphanumeric qualifier
Math alphanumeric qualifier Math alphanumeric qualifier Math alphanumeric qualifier Simple exponent Math alphanumeric qualifier Verb to start object or argument Subscript lead in Third argument of summation Summation n-ary object Lead in to n-ary upper limit Lead in to general superscript Name of upper element in stack Math alphanumeric qualifier Kind of phantom object As in “base” … “with” “upper limit” |

## 1 comment

Fascinating table! Although it is arguably a bit off topic, do you know how the ⊹ symbol is (or has been) used? Is it a unary operator that maps a matrix to its conjugate transpose? If so, is it a prefix or a postfix operator?