[tex-eplain] emulating a \description environment

Guy Worthington guyw@multiline.com.au
Mon, 26 Feb 2001 11:20:43 +0800


This is a multi-part message in MIME format.

------=_NextPart_000_0005_01C09FE6.289A01D0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Thanks Daniel for a very easy to read analysis of the paragraph
annotations macro.  I've added all your improvements to my code
snippet.  

The paragraph shaping of the first paragraph is satisfactory, however
I'm still not happy with the result.  If I must have a ragged edge
(because my paragraph is too narrow) I'd prefer it to be ragged-right,
not as it is displayed in my .dvi.

%-annot1.tex-------------------------------------------------
\hsize=30pc  \vsize=50pc
\font\KeywordFont=cmsltt10

\catcode`\"=\active
\catcode`\|=\active
\gdef|{\begingroup\it \let|=\endgroup} % for marking up a variable
\gdef"{\begingroup\tt  \let"=\endgroup} % for marking up literals
\def\keyword#1{{\KeywordFont#1\/}}   % Keyword Font

\parindent0pt \clubpenalty10000 \widowpenalty10000
\def\Annotation#1&{%
     \hangindent10em\hangafter0 
     \llap{\hbox to10em{#1\hss}}\ignorespaces}

\everypar={\Annotation}
\def\\{\leavevmode}

\\{\bf Method} & {\bf Description}

\vskip1\jot

\\|wait|() & There are three overloaded versions of this method.
This version has no parameters and suspends the current thread
until the |notify|() method for the object to which the |wait|()
belongs, is called.  Note that when |wait|() is called, it release
the synchronization lock on the object, so another method or code
block synchronized on the same object can be called.  This will
allow other threads to call |wait|() for the same object.

\\ & Since all version of the |wait|() method can throw an
|InteruptedException|, you must call it in a |try| block with a
|catch| block for this exception, or indicate that the method
calling it throws this exception.

\\|wait|(\keyword{long} |timeout|) & This version suspends the
current thread until the number of milliseconds specified by the
argument has expired, or until the |notify|() method for the
object to which the |wait|() method belongs is called, if that
occurs sooner.

\\\vtop to 0pt{\hbox{|wait|(\keyword{long} |timeout|,}
               \hbox{\keyword{int} |nanos|}\vss} & This version works
in the same way as the previous version, except that the time interval
is specified by two arguments, the first in milliseconds and the
second in nanoseconds.

\\|notify|() & This will restart the thread that has called the
|wait|() method for the object to which the |notify|() method
belongs.  If no threads are waiting, the method does nothing.

\\|notifyAll|() & This will restart all threads that have called
the |wait|() for the objects to which the |notifyAll|() method
belongs.

\bye
%----------------------------------------------------------

------=_NextPart_000_0005_01C09FE6.289A01D0
Content-Type: application/octet-stream;
	name="annot1.dvi"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="annot1.dvi"

9wIBg5LAHDsAAAAAA+gbIFRlWCBvdXRwdXQgMjAwMS4wMi4yNjoxMDQwiwAAAAEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////jZ/yAACOoAJYAACNoP2yAACNjY3zFxryIlYA
CgAAAAoAAAAGY21ieDEwwk1ldGhvkFHHZI6OkWQACkRlc2NyaXB0aW9ujp8PAACNjY3zJP0AJzoA
CgAAAAoAAAAGY210aTEwz3dhaXTzAEvxYHkACgAAAAoAAAAFY21yMTCrKCmOjpFkAApUaGVyZZYE
YWhhcmWTdGhyZWWTb5W443aTZXJsb2FkZWSbBGFodpNlcnNpb25zmG9mmHRoaXOYbWV0aG+QRx1k
LpEHlgFUaGlzjqQMAACNkWQACnaauONlcnNpb26WA2jfaGFzk25vk3BhcmFtZXRlcnOTYW5kk3N1
c3CQRx1lbmRzk3RoZZNjdXJyZW6YdJN0aHJlYWSOoY2RZAAKdW6auON0aWyWA1EzdGhlk89ub3Rp
ZnmrKCmTbWV0aG+QRx1kk2ZvcpN0aGWTb2KRAI44amVjdJN0b5N3aGljmGiTdGhlk893YWl0qygp
jqGNkWQACmKQRx1lbG9uZ3MsmwMg+mlzlgMT42NhbGxlZC6RBFv3Tm90ZZN0aGF0k3doZW6Tz3dh
aXSrKCmTaXOTY2FsbGVkLJhpdJNyZWxlYXNljqGNkWQACnRoZZYCZVBzeW5jmrjjaHJvbml6YXRp
b26TbG+QRx1jmGuTb26TdGhlk29ikQCOOGplY3QskQKVUXNvk2Fub3RoZXKTbWV0aG+QRx1kk29y
jqGNkWQACmNvlUcdZGWbA9+WYmxvk2OVuONrmHN5bmOTaHJvbml6ZWSYb26YdGhlmHNhbWWYb2KR
AI44amVjdJhjYW6YYpBHHWWYY2FsbGVkLo6hjZFkAApUaGlzlgT+bXdpbGyTYWxsb5C443eTb3Ro
ZXKTdGhyZWFkc5N0b5NjYWxsk893YWl0qygpk2ZvcpN0aGWTc2FtZY6hjZFkAApvYpEAjjhqZWN0
Lo6hjZFkAApTaW5jZZYChmVhbGyTdpq442Vyc2lvbpNvZpN0aGWTz3dhaXSrKCmTbWV0aG+QRx1k
k2NhbpN0aHJvmHeTYW6Tz0ludGVydXB0LY6hjZFkAApllv99J2RFeGOTZXB0aW9uqyyRBPyweZW4
4291mwSoBG2TdXN0mGNhbGyYaXSYaW6YYZjPdHJ5mKtibG+QRx1jk2uYd2l0aJhhmM9jkf99J2F0
Y2iOoY2RZAAKq2Jsb5pHHWOQuONrlgMRb2ZvcpN0aGlzk2V4Y2VwdGlvbiyRAx8Db3KTaW5kaWNh
dGWTdGhhdJN0aGWTbWV0aG+YZJNjYWxsaW5njqGNkWQACml0lgNVVXRocm+QuON3c5N0aGlzk2V4
Y2VwdGlvbi6OoY2Njc93YWl0qyjzIN/qPHgACgAAAAoAAAAIY21zbHR0MTDLbG9uZ5EEfaLPdGlt
ZZH/fSdvdXSrKY6OkWQAClRoaXOWA8Rtdpq442Vyc2lvbpNzdXNwkEcdZW5kc5N0aGWTY3VycmVu
mHSTdGhyZWFkk3VumHRpbJN0aGWTbph1bZhikEcdZXKOoY2RZAAKb2aWBMcXbWlsbGlzZWNvbmRz
k3NwkEcdZWNpDGVkk2KauON5k3RoZZNhcmd1bWVumHSTaGFzk2V4cGlyZWQskQUjiG9yjqGNkWQA
CnVumrjjdGlslgNRM3RoZZPPbm90aWZ5qygpk21ldGhvkEcdZJNmb3KTdGhlk29ikQCOOGplY3ST
dG+Td2hpY5hok3RoZZPPd2FpdKsoKY6hjZFkAAptZXRob5VHHWSbA1VVYpNlbG9uZ3OYaXOYY2Fs
bGVkLJhpZph0aGF0mG+TY2N1cnOYc2+Tb25lci6OoY2NjY2Nz3dhaXSrKMtsb25nkQR9os90aW1l
kf99J291dKssjqGNy2ludJEEfaLPbmFub3OOjo6OkWQACqtUaGlzlgMd2naauONlcnNpb26Td5hv
cmtzk2luk3RoZZNzYW1lk3eYYZh5k2Fzk3RoZZNwcmV2aW91c5N2mGVyc2lvbiyOoY2RZAAKZXhj
ZXB0lgNHGHRoYXSTdGhlk3RpbWWTaW6auON0ZXJ2kf9xx2Fsk2lzk3NwkEcdZWNpDGVkk2KYeZN0
mHeYb5Nhcmd1bWVumHRzLI6hjZFkAAp0aGWWA1VVDHJzdJNpbpNtaWxsaXNlY29uZHOTYW5kk3Ro
ZZNzZWNvbmSTaW6TbmFub3NlY29uZHMujqGNjY3Pbm90aWZ5qygpjo6RZAAKVGhpc5YCTKV3aWxs
k3Jlc3RhcnSTdGhlk3RocmVhZJN0aGF0k2hhc5NjYWxsZWSTdGhlk893YWl0qygpk21ldGhvkEcd
ZI6hjZFkAApmb3KWA9rldGhlk29ikQCOOGplY3STdG+Td2hpY5C442iTdGhlk89ub3RpZnmrKCmT
bWV0aG+aRx1kk2KYZWxvbmdzLpEGAnZJZpNub46hjZFkAAp0aHJlYWRzlgNVVWFyZZN3kLjjYWl0
aW5nLJN0aGWTbWV0aG+aRx1kk2RvmGVzk25vdGhpbmcujqGNjY3Pbm90aWZ5QZC+k2yRAILYbKso
KY6OkWQAClRoaXOWA9MMd2lsbJNyZXN0YXJ0k2FsbJN0aHJlYWRzk3RoYXSTaGGVuON2k2WWA9MM
Y2FsbGVkk3RoZZPPd2FpdKsoKZNmb3KOoY2RZAAKdGhllgNVVW9ikQCOOGplY3Rzk3Rvk3doaWOQ
uONok3RoZZPPbm90aWZ5QZC+k2yRAILYbKsoKZNtZXRob5pHHWSTYphlbG9uZ3Mujo6fGAAAjZIA
sYAAMY6M+AAAACoBg5LAHDsAAAAAA+gCcAAAAWgAAAAGAAHzJP0AJzoACgAAAAoAAAAGY210aTEw
8yDf6jx4AAoAAAAKAAAACGNtc2x0dDEw8xca8iJWAAoAAAAKAAAABmNtYngxMPMAS/FgeQAKAAAA
CgAAAAVjbXIxMPkAAAh8At/f398=

------=_NextPart_000_0005_01C09FE6.289A01D0--