rename latex --> communication
[ppam-mpi.git] / communication / slides / framed.sty
CommitLineData
3e5dbc70
BA
1% framed.sty v 0.96 2011/10/22
2% Copyright (C) 1992-2011 by Donald Arseneau (asnd@triumf.ca)
3% These macros may be freely transmitted, reproduced, or modified
4% for any purpose provided that this notice is left intact.
5%
6%====================== Begin Instructions =======================
7%
8% framed.sty
9% ~~~~~~~~~~
10% Create framed, shaded, or differently highlighted regions that can
11% break across pages. The environments defined are
12% framed - ordinary frame box (\fbox) with edge at margin
13% oframed - framed with open top/bottom at page breaks
14% shaded - shaded background (\colorbox) bleeding into margin
15% shaded* - shaded background (\colorbox) with edge at margin
16% snugshade - shaded with tight fit around text (esp. in lists)
17% snugshade* - like snugshade with shading edge at margin
18% leftbar - thick vertical line in left margin
19%
20% to be used like
21% \begin{framed}
22% copious text
23% \end{framed}
24%
25% But the more general purpose of this package is to facilitate the
26% definition of new environments that take multi-line material,
27% wrap it with some non-breakable formatting (some kind of box or
28% decoration) and allow page breaks in the material. Such environments
29% are defined to declare (or use) \FrameCommand for applying the boxy
30% decoration, and \MakeFramed{settings} ... \endMakeFramed wrapped
31% around the main text argument (environment body).
32%
33% The "framed" environment uses "\fbox", by default, as its "\FrameCommand"
34% with the additional settings "\fboxrule=\FrameRule" and "\fboxsep=\FrameSep".
35% You can change these lengths (using "\setlength") and you can change
36% the definition of "\FrameCommand" to use much fancier boxes.
37%
38% In fact, the "shaded" environment just redefines \FrameCommand to be
39% "\colorbox{shadecolor}" (and you have to define the color `"shadecolor"':
40% "\definecolor{shadecolor}...").
41%
42% Although the intention is for other packages to define the varieties
43% of decoration, a command "\OpenFbox" is defined for frames with open
44% tops or bottoms, and used for the "oframed" environment. This facility
45% is based on a more complex and capable command "\CustomFBox" which can
46% be used for a wider range of frame styles. One such style of a title-bar
47% frame with continuation marks is provided as an example. It is used by
48% the "titled-frame" environment. To make use of "titled-frame" in your
49% document, or the "\TitleBarFrame" command in your own environment
50% definitions, you must define the colors TFFrameColor (for the frame)
51% and a contrasting TFTitleColor (for the title text).
52%
53% A page break is allowed, and even encouraged, before the framed
54% environment. If you want to attach some text (a box title) to the
55% frame, then the text should be inserted by \FrameCommand so it cannot
56% be separated from the body.
57%
58% The contents of the framed regions are restricted:
59% Floats, footnotes, marginpars and head-line entries will be lost.
60% (Some of these may be handled in a later version.)
61% This package will not work with the page breaking of multicol.sty,
62% or other systems that perform column-balancing.
63%
64% The MakeFramed environment does the work. Its `settings' argument
65% should contain any adjustments to the text width (via a setting of
66% "\hsize"). Here, the parameter "\width" gives the measured extra width
67% added by the frame, so a common setting is "\advance\hsize-\width"
68% which reduces the width of the text just enough that the outer edge
69% of the frame aligns with the margins. The `settings' should also
70% include a `restore' command -- "\@parboxrestore" or "\FrameRestore"
71% or something similar; for instance, the snugshade environment uses
72% settings to eliminate list indents and vertical space, but uses
73% "\hspace" in "\FrameCommand" to reproduce the list margin ouside the
74% shading.
75%
76% There are actually four variants of "\FrameCommand" to allow different
77% formatting for each part of an environment broken over pages. Unbroken
78% text is adorned by "\FrameCommand", whereas split text first uses
79% "\FirstFrameCommand", possibly followed by "\MidFrameCommand", and
80% finishing with "\LastFrameCommand". The default definitions for
81% these three just invokes "\FrameCommand", so that all portions are
82% framed the same way. See the oframe environment for use of distinct
83% First/Mid/Last frames.
84%
85% Expert commands:
86% \MakeFramed, \endMakeFramed: the "MakeFramed" environment
87% \FrameCommand: command to draw the frame around its argument
88% \FirstFrameCommand: the frame for the first part of a split environment
89% \LastFrameCommand: for the last portion
90% \MidFrameCommand: for any intermediate segments
91% \FrameRestore: restore some text settings, but fewer than \@parboxrestore
92% \FrameRule: length register; \fboxrule for default "framed".
93% \FrameSep: length register; \fboxsep for default "framed".
94% \FrameHeightAdjust: macro; height of frame above baseline at top of page
95% \OuterFrameSep: vertical space before and after the framed env. Defaults to "\topsep"
96%
97% This is still a `pre-production' version because I can think of many
98% features/improvements that should be made. Also, a detailed manual needs
99% to be written. Nevertheless, starting with version 0.5 it should be bug-free.
100%
101% ToDo:
102% Test more varieties of list
103% Improve and correct documentation
104% Propagation of \marks
105% Handle footnotes (how??) floats (?) and marginpars.
106% Stretchability modification.
107% Make inner contents height/depth influence placement.
108%======================== End Instructions ========================
109
110\ProvidesPackage{framed}[2011/10/22 v 0.96:
111 framed or shaded text with page breaks]
112
113\newenvironment{framed}% using default \FrameCommand
114 {\MakeFramed {\advance\hsize-\width \FrameRestore}}%
115 {\endMakeFramed}
116
117\newenvironment{shaded}{%
118 \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolor}}%
119 \MakeFramed {\FrameRestore}}%
120 {\endMakeFramed}
121
122\newenvironment{shaded*}{%
123 \def\FrameCommand{\fboxsep=\FrameSep \colorbox{shadecolor}}%
124 \MakeFramed {\advance\hsize-\width \FrameRestore}}%
125 {\endMakeFramed}
126
127\newenvironment{leftbar}{%
128 \def\FrameCommand{\vrule width 3pt \hspace{10pt}}%
129 \MakeFramed {\advance\hsize-\width \FrameRestore}}%
130 {\endMakeFramed}
131
132% snugshde: Shaded environment that
133% -- uses the default \fboxsep instead of \FrameSep
134% -- leaves the text indent unchanged (shading bleeds out)
135% -- eliminates possible internal \topsep glue (\@setminipage)
136% -- shrinks inside the margins for lists
137% An \item label will tend to hang outside the shading, thanks to
138% the small \fboxsep.
139
140\newenvironment{snugshade}{%
141 \def\FrameCommand##1{\hskip\@totalleftmargin \hskip-\fboxsep
142 \colorbox{shadecolor}{##1}\hskip-\fboxsep
143 % There is no \@totalrightmargin, so:
144 \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
145 \MakeFramed {\advance\hsize-\width
146 \@totalleftmargin\z@ \linewidth\hsize
147 \@setminipage}%
148 }{\par\unskip\@minipagefalse\endMakeFramed}
149
150\newenvironment{snugshade*}{%
151 \def\FrameCommand##1{\hskip\@totalleftmargin
152 \colorbox{shadecolor}{##1}%
153 % There is no \@totalrightmargin, so:
154 \hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
155 \MakeFramed {\advance\hsize-\width
156 \@totalleftmargin\z@ \linewidth\hsize
157 \advance\labelsep\fboxsep
158 \@setminipage}%
159 }{\par\unskip\@minipagefalse\endMakeFramed}
160
161\newenvironment{oframed}{% open (top or bottom) framed
162 \def\FrameCommand{\OpenFBox\FrameRule\FrameRule}%
163 \def\FirstFrameCommand{\OpenFBox\FrameRule\z@}%
164 \def\MidFrameCommand{\OpenFBox\z@\z@}%
165 \def\LastFrameCommand{\OpenFBox\z@\FrameRule}%
166 \MakeFramed {\advance\hsize-\width \FrameRestore}%
167 }{\endMakeFramed}
168
169% A simplified entry to \CustomFBox with two customized parameters:
170% the thicknesses of the top and bottom rules. Perhaps we want to
171% use less \fboxsep on the open edges?
172
173\def\OpenFBox#1#2{\fboxsep\FrameSep
174 \CustomFBox{}{}{#1}{#2}\FrameRule\FrameRule}
175
176% \CustomFBox is like an amalgamation of \fbox and \@frameb@x,
177% so it can be used by an alternate to \fbox or \fcolorbox, but
178% it has more parameters for various customizations.
179% Parameter #1 is inserted (in vmode) right after the top rule
180% (useful for a title or assignments), and #2 is similar, but
181% inserted right above the bottom rule.
182% The thicknesses of the top, bottom, left, and right rules are
183% given as parameters #3,#4,#5,#6 respectively. They should be
184% \fboxrule or \z@ (or some other thickness).
185% The text argument is #7.
186% An instance of this can be used for the frame of \fcolorbox by
187% locally defining \fbox before \fcolorbox; e.g.,
188% \def\fbox{\CustomFBox{}{}\z@\z@\fboxrule\fboxrule}\fcolorbox
189%
190% Do we need to use different \fboxsep on different sides too?
191%
192\long\def\CustomFBox#1#2#3#4#5#6#7{%
193 \leavevmode\begingroup
194 \setbox\@tempboxa\hbox{%
195 \color@begingroup
196 \kern\fboxsep{#7}\kern\fboxsep
197 \color@endgroup}%
198 \hbox{%
199 % Here we calculate and shift for the depth. Done in
200 % a group because one of the arguments might be \@tempdima
201 % (we could use \dimexpr instead without grouping).
202 \begingroup
203 \@tempdima#4\relax
204 \advance\@tempdima\fboxsep
205 \advance\@tempdima\dp\@tempboxa
206 \expandafter\endgroup\expandafter
207 \lower\the\@tempdima\hbox{%
208 \vbox{%
209 \hrule\@height#3\relax
210 #1%
211 \hbox{%
212 \vrule\@width#5\relax
213 \vbox{%
214 \vskip\fboxsep % maybe these should be parameters too
215 \copy\@tempboxa
216 \vskip\fboxsep}%
217 \vrule\@width#6\relax}%
218 #2%
219 \hrule\@height#4\relax}%
220 }%
221 }%
222 \endgroup
223}
224
225
226% A particular type of titled frame with continuation marks.
227% Parameter #1 is the title, repeated on each page.
228\newenvironment{titled-frame}[1]{%
229 \def\FrameCommand{\fboxsep8pt\fboxrule2pt
230 \TitleBarFrame{\textbf{#1}}}%
231 \def\FirstFrameCommand{\fboxsep8pt\fboxrule2pt
232 \TitleBarFrame[$\blacktriangleright$]{\textbf{#1}}}%
233 \def\MidFrameCommand{\fboxsep8pt\fboxrule2pt
234 \TitleBarFrame[$\blacktriangleright$]{\textbf{#1\ (cont)}}}%
235 \def\LastFrameCommand{\fboxsep8pt\fboxrule2pt
236 \TitleBarFrame{\textbf{#1\ (cont)}}}%
237 \MakeFramed{\advance\hsize-20pt \FrameRestore}}%
238% note: 8 + 2 + 8 + 2 = 20. Don't use \width because the frame title
239% could interfere with the width measurement.
240 {\endMakeFramed}
241
242% \TitleBarFrame[marker]{title}{contents}
243% Frame with a label at top, optional continuation marker at bottom right.
244% Frame color is TFFrameColor and title color is a contrasting TFTitleColor;
245% both need to be defined before use. The frame itself use \fboxrule and
246% \fboxsep. If the title is omitted entirely, the title bar is omitted
247% (use a blank space to force a blank title bar).
248%
249\newcommand\TitleBarFrame[3][]{\begingroup
250 \ifx\delimiter#1\delimiter
251 \let\TF@conlab\@empty
252 \else
253 \def\TF@conlab{% continuation label
254 \nointerlineskip
255 \smash{\rlap{\kern\wd\@tempboxa\kern\fboxrule\kern\fboxsep #1}}}%
256 \fi
257 \let\TF@savecolor\current@color
258 \textcolor{TFFrameColor}{%
259 \CustomFBox
260 {\TF@Title{#2}}{\TF@conlab}%
261 \fboxrule\fboxrule\fboxrule\fboxrule
262 {\let\current@color\TF@savecolor\set@color #3}%
263 }\endgroup
264}
265
266% The title bar for \TitleBarFrame
267\newcommand\TF@Title[1]{%
268 \ifx\delimiter#1\delimiter\else
269 \kern-0.04pt\relax
270 \begingroup
271 \setbox\@tempboxa\vbox{%
272 \kern0.8ex
273 \hbox{\kern\fboxsep\textcolor{TFTitleColor}{#1}\vphantom{Tj)}}%
274 \kern0.8ex}%
275 \hrule\@height\ht\@tempboxa
276 \kern-\ht\@tempboxa
277 \box\@tempboxa
278 \endgroup
279 \nointerlineskip
280 \kern-0.04pt\relax
281 \fi
282}
283
284\chardef\FrameRestore=\catcode`\| % for debug
285\catcode`\|=\catcode`\% % (debug: insert space after backslash)
286
287\newlength\OuterFrameSep \OuterFrameSep=\maxdimen \relax
288
289\def\MakeFramed#1{\par
290 % apply default \OuterFrameSep = \topsep
291 \ifdim\OuterFrameSep=\maxdimen \OuterFrameSep\topsep \fi
292 % measure added width and height; call result \width and \height
293 \fb@sizeofframe\FrameCommand
294 \let\width\fb@frw \let\height\fb@frh
295 % insert pre-penalties and skips
296 \begingroup
297 \skip@\lastskip
298 \if@nobreak\else
299 \penalty9999 % updates \page parameters
300 \ifdim\pagefilstretch=\z@ \ifdim\pagefillstretch=\z@
301 % not infinitely stretchable, so encourage a page break here
302 \edef\@tempa{\the\skip@}%
303 \ifx\@tempa\zero@glue \penalty-30
304 \else \vskip-\skip@ \penalty-30 \vskip\skip@
305 \fi\fi\fi
306 \penalty\z@
307 % Give a stretchy breakpoint that will always be taken in preference
308 % to the \penalty 9999 used to update page parameters. The cube root
309 % of 10000/100 indicates a multiplier of 0.21545, but the maximum
310 % calculated badness is really 8192, not 10000, so the multiplier
311 % is 0.2301.
312 \advance\skip@ \z@ plus-.5\baselineskip
313 \advance\skip@ \z@ plus-.231\height
314 \advance\skip@ \z@ plus-.231\skip@
315 \advance\skip@ \z@ plus-.231\OuterFrameSep
316 \vskip-\skip@ \penalty 1800 \vskip\skip@
317 \fi
318 \addvspace{\OuterFrameSep}%
319 \endgroup
320 % clear out pending page break
321 \penalty\@M \vskip 2\baselineskip \vskip\height
322 \penalty9999 \vskip -2\baselineskip \vskip-\height
323 \penalty9999 % updates \pagetotal
324|\message{After clearout, \pagetotal=\the\pagetotal, \pagegoal=\the\pagegoal. }%
325 \fb@adjheight
326 \setbox\@tempboxa\vbox\bgroup
327 #1% Modifications to \hsize (can use \width and \height)
328 \textwidth\hsize \columnwidth\hsize
329}
330
331\def\endMakeFramed{\par
332 \kern\z@
333 \hrule\@width\hsize\@height\z@ % possibly bad
334 \penalty-100 % (\hrule moves depth into height)
335 \egroup
336%%% {\showoutput\showbox\@tempboxa}%
337 \begingroup
338 \fb@put@frame\FrameCommand\FirstFrameCommand
339 \endgroup
340 \@minipagefalse % In case it was set and not cleared
341}
342
343% \fb@put@frame takes the contents of \@tempboxa and puts all, or a piece,
344% of it on the page with a frame (\FrameCommand, \FirstFrameCommand,
345% \MidFrameCommand, or \LastFrameCommand). It recurses until all of
346% \@tempboxa has been used up. (\@tempboxa must have zero depth.)
347% #1 = attempted framing command, if no split
348% #2 = framing command if split
349% First iteration: Try to fit with \FrameCommand. If it does not fit,
350% split for \FirstFrameCommand.
351% Later iteration: Try to fit with \LastFrameCommand. If it does not
352% fit, split for \MidFrameCommand.
353\def\fb@put@frame#1#2{\relax
354 \ifdim\pagegoal=\maxdimen \pagegoal\vsize \fi
355| \message{=============== Entering putframe ====================^^J
356| \pagegoal=\the\pagegoal, \pagetotal=\the\pagetotal. }%
357 \ifinner
358 \fb@putboxa#1%
359 \fb@afterframe
360 \else
361 \dimen@\pagegoal \advance\dimen@-\pagetotal % natural space left on page
362 \ifdim\dimen@<2\baselineskip % Too little room on page
363| \message{Page has only \the\dimen@\space room left; eject. }%
364 \eject \fb@adjheight \fb@put@frame#1#2%
365 \else % there's appreciable room left on the page
366 \fb@sizeofframe#1%
367| \message{\string\pagetotal=\the\pagetotal,
368| \string\pagegoal=\the\pagegoal,
369| \string\pagestretch=\the\pagestretch,
370| \string\pageshrink=\the\pageshrink,
371| \string\fb@frh=\the\fb@frh. \space}
372| \message{^^JBox of size \the\ht\@tempboxa\space}%
373 \begingroup % temporarily set \dimen@ to be...
374 \advance\dimen@.8\pageshrink % maximum space available on page
375 \advance\dimen@-\fb@frh\relax % max space available for frame's contents
376%%% LOOKS SUBTRACTED AND ADDED, SO DOUBLE ACCOUNTING!
377 \expandafter\endgroup
378 % expand \ifdim, then restore \dimen@ to real room left on page
379 \ifdim\dimen@>\ht\@tempboxa % whole box does fit
380| \message{fits in \the\dimen@. }%
381 % ToDo: Change this to use vsplit anyway to capture the marks
382 % MERGE THIS WITH THE else CLAUSE!!!
383 \fb@putboxa#1%
384 \fb@afterframe
385 \else % box must be split
386| \message{must be split to fit in \the\dimen@. }%
387 % update frame measurement to use \FirstFrameCommand or \MidFrameCommand
388 \fb@sizeofframe#2%
389 \setbox\@tempboxa\vbox{% simulate frame and flexiblity of the page:
390 \vskip \fb@frh \@plus\pagestretch \@minus.8\pageshrink
391 \kern137sp\kern-137sp\penalty-30
392 \unvbox\@tempboxa}%
393 \edef\fb@resto@set{\boxmaxdepth\the\boxmaxdepth
394 \splittopskip\the\splittopskip}%
395 \boxmaxdepth\z@ \splittopskip\z@
396| \message{^^JPadded box of size \the\ht\@tempboxa\space split to \the\dimen@}%
397 % Split box here
398 \setbox\tw@\vsplit\@tempboxa to\dimen@
399| \toks99\expandafter{\splitfirstmark}%
400| \toks98\expandafter{\splitbotmark}%
401| \message{Marks are: \the\toks99, \the\toks98. }%
402 \setbox\tw@\vbox{\unvbox\tw@}% natural-sized
403| \message{Natural height of split box is \the\ht\tw@, leaving
404| \the\ht\@tempboxa\space remainder. }%
405 % If the split-to size > (\vsize-\topskip), then set box to full size.
406 \begingroup
407 \advance\dimen@\topskip
408 \expandafter\endgroup
409 \ifdim\dimen@>\pagegoal
410| \message{Frame is big -- Use up the full column. }%
411 \dimen@ii\pagegoal
412 \advance\dimen@ii -\topskip
413 \advance\dimen@ii \FrameHeightAdjust\relax
414 \else % suspect this is implemented incorrectly:
415 % If the split-to size > feasible room_on_page, rebox it smaller.
416 \advance\dimen@.8\pageshrink
417 \ifdim\ht\tw@>\dimen@
418| \message{Box too tall; rebox it to \the\dimen@. }%
419 \dimen@ii\dimen@
420 \else % use natural size
421 \dimen@ii\ht\tw@
422 \fi
423 \fi
424 % Re-box contents to desired size \dimen@ii
425 \advance\dimen@ii -\fb@frh
426 \setbox\tw@\vbox to\dimen@ii \bgroup
427 % remove simulated frame and page flexibility:
428 \vskip -\fb@frh \@plus-\pagestretch \@minus-.8\pageshrink
429 \unvbox\tw@ \unpenalty\unpenalty
430 \ifdim\lastkern=-137sp % whole box went to next page
431| \message{box split at beginning! }%
432 % need work here???
433 \egroup \fb@resto@set \eject % (\vskip for frame size was discarded)
434 \fb@adjheight
435 \fb@put@frame#1#2% INSERTED ???
436 \else % Got material split off at the head
437 \egroup \fb@resto@set
438 \ifvoid\@tempboxa % it all fit after all
439| \message{box split at end! }%
440 \setbox\@tempboxa\box\tw@
441 \fb@putboxa#1%
442 \fb@afterframe
443 \else % it really did split
444| \message{box split as expected. Its reboxed height is \the\ht\tw@. }%
445 \ifdim\wd\tw@>\z@
446 \wd\tw@\wd\@tempboxa
447 \centerline{#2{\box\tw@}}% ??? \centerline bad idea
448 \else
449| \message{Zero width means likely blank. Don't frame it (guess)}%
450 \box\tw@
451 \fi
452 \hrule \@height\z@ \@width\hsize
453 \eject
454 \fb@adjheight
455 \fb@put@frame\LastFrameCommand\MidFrameCommand
456 \fi\fi\fi\fi\fi
457}
458
459\def\fb@putboxa#1{%
460 \ifvoid\@tempboxa
461 \PackageWarning{framed}{Boxa is void -- discard it. }%
462 \else
463| \message{Frame and place boxa. }%
464| %{\showoutput\showbox\@tempboxa}%
465 \centerline{#1{\box\@tempboxa}}%
466 \fi
467}
468
469\def\fb@afterframe{%
470 \nointerlineskip \null %{\showoutput \showlists}
471 \penalty-30 \vskip\OuterFrameSep \relax
472}
473
474% measure width and height added by frame (#1 = frame command)
475% call results \fb@frw and \fb@frh
476% todo: a mechanism to handle wide frame titles
477\newdimen\fb@frw
478\newdimen\fb@frh
479\def\fb@sizeofframe#1{\begingroup
480 \setbox\z@\vbox{\vskip-5in \hbox{\hskip-5in
481 #1{\hbox{\vrule \@height 4.7in \@depth.3in \@width 5in}}}%
482 \vskip\z@skip}%
483| \message{Measuring frame addition for \string#1 in \@currenvir\space
484| gives ht \the\ht\z@\space and wd \the\wd\z@. }%
485| %{\showoutput\showbox\z@}%
486 \global\fb@frw\wd\z@ \global\fb@frh\ht\z@
487 \endgroup
488}
489
490\def\fb@adjheight{%
491 \vbox to\FrameHeightAdjust{}% get proper baseline skip from above.
492 \penalty\@M \nointerlineskip
493 \vskip-\FrameHeightAdjust
494 \penalty\@M} % useful for tops of pages
495
496\edef\zero@glue{\the\z@skip}
497
498\catcode`\|=\FrameRestore
499
500% Provide configuration commands:
501\providecommand\FrameCommand{%
502 \setlength\fboxrule{\FrameRule}\setlength\fboxsep{\FrameSep}%
503 \fbox}
504\@ifundefined{FrameRule}{\newdimen\FrameRule \FrameRule=\fboxrule}{}
505\@ifundefined{FrameSep} {\newdimen\FrameSep \FrameSep =3\fboxsep}{}
506\providecommand\FirstFrameCommand{\FrameCommand}
507\providecommand\MidFrameCommand{\FrameCommand}
508\providecommand\LastFrameCommand{\FrameCommand}
509
510% Height of frame above first baseline when frame starts a page:
511\providecommand\FrameHeightAdjust{6pt}
512
513% \FrameRestore has parts of \@parboxrestore, performing a similar but
514% less complete restoration of the default layout. See how it is used in
515% the "settings" argument of \MakeFrame. Though not a parameter, \hsize
516% should be set to the desired total line width available inside the
517% frame before invoking \FrameRestore.
518\def\FrameRestore{%
519 \let\if@nobreak\iffalse
520 \let\if@noskipsec\iffalse
521 \let\-\@dischyph
522 \let\'\@acci\let\`\@accii\let\=\@acciii
523 % \message{FrameRestore:
524 % \@totalleftmargin=\the \@totalleftmargin,
525 % \rightmargin=\the\rightmargin,
526 % \@listdepth=\the\@listdepth. }%
527 % Test if we are in a list (or list-like paragraph)
528 \ifnum \ifdim\@totalleftmargin>\z@ 1\fi
529 \ifdim\rightmargin>\z@ 1\fi
530 \ifnum\@listdepth>\z@ 1\fi 0>\z@
531 % \message{In a list: \linewidth=\the\linewidth, \@totalleftmargin=\the\@totalleftmargin,
532 % \parshape=\the\parshape, \columnwidth=\the\columnwidth, \hsize=\the\hsize,
533 % \labelwidth=\the\labelwidth. }%
534 \@setminipage % snug fit around the item. I would like this to be non-global.
535 % Now try to propageate changes of width from \hsize to list parameters.
536 % This is deficient, but a more advanced way to indicate modification to text
537 % dimensions is not (yet) provided; in particular, no separate left/right
538 % adjustment.
539 \advance\linewidth-\columnwidth \advance\linewidth\hsize
540 \parshape\@ne \@totalleftmargin \linewidth
541 \else % Not in list
542 \linewidth=\hsize
543 %\message{No list, set \string\linewidth=\the\hsize. }%
544 \fi
545 \sloppy
546}
547
548%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%