#   3.1.1 page 21

Marks & Spencer
,m>ks `& ,sp;er

AT&T
,,at`&,t

B&B
,b`&,b

&c (etc)
`&c "<etc">

#   3.2.1 page 21
Road signs of → and ← mark detours.
,road signs ( ;|o & ;|{ m>k det|rs4

Put a ↑ on the map to indicate north.
,put a ;|+ on ! map to 9dicate nor?4

The ENTER key is the one with ↵ on it.
,! ,,5t} key is ! "o ) ;|4% on x4

#   3.3.1 page 21

M*A*S*H
,m"9,a"9,s"9,h

Spelling words marked with an * have a silent letter.
,spell+ ~ws m>k$ ) an "9 h a sil5t lr4

To access your voicemail, strike *98 on your telephone.
,to a3ess yr voicemail1 /rike "9#ih on yr teleph"o4

Speed * time = distance.
,spe$ "9 "t "7 4t.e4

showing *emphasis* in email messages
%{+ "9emphasis"9 9 email messages

Irene V***
,ir5e ,v"9"9"9

foul language such as *#*$!* or with omitted letters as in D***
f|l language s* z "9_?"9`s6"9 or ) omitt$ lrs z 9 ,d"9"9"9

New World Hotel ****
,new ,_w ,hotel "9"9"9"9

brothers Jed* and Ben** Chan *born in Hong Kong **born in Canada
bro!rs ,j$"9 & ,b5"9"9 ,*an "9born 9 ,h;g ,k;g "9"9born 9 ,canada

Authors: Roy Brown,† Shirley Jones, Walter Smith,† Douglas White
,au?ors3 ,roy ,br{n1`,? ,%irley ,j"os1 ,walt} ,smi?1`,? ,d|glas ,:ite

The painter included daisies,* white roses† and ivy‡ in the portrait. *symbolizing innocence †symbolizing virtue ‡symbolizing fidelity
,! pa9t} 9clud$ daisies1"9 :ite roses`,? & ivy`,} 9 ! portrait4 "9symboliz+ 9noc;e `,?symboliz+ virtue `,}symboliz+ fidel;y

–dash*–or parentheses (round brackets†)
,-da%"9,-or p>5!ses "<r.d brackets`,?">

Rev. Robert Lowin†
,rev4 ,rob}t ,l{9`,?

* * *
"9 "9 "9

#   3.4.1 page 23

##spo͞on
##sp@-<oo>n

##masssun
##mass;;5<sun>

#   3.5.1 page 24

Nutritional considerations include: • carbohydrates • protein • fat • cholesterol • fiber • sodium
,nutri;nal 3sid}a;ns 9clude3 _4 c>bohydrates _4 prote9 _4 fat _4 *ole/}ol _4 fib} _4 sodium

#   3.6.1 page 24

~script
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
My favourite pets are my dog^ my cat ^ my hamster. My job ^ to feed them.
`7,my fav|rite pets >e my dog`5 my cat `5 my ham/}4 ,my job `5 to fe$ !m4`'

#   3.7.1 page 25

FLASH@lightning.net
,,fla%`ali<tn+4net

Sell the candies @ 10¢ each.
,sell ! c&ies `a #aj`c ea*4

#   3.8.1 page 25

Copyright © 2009
,copy"r ~c #bjji

©2009
~c#bjji

QuickTax™ from Intuit® Canada Limited
,quick,tax~t f ,9tuit~r ,canada ,limit$

#   3.9.1 page 25

With love, XXOO
,) love1 ,,xxoo

Sealed with a X
,s1l$ ) a ;,x

Illiterate people usually signed their name with an X.
,illit}ate p usually sign$ _! "n ) an ;,x4

a 4x4 vehicle
a #dx#d vehicle

a 2×4 board
a #b"8#d bo>d

15×15×20 cm
#ae"8#ae"8#bj cm

The room is 12 ft. × 16 ft.
,! room is #ab ft4 "8 #af ft4

a 10× lens
a #aj"8 l5s

Labrador × Poodle
,labrador "8 ,poodle

#   3.10.1 page 26

10¢
#aj`c

99c
#ii;c

DM8
,,dm#h
$6
`s#f

A$40
,a`s#dj

$19.95
`s#ai4ie

$23,783,200
`s#bc1ghc1bjj

$2bn (2 billion dollars)
`s#b;bn "<#b billion doll>s">

US$
,,us`s

$X
`s,x

The $ rose.
,! `s rose4

$hop for $aving$
`shop = `sav+`s

20$00 (20 escudos)
#bj`s#jj "<#bj escudos">

€75
`e#ge

30,00€
#cj1jj`e

€ and £ accepted
`e & `l a3ept$

6€50
#f`e#ej

₣1
`f#a
1 € = 6.55957₣
#a `e "7 #f4eeieg`f

5F coin
#e,f co9

₦0.20 = 20 kobo
`n#j4bj "7 #bj kobo

£24
`l#bd

Ir£
,ir`l

£3m (3 million pounds)
`l#cm "<#c million p.ds">

the £ rose
! `l rose

£X @l,x

£7 8s 9d
`l#g #hs #i;d

£7/8/9
`l#g_/#h_/#i

£7-8-9
`l#g-#h-#i

2p coin
#bp co9

R25
,r#be

R5,70
,r#e1gj

¥360
`y#cfj

#   3.11.1 page 27

60 °
#fj ~j

21°C
#ba~j,c

70° F
#gj~j ;,f

°C
~j,c

X°
,x~j

250°, 350°, or 450°?
#bej~j1 #cej~j1 or #dej~j8

33°51′35.9″S
#cc~j#ea7#ce4i77,s

151° 12' 40" E
#aea~j #ab' #dj,7 ;,e

#   3.12.1 page 28

living room: pioneer blue
liv+ room3 pione} blue

dining room: 〃 〃
d9+ room3 "1 "1

kitchen: 〃 yellow
kit*53 "1 yell{

Mon 10-12 study 2-4 Eng pt1
,mon #aj-#ab /udy #b-#d ,5g pt#a

Tues 〃 〃 〃 〃 pt2
,tues "1 "1 "1 "1 pt#b

Wed 〃 Science 〃 Art
,w$ "1 ,sci;e "1 ,>t

Anne – village girl
,anne ,- village girl

Joan – 〃 〃
,joan ,- "1 "1

~end

#   3.13.1 page 28

#   3.14.1 page 29

#   3.15.1 page 30
6′ #f7 9″ #i77
5′10″ #e7#aj77 4' 11" #d' #aa,7
X″ long ,x77 l;g

#   3.16.1 page 30
Amy Florence SAMPSON ♀ 1881-1956
Carlyle Kennedy SAMPSON ♂ 1885-1975
,amy ,flor;e ,,sampson ^x #ahha-#aief
,c>lyle ,k5n$y ,,sampson ^y #ahhe-#aige

#   3.17.1 page 31
as easy as 2 + 2 = 4
z easy z #b "6 #b "7 #d
corn − c + b = born
corn "- ;c "6 ;b "7 born
5 is 25% of 20 (5 ÷ 20 × 100)
#e is #be.0 ( #bj "<#e "/ #bj "8 #ajj">
positron < posi(tive) + (elec)tron
positron @< posi"<tive"> "6 "<elec">tron
+44 1234 567890 (UK phone number)
"6#dd"abcd"efghij "<,,UK ph"o numb]">
a frame with an opening 7″W×5″H
a frame ) an op5+ #g77,W"8#e77,H
a map with a scale of 1:500,000
a map ) a scale ( #a3#ejj1jjj
hand : arm :: foot : leg
h& 3 >m 33 foot 3 leg

#   3.18.1 page 32
B♭ trumpet ,b#< trumpet
The C♯ pavilion is named for Cecil Sharp.
,! ,c#% pavilion is "nd = ,cecil ,%>p4
The scale of G major includes the note F♯.
,! scale ( ;,g major 9cludes ! note ,f#%4
A jazz 2-5-1 progression in C minor could be Dm7♭5 - G7♯9 - Cm7.
,a jazz #b-#e-#a progres.n 9 ;,c m9or cd 2 ,dm#g#<#e - ,g#g#%#i - ,cm#g4
The ♮ sign on a note cancels the effect of any ♯ or ♭ in the key signature.
,! #* sign on a note c.els ! e6ect ( any #% or #< 9 ! key signature4
the dominant chord g-b♮-d
! dom9ant *ord ;g-b#*-;d
... we obtain the somewhat more transparent relation
𝑋♭(𝑌) = 〈𝑋, 𝑌〉
for all vectors X and Y.
444 we obta9 ! "s:at m transp>5t
rela;n
,x;9#<"<,y"> "7 @<,x1 ,y@>
= all vectors ;,x & ;,y4

#   3.19.1 page 33
#4 _?#d Apt. #D ,apt4 _?,d
20# bag of flour #bj_? bag ( fl\r
Press the # key on the telephone.
,press ! _? key on ! teleph"O4

#   3.20.1 page 33
¶3 ^p#c ¶C ^p,c ¶g ^pg
Click on the ¶ icon on the toolbar.
,click on ! ^p icon on ! toolb>4
§5 ^s#e §K ^s,k
§d ^sd §§ 5-15 ^s^s #e-#ae

#   3.21.1 page 33
5% #e.0 95 % #ie .0
a 50% increase a #ej.0 9cr1se
% of population .0 ( popula;n

#   3.22.1 page 34

#   3.23.1 page 35

#   3.24.1 page 36
Wm ,w;9m H2O ,h;5#b,o
3 yd3 #c yd;9#c 4m2 #dm9#b
vitamin B12 vitam9 ,b;5#ab
born in 1682.3 born 9 #afhb49#c
born in 1982.c born 9 #aihb49c
America3 (America Cubed–name of a sailing ship)
,am]ica;9#c "<,Am]ica ,cub$,-"n ( a sail+ %ip">
an earthquake measuring 6.5MW
an e>?quake m1sur+ #f4e,m5,w
the clarion1 horn
1 clarion: loud and clear
! cl>ion;9#a horn
;9#a cl>ion3 l\d & cle>

#   3.25.1 page 36
head n. the top part of the body ... –by a ~ by the length of the animal's head, as in horse racing –~ over heels tumbling as in a somersault
~ vt. to be in charge of ...
h1d ;n4 ! top "p ( ! body 444 ,-^7by a @9^' by ! l5g? ( ! animal's h1d1 z 9 horse rac+ ,-^7@9 ov] heels^' tumbl+ z 9 a som]sault
@9 vt4 to 2 9 *>ge ( 444
An economist would write x ~ y to indicate that a consumer is indifferent between the goods x and y.
,an economi/ wd write ;x @9 ;y to 9dicate t a 3sum] is 9di6]5t 2t ! gds ;x & ;y4
http://www.business.com/~yourname
http3_/_/www4busi;s4com_/@9y\r"n
Some people use the tilde around words to indicate an inflected tone of voice or singing as in ~Happy birthday to you~
,"s p use ! tilde >.d ^ws to 9dicate an 9flect$ t"o ( voice or s++ z 9 @9,happy bir?"d to y\@9

#   3.26.1 page 37

#   3.27.1 page 39
