如何在 wrapfigure 环境中的段落开头使用 lettrine。
考虑以下代码:
\documentclass{article}
\RequirePackage[demo]{graphicx}
\usepackage{lettrine}
\usepackage{wrapfig}
\newcounter{cnt}\setcounter{cnt}{0}
\def\t{\stepcounter{cnt}\thecnt. cat sat on the mat. }
\begin{document}
\begin{wrapfigure}{r}{0.3\textwidth}
\vspace{1ex}
\includegraphics[width=\linewidth,height=1in]{image}
\end{wrapfigure}
\lettrine{T}{he cat sat} \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\end{document}
结果如下,我将图像向下移动,以使问题更加明显,即忽略了 wrapfig。
笔记:到目前为止,David Carlisle 已经提供了相当不错的答案,然而,输出出现了以下异常,具体来说,对 David 的原始代码进行了更新,以允许修改后的 lettrine( ) 采用可选参数来控制字母高度等,然而,默认情况下,如果现在解析wflettrine{...}
可选参数,则会返回以下输出。lines=5
以上是通过代码命令实现的:
\wflettrine[lines=5]{T}{he cat sat}
并且可以清楚地看到,在红色突出显示的区域下,首字下沉字母并没有占据整个空间,奇怪的是,在我的计算机上使用默认的计算机现代字体并正常使用 lettrine 时也观察到了同样的行为。
通过将字体更改为 Helvetica,通过在序言中使用以下内容:
\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}
执行相同的命令,会产生以下输出。
很明显,之前的问题已经解决(通过在绿色突出显示部分下正确使用首字下沉),但是,这已经将 wrapfig 组件推到了右侧,如在红色突出显示部分下所见。
看起来好像 wrapfig 被向右推了一段距离,其宽度与首字下沉字母 'T' 的宽度相同。
答案1
\documentclass{article}
\RequirePackage[demo]{graphicx}
\usepackage{helvet}\renewcommand{\familydefault}{\sfdefault}
\usepackage{lettrine}
\usepackage{wrapfig}
\newcounter{cnt}\setcounter{cnt}{0}
\def\t{\stepcounter{cnt}\thecnt. cat sat on the mat. }
\newdimen\tttaa
\newdimen\tttbb
\renewcommand\thepage{\the\numexpr(\value{page}+1)/2\relax}
\makeatletter
\def\merge@ps{\afterassignment\merge@ps@\tttbb}
\def\merge@ps@{\afterassignment\merge@ps@@\tttaa}
\def\merge@ps@@{%
\afterassignment\reset@WF@ps\dimen@\WF@ps\valign
%\showthe\count@
\ifnum\count@>\@ne
\advance\count@\m@ne
\expandafter\merge@ps
\fi
}
\def\reset@WF@ps{\afterassignment\reset@WF@ps@\dimen@ii}
\def\reset@WF@ps@#1\valign{%
\edef\new@wf@ps{\new@wf@ps
\the\dimexpr\dimen@+\tttbb\relax\space
\the\dimexpr\dimen@ii-\tttbb\relax\space}%
\def\WF@ps{#1}}
\newcommand\wflettrine[3][]{%
\setbox\tw@\hbox{\lettrine[#1]{#2}{#3}\global\let\gtmp\L@parshape}%
\afterassignment\wf@getoffset\count@\gtmp\hoffset
\setbox\WF@box\hbox{\kern-\dimen@\box\WF@box\kern\dimen@}%
\noindent\box\tw@
\def\new@wf@ps{}%
\afterassignment\merge@ps\count@\gtmp
\edef\WF@ps{\new@wf@ps\space\WF@ps}%
\@@parshape\c@WF@wrappedlines\WF@ps\z@\columnwidth}
\def\wf@getoffset{\afterassignment\wf@get@ffset\dimen@}
\def\wf@get@ffset#1\hoffset{}
\makeatother
\begin{document}
%%%%%%%%%%%%%%
\begin{wrapfigure}{r}{0.3\textwidth}
\vspace{1ex}
\includegraphics[width=\linewidth,height=1in]{image}
\end{wrapfigure}
\wflettrine[lines=5]{T}{he cat sat}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t
%%%%%%%%%%%%%%
\begin{wrapfigure}{r}{0.3\textwidth}
\vspace{1ex}
\includegraphics[width=\linewidth,height=1in]{image}
\end{wrapfigure}
\wflettrine{T}{he cat sat}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t
%%%%%%%%%%%%%%%%%%%%%%%
\lettrine[lines=5]{T}{he cat sat}
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t
%%%%%%%%%%%%%%%%%%%%%%%
\begin{wrapfigure}{r}{0.3\textwidth}
\vspace{1ex}
\includegraphics[width=\linewidth,height=1in]{image}
\end{wrapfigure}
The cat sat
\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
\t\t\t\t\t\t\t\t\t
\end{document}