LaTeX - defining a custom 'wrapfig' environment
I'm typesetting a book with LaTeX. The text design includes pull quotes, which are supposed to look something like this:
Chicken chicken chicken chicken -------------
chicken chicken chicken chicken CHICKEN
chicken chicken chicken chicken CHICKEN
chicken chicken chicken chicken -------------
chicken chicken chicken chicken chicken chicken
So, wrapfig.sty
seems like it has the basic mechanism I need, and I just need to define an environment that does the horizontal rules, centering, and larger type. The problem is that wrapfigure doesn't 开发者_开发百科seem to want to be nested in an environment definition. If I have this in my text body it works
\begin{wrapfigure}{o}{2in}
\large chicken chicken
\end{wrapfigure}
but if I do this in the prologue
\newenvironment{pullquote}
{\begin{wrapfigure}{o}{2in}\large}
{\end{wrapfigure}}
and then I have
\begin{pullquote}
chicken chicken
\end{pullquote}
I get this error message:
Package wrapfig Warning: Collision between wrapping environments ...
the pull quote is typeset several paragraphs below where I want it (at the approximate location of the next pull quote, it looks like, or else at the end of the document) and the body text doesn't get wrapped around the pull quote. What gives? How do I make this work?
I don't have full understanding of it, but I suspect it's because wrapfigure is itself a wrapper around figure float environment.
I think I found a solution/workaround here: http://texblog.net/latex-archive/plaintex/expandafter/
I think this code gets what you want:
\documentclass{article}
\usepackage{wrapfig}
\raggedright
\expandafter\def\expandafter\wrapfigure\expandafter{\wrapfigure{o}{2in}\large\raggedright}
\begin{document}
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
\begin{wrapfigure}
CHICKEN CHICKEN
CHICKEN CHICKEN
\end{wrapfigure}
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
\end{document}
The code as used above redefines 'wrapfigure' to have different use, which may not be what you want. You can create new commands for the begin{env} and end{env} which leave 'wrapfigure' itself unaltered, like this:
\documentclass{article}
\usepackage{wrapfig}
\raggedright
\newcommand{\myfigstart}{\begin{wrapfigure}{o}{2in}\large\raggedright}
\newcommand{\myfigend}{\end{wrapfigure}}
\begin{document}
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
\myfigstart
CHICKEN CHICKEN CHICKEN CHICKEN
\myfigend
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken chicken chicken
\end{document}
精彩评论