Lettrine 和 Wrapfig

Lettrine 和 Wrapfig

如何在 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

wflettrine5

以上是通过代码命令实现的:

\wflettrine[lines=5]{T}{he cat sat}

并且可以清楚地看到,在红色突出显示的区域下,首字下沉字母并没有占据整个空间,奇怪的是,在我的计算机上使用默认的计算机现代字体并正常使用 lettrine 时也观察到了同样的行为。

通过将字体更改为 Helvetica,通过在序言中使用以下内容:

\usepackage{helvet}
\renewcommand{\familydefault}{\sfdefault}

执行相同的命令,会产生以下输出。

wflettrine_helvet

很明显,之前的问题已经解决(通过在绿色突出显示部分下正确使用首字下沉),但是,这已经将 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}

相关内容