[Doc-SIG] \begin{interactive}

David Ascher da@ski.org
Tue, 2 Mar 1999 16:52:35 -0800 (Pacific Standard Time)


  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.
  Send mail to mime@docserver.cac.washington.edu for more info.

--15889198-29424-920422355=:222
Content-Type: TEXT/PLAIN; charset=US-ASCII

Here's my hack for the day.  I keep writing doc, and I'm always frustrated
when there's a mismatch between the stuff that the user is supposed to
have input and the output that is shown.  Here's a solution for LaTeX
documents:

The comment below should explain it to the LaTeXgnescenti.

Comments welcome.

########################################################################
#
# Latex Python Preprocessor For Interactive Accuracy
# (c) 1999 David Ascher
#
# Take a set of latex files and convert blocks that look like:
#
#    \begin{interactive}
#    x = 3
#    print x   # here's a comment
#    x / 0
#    \end{interactive}
#
# to: 
#
#    \begin{interactive}
#    x = 3
#    print x   # here's a comment
#    x / 0
#    \end{interactive}
#
#    \begin{interactiveoutput}
#         >>> \textbf{x = 3}
#         >>> \textbf{print x   }\textit{\# here's a comment}
#         3
#         >>> \textbf{x / 0}
#         Traceback (innermost last):
#         File "<console>", line 1, in ?
#         ZeroDivisionError: integer division or modulo
#    \end{interactiveoutput}
#
#
# Assumes that the following are in the preamble:
#
#  \usepackage{alltt}
#  \usepackage{verbatim}
#  \newenvironment{interactive}{\comment}{\endcomment}
#  \newenvironment{interactiveoutput}{\alltt}{\endalltt}
#
########################################################################  


--15889198-29424-920422355=:222
Content-Type: TEXT/plain; name="proc.py"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.WNT.4.04.9903021652350.222@rigoletto.ski.org>
Content-Description: 
Content-Disposition: attachment; filename="proc.py"

IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojDQojIExhdGV4IFB5dGhv
biBQcmVwcm9jZXNzb3IgRm9yIEludGVyYWN0aXZlIEFjY3VyYWN5DQojIChj
KSAxOTk5IERhdmlkIEFzY2hlcg0KIw0KIyBUYWtlIGEgc2V0IG9mIGxhdGV4
IGZpbGVzIGFuZCBjb252ZXJ0IGJsb2NrcyB0aGF0IGxvb2sgbGlrZToNCiMN
CiMgICAgXGJlZ2lue2ludGVyYWN0aXZlfQ0KIyAgICB4ID0gMw0KIyAgICBw
cmludCB4DQojICAgIHggLyAzDQojICAgIFxlbmR7aW50ZXJhY3RpdmV9DQoj
DQojIHRvOiANCiMNCiMgICAgXGJlZ2lue2ludGVyYWN0aXZlfQ0KIyAgICB4
ID0gMw0KIyAgICBwcmludCB4ICAgIyBoZXJlJ3MgYSBjb21tZW50DQojICAg
IHggLyAwDQojICAgIFxlbmR7aW50ZXJhY3RpdmV9DQojDQojICAgIFxiZWdp
bntpbnRlcmFjdGl2ZW91dHB1dH0NCiMgICAgICAgICA+Pj4gXHRleHRiZnt4
ID0gM30NCiMgICAgICAgICA+Pj4gXHRleHRiZntwcmludCB4ICAgfVx0ZXh0
aXR7XCMgaGVyZSdzIGEgY29tbWVudH0NCiMgICAgICAgICAzDQojICAgICAg
ICAgPj4+IFx0ZXh0YmZ7eCAvIDB9DQojICAgICAgICAgVHJhY2ViYWNrIChp
bm5lcm1vc3QgbGFzdCk6DQojICAgICAgICAgRmlsZSAiPGNvbnNvbGU+Iiwg
bGluZSAxLCBpbiA/DQojICAgICAgICAgWmVyb0RpdmlzaW9uRXJyb3I6IGlu
dGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvDQojICAgIFxlbmR7aW50ZXJhY3Rp
dmVvdXRwdXR9DQojDQojDQojIEFzc3VtZXMgdGhhdCB0aGUgZm9sbG93aW5n
IGFyZSBpbiB0aGUgcHJlYW1ibGU6DQojDQojICBcdXNlcGFja2FnZXthbGx0
dH0NCiMgIFx1c2VwYWNrYWdle3ZlcmJhdGltfQ0KIyAgXG5ld2Vudmlyb25t
ZW50e2ludGVyYWN0aXZlfXtcY29tbWVudH17XGVuZGNvbW1lbnR9DQojICBc
bmV3ZW52aXJvbm1lbnR7aW50ZXJhY3RpdmVvdXRwdXR9e1xhbGx0dH17XGVu
ZGFsbHR0fQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICANCg0K
aW1wb3J0IHN0cmluZywgc3lzLCBjb2RlLCBjU3RyaW5nSU8NCg0KaSA9IGNv
ZGUuSW50ZXJhY3RpdmVDb25zb2xlKCkNCnN5cy5wczEgPSAnPj4+ICcNCnN5
cy5wczIgPSAnLi4uICcNCg0KQkkgPSByJ1xiZWdpbntpbnRlcmFjdGl2ZX0n
KydcbicNCkVJID0gcidcZW5ke2ludGVyYWN0aXZlfScrJ1xuJw0KQk8gPSBy
J1xiZWdpbntpbnRlcmFjdGl2ZW91dHB1dH0nKydcbicNCkVPID0gcidcZW5k
e2ludGVyYWN0aXZlb3V0cHV0fScrJ1xuJw0KDQpkZWYgZG9wYXJ0KHBhcnQp
Og0KICAgIHBhcnQgPSBzdHJpbmcucmVwbGFjZShwYXJ0LCAnXHJcbicsICdc
bicpDQogICAgcGFydCA9IHN0cmluZy5yZXBsYWNlKHBhcnQsICdcblxyJywg
J1xuJykNCiAgICBpZiBwYXJ0WzBdID09ICdcbic6IHBhcnQgPSBwYXJ0WzE6
XQ0KICAgIGlmIHBhcnRbLTFdID09ICdcbic6IHBhcnQgPSBwYXJ0WzotMV0N
Cg0KICAgIHByb21wdCA9IHN5cy5wczENCiAgICB2ID0gJycNCiAgICBmb3Ig
bGluZSBpbiBzdHJpbmcuc3BsaXQocGFydCwgJ1xuJyk6DQoJbyA9IGNTdHJp
bmdJTy5TdHJpbmdJTygpDQoJZSA9IGNTdHJpbmdJTy5TdHJpbmdJTygpDQoJ
c3Rkb3V0ID0gc3lzLnN0ZG91dA0KCXN5cy5zdGRvdXQgPSBvDQoJc3RkZXJy
ID0gc3lzLnN0ZGVycg0KCXN5cy5zdGRlcnIgPSBlDQoJcHJpbnQgcHJvbXB0
K3InXHRleHRiZnsnK2xpbmUrJ30nDQoJbW9yZSA9IGkucHVzaChsaW5lKQ0K
CW92ID0gby5nZXR2YWx1ZSgpDQoJZXYgPSBlLmdldHZhbHVlKCkNCgl3ID0g
c3RyaW5nLmZpbmQoZXYsICcjJykgICMgY29tbWVudHMgYXJlbid0IGFjdHVh
bGx5IHNob3duIGluIHRiLg0KCWlmIHcgIT0gLTE6DQoJICAgIGV2ID0gZXZb
OnctMV0NCglzeXMuc3Rkb3V0ID0gc3Rkb3V0DQoJc3lzLnN0ZGVyciA9IHN0
ZGVycg0KCXYgPSB2ICsgIG92ICsgZXYNCglpZiB2Wy0xXSAhPSAnXG4nOiB2
ID0gdiArICdcbicNCglpZiBtb3JlOiANCgkgICAgcHJvbXB0ID0gc3lzLnBz
Mg0KCWVsc2U6DQoJICAgIHByb21wdCA9IHN5cy5wczENCgkNCiAgICBsaW5l
cyA9IHN0cmluZy5zcGxpdCh2LCAnXG4nKQ0KICAgIGRlZiBpdGFsaWNpemVf
Y29tbWVudHMobGluZSk6DQoJaWYgJyMnIGluIGxpbmU6DQoJICAgIHdoZXJl
ID0gc3RyaW5nLmluZGV4KGxpbmUsICcjJykNCgkgICAgaWYgc3RyaW5nLmZp
bmQobGluZSwgcidcdGV4dGJmJykgPj0gMDoNCgkJbGluZSA9IGxpbmVbOndo
ZXJlXSArIHInfVx0ZXh0aXR7JytsaW5lW3doZXJlOl0NCgkgICAgZWxzZToN
CgkJbGluZSA9IGxpbmVbOndoZXJlXSArIHInXHRleHRpdHsnK2xpbmVbd2hl
cmU6XSsnfScNCglyZXR1cm4gbGluZQ0KICAgIGxpbmVzID0gbWFwKGl0YWxp
Y2l6ZV9jb21tZW50cywgbGluZXMpDQogICAgdiA9IHN0cmluZy5qb2luKGxp
bmVzLCAnXG4nKQ0KICAgIHYgPSBzdHJpbmcucmVwbGFjZSh2LCAnIycsICdc
IycpDQogICAgZGVmIGFkZF9pbmRlbnQoeCk6DQoJaWYgeDoNCgkgICAgcmV0
dXJuICcgICAgJyt4DQoJZWxzZToNCgkgICAgcmV0dXJuIHgNCiAgICB2ID0g
c3RyaW5nLmpvaW4obWFwKGFkZF9pbmRlbnQsIHN0cmluZy5zcGxpdCh2LCAn
XG4nKSksICdcbicpDQogICAgcmV0dXJuIEJJICsgcGFydCArICdcbicgKyBF
SSArICdcbicgKyBCTyArIHYgKyBFT1s6LTFdDQoNCmRlZiBkbyhmaWxlbmFt
ZSk6DQogICAgZCA9IG9wZW4oZmlsZW5hbWUpLnJlYWQoKQ0KDQogICAgIyBz
dHJpcCBpbnRlcmFjdGl2ZV9vdXRwdXQgcmVnaW9ucw0KICAgIHdoaWxlIDE6
DQoJdyA9IHN0cmluZy5maW5kKGQsIEJPKQ0KCWlmIHcgPT0gLTE6DQoJICAg
IGJyZWFrDQoJayA9IHN0cmluZy5maW5kKGQsIEVPKQ0KCWlmIGsgPT0gLTE6
DQoJICAgIHJhaXNlIFZhbHVlRXJyb3IsICJVbmFibGUgdG8gZmluZCBlbmQg
b2YgaW50ZXJhY3RpdmVfb3V0cHV0IHJlZ2lvbiINCglkID0gZFs6d10gKyBk
W2srbGVuKEVPKTpdDQoNCiAgICBwYXJ0cyA9IHN0cmluZy5zcGxpdChkLCBC
SSkNCiAgICBuID0gJycNCiAgICBmb3IgcGFydCBpbiBwYXJ0czoNCgl3ID0g
c3RyaW5nLmZpbmQocGFydCwgRUkpDQoJaWYgdyA9PSAtMTogDQoJICAgIG5w
YXJ0ID0gcGFydA0KCWVsc2U6DQoJICAgIG5wYXJ0ID0gZG9wYXJ0KHBhcnRb
OnddKSArIHBhcnRbdytsZW4oRUkpOl0NCgluID0gbiArIG5wYXJ0DQogICAg
IyBpZiB5b3Ugd2FudCB0byBwbGF5IHdpdGggZmlyZToNCiAgICAjZiA9IG9w
ZW4oZmlsZW5hbWUsICd3YicpDQogICAgIyBlbHNlOiANCiAgICBmID0gb3Bl
bihmaWxlbmFtZVs6LTRdKyctMi50ZXgnLCAnd2InKQ0KICAgIGYud3JpdGUo
bikNCg0KZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToNCiAgICBkbyhm
aWxlbmFtZSkNCg0K
--15889198-29424-920422355=:222--