xcookybooky 食谱中的 Lettrine 和 Wrapfig

xcookybooky 食谱中的 Lettrine 和 Wrapfig

我对食谱中的lettrine和的组合有疑问。wrapfigxcookybooky

我的问题源于两个包之间的交互。如果我创建如下所示的食谱,即使配料包装已完成,段落仍会保持该宽度。这会在文档中产生难看的空白。

无包装的示例食谱

为了解决这个问题,我偶然发现了 David Carlisle 的解决方案,它使用一些花哨的 LaTeX 来组合两个段落形状(参见Lettrine 和 Wrapfig)。这种方法效果很好,但仍然存在问题。每当配料表的结尾与新的准备步骤的开始相重合时,就会引发错误。

wflettrine 代码错误

这可以通过减少成分列表的长度(即的高度wrapfig)在以下 MWE 中复制。我已设法使用条件内的 shift 命令将受影响的行数减少 1 valign,但问题仍然存在于每个段落的前两行。

回到我的问题是,有没有办法修复命令\wflettrine以使其工作?或者有另一种方法可以解决根本问题?

\documentclass{article}

\usepackage{graphicx}
\usepackage{lettrine}
\usepackage{wrapfig}
\usepackage{lipsum}
\usepackage{xcookybooky}

%------------------------------------------------
%   Modification of lettrine for wrapfig
%------------------------------------------------
% Courtesy of David Carlisle: https://tex.stackexchange.com/questions/119688/lettrine-and-wrapfig

\newdimen\tttaa
\newdimen\tttbb

\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
    \ifnum\count@>\@ne
        \afterassignment\reset@WF@ps\dimen@\WF@ps\valign  % <-- moving to here increases the lines available by one
        \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\copy\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{\wf@get@ffset\dimen@}
\def\wf@get@ffset#1\hoffset{}

\makeatother

%------------------------------------------------
%   Update of xcookybook for wrapping steps
%------------------------------------------------
\renewcommand{\step}{%
    \par
    \stepcounter{step}  % <-- moved here, since shouldn't be in the argument of lettrine
    \wflettrine[%
        lines=2,
        lhang=0,          % space into margin, value between 0 and 1
        loversize=0.15,   % enlarges the height of the capital
        slope=0em,
        findent=1em,      % gap between capital and intended text
        nindent=0em       % shifts all intended lines, beginning with the second line
    ]{\thestep}{}%
}
\newcommand{\ing}{1 tsp & some ingredient}

%------------------------------------------------
%   Document
%------------------------------------------------
\begin{document}
\begin{recipe}{Example Recipe}

    \ingredients[5]{%%%% <-- CHANGE TO 4 TO SEE ERROR  %%%%
        \ing\\\ing\\\ing\\\ing
    }

    \preparation{%
        \step xxx
        \step yyy
        \step \lipsum[1]
        \step \lipsum[1]
        \step \lipsum[1]
    }

\end{recipe}
\end{document}

带有包装的示例配方,但缺少 \valign 错误

相关内容