Newsgroups: comp.text.tex Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!caen!news.cs.indiana.edu!ux1.cso.uiuc.edu!csrd.uiuc.edu!s41.csrd.uiuc.edu!eijkhout From: eijkhout@s41.csrd.uiuc.edu (Victor Eijkhout) Subject: Re: Looking for flexible verbatim mode Message-ID: <1991Jun23.212832.2137@csrd.uiuc.edu> Sender: news@csrd.uiuc.edu (news) Organization: UIUC Center for Supercomputing Research and Development References: <1991Jun23.200116.23478@cs.rochester.edu> Date: Sun, 23 Jun 91 21:28:32 GMT Lines: 54 ferguson@cs.rochester.edu (George Ferguson) writes: >I often include small chunks of code or output as displays in my text. >The standard verbatim mode forces these to be aligned flush with the >lefthand side of the page. In addition, an attempt to fbox the result >shows that the lines stretch to the right side of the page, presumably >due to the way the linebreaks are "obeyed". Furthermore, various >attempts to wrap verbartim displays in other constructs, such as fbox >and centerline, usually result in an error. You're contradicting yourself: if fbox results in an error, how can the above described attempt to fbox 'show that the lines stretch to the right side o the page'? Anyways. Your problems derive partly from the fact that fbox is (silly enough) dfined as \def\fbox#1... and verbatim text can intrinsically not be enclosed in an argument (catcodes are frozen when the argument is read, and verbatim mode works by changing catcodes). The way out is to use the regular TeX boxes, and not that syntactic sugar that LL made around them. For instance, \vbox{\begin{verbatim} ... \end{verbatim}} will work fine. Your problem about lines that are as wide as the page is more difficult. I once wanted to display input and output next to each other (for certain parts of my TeX book, to appear later this year with Addison-Wesley), and I wrote the following macros for that. \def\snugbox{\setbox\z@\vbox\bgroup \leftskip\z@ \bgroup\aftergroup\make@snug \let\next=} \def\make@snug{\par\sn@gify\egroup \box\z@} \def\sn@gify {\skip\z@=\lastskip \unskip \advance\skip\z@\lastskip \unskip \unpenalty \setbox\z@\lastbox \ifvoid\z@ \nointerlineskip \else {\sn@gify} \fi \hbox{\unhbox\z@}\nointerlineskip \vskip\skip\z@ } \endinput This should be inserted in an environment where \makeatletter holds; you can use this as \snugbox{ ... whatever, including verbatim ... } and the result is a box that is as wide as the widest line in it. This is not totally foolproof, but I've tried to foresee some abuse. Victor.