是否有可能将 wrapfig 与 enumerate 或 itemize 环境一起使用?

是否有可能将 wrapfig 与 enumerate 或 itemize 环境一起使用?

wrapfigenumerate与和环境不兼容itemize。是否有印刷方面的原因导致列表不能环绕图形,还是 LaTeX 的技术限制?如果是技术限制,目前是否有任何工作(新软件包或对 LaTeX 的更改)在将来消除此限制?

编辑:回应一些评论:我意识到有一些“技巧”可以做到这一点。我没有这个问题的例子。每当我遇到 wrapfig 问题时,因为它靠近枚举或逐项环境,我都会寻找一个简单的解决方案,找不到,然后将图形移到其他地方。在绝大多数情况下,学习复杂解决方案的成本不值得将图形保持在我想要的位置。

答案1

值得一提的是,wrapfigure 在 ConTeXt 中开箱即用。因此,这显然不是 TeX 的限制。

\setuppapersize[A5]

\useexternalfigure[ctanlion][http://www.ctan.org/lion/ctan_lion_350x350.png][width=3cm]


\starttext

\placefigure[left,2*hang]{Test}
  {\externalfigure[ctanlion]}

\startitemize[n]
  \item \input ward
  \item \input ward
  \item \input ward
\stopitemize

\stoptext

这使:

在此处输入图片描述

移除可2*hang\placefigure

在此处输入图片描述

答案2

cutwin包(和一些\parshape体操)可以在这里使用:

\documentclass{article}
\usepackage{cutwin}
\usepackage{caption}
\usepackage{graphicx}
\usepackage{lipsum}

\begin{document}
\renewcommand\windowpagestuff{%
  \hspace*{25pt}\includegraphics[height=4cm]{ctanlion}
  \captionof{figure}{A test figure.}
}
\opencutleft

\begin{cutout}{2}{10pt}{0.5\linewidth}{12}
\begin{enumerate}
{%
\parshape 15 26pt \linewidth 26pt \linewidth 0.5\linewidth 0.5\linewidth
  0.5\linewidth 0.5\linewidth  0.5\linewidth 0.5\linewidth  0.5\linewidth 0.5\linewidth
  0.5\linewidth 0.5\linewidth   0.5\linewidth 0.5\linewidth   0.5\linewidth 0.5\linewidth 
  0.5\linewidth 0.5\linewidth   0.5\linewidth 0.5\linewidth   0.5\linewidth 0.5\linewidth
  0.5\linewidth 0.5\linewidth   0.5\linewidth 0.5\linewidth 26 pt \linewidth
\item \lipsum[1]
}%
\item \lipsum[2]
\item \lipsum[2]
\end{enumerate}
\end{cutout}

\end{document}

在此处输入图片描述

CTAN 狮子绘画由 Duane Bibby 绘制。

答案3

通过将 wrapfigure 放入 或 中是可能的,parboxminipage如此问题的一些重复中提到的那样。但是,这些方法通常通过手动插入\vspace手动选择的值来解决垂直间距问题。此解决方案通过使用支柱自动工作。将strut第一行文本的基线放置在距离 顶部的指定距离处minipage。然后adjustbox用于将 的顶部放置minipage在外基线上方的精确距离处。

\documentclass{article}

\usepackage{calc}
\usepackage{adjustbox}
\usepackage{lipsum}
\usepackage{wrapfig}

\begin{document}

\newlength{\strutheight}
\settoheight{\strutheight}{\strut}
\begin{enumerate}
  \item \lipsum[1]
  \item
    \begin{adjustbox}{valign=T,raise=\strutheight,minipage={\linewidth}}
      \begin{wrapfigure}{l}{0pt}
        \includegraphics[width=3cm]{example-image-a}
      \end{wrapfigure}
    \strut{}\lipsum[2]
    \end{adjustbox}
\end{enumerate}

\end{document}

答案4

您可以创建一个新的包装环境。在下面的 MWE 中wrapr,我的环境将图像放在页面的右侧,而wrapl将其放在左侧。两个环境具有相同的结构:

wrapr{vertical adjustment of text}{number of lines}{horizontal space needed for the image}{vertical adjustment of image}{IMAGE}{TEXT}

我们可以在这里看到两种环境的使用情况

\documentclass[a4paper,11pt]{article}
\usepackage{graphicx}
\usepackage{tikz,pgfplots,tkz-euclide}
\tkzSetUpPoint[size=7,fill=white]
\usepackage{wrapfig}


\newenvironment{WrapText1}[3][r]
{\wrapfigure[#2]{#1}{#3}}
{\endwrapfigure}
\newenvironment{WrapText2}[3][l]
{\wrapfigure[#2]{#1}{#3}}
{\endwrapfigure}
\newcommand{\wrapr}[6]{
\begin{minipage}{\linewidth}\mbox{}\\
\vspace{#1}
\begin{WrapText1}{#2}{#3}
\vspace{#4}#5\end{WrapText1}#6
\end{minipage}}

\newcommand{\wrapl}[6]{
\begin{minipage}{\linewidth}\mbox{}\\
\vspace{#1}
\begin{WrapText2}{#2}{#3}
\vspace{#4}#5\end{WrapText2}#6
\end{minipage}}
\usepackage{lipsum}


\begin{document}
\wrapr{-4mm}{8}{4cm}{5mm}{\begin{tikzpicture}
\tkzDefPoint(3,0){C}
\tkzDefPoint(0,0){B}
\tkzDefPoint(1,2){A}
\tkzDefPoint(1.33,.66){G}
\tkzDefPoint(1.5,0){M}
\tkzDefPoint(.5,1){N}
\tkzDefPoint(2,1){P}
\draw(A)--(B)--(C)-- cycle;
\draw(A)--(M);
\draw(B)--(P);
\draw(C)--(N);
\tkzLabelPoint[left](B){$B$}
\tkzLabelPoint[below](M){$D$}
\tkzLabelPoint[right](P){$E$}
\tkzLabelPoint[left](N){$Z$}
\tkzLabelPoint[right](C){$C$}
\tkzLabelPoint[above](A){$A$}
\tkzLabelPoint[left,yshift=-3mm,xshift=1.7mm](G){$G$}
\tkzDrawPoints(A,B,C,M,N,P,G)
\end{tikzpicture}}{\begin{enumerate}
\item \lipsum[1]
\end{enumerate}}
\vspace{2cm}
\wrapl{-4mm}{8}{3cm}{5mm}{\begin{tikzpicture}
\tkzDefPoint(3,0){C}
\tkzDefPoint(0,0){B}
\tkzDefPoint(1,2){A}
\tkzDefPoint(1.33,.66){G}
\tkzDefPoint(1.5,0){M}
\tkzDefPoint(.5,1){N}
\tkzDefPoint(2,1){P}
\draw(A)--(B)--(C)-- cycle;
\draw(A)--(M);
\draw(B)--(P);
\draw(C)--(N);
\tkzLabelPoint[left](B){$B$}
\tkzLabelPoint[below](M){$D$}
\tkzLabelPoint[right](P){$E$}
\tkzLabelPoint[left](N){$Z$}
\tkzLabelPoint[right](C){$C$}
\tkzLabelPoint[above](A){$A$}
\tkzLabelPoint[left,yshift=-3mm,xshift=1.7mm](G){$G$}
\tkzDrawPoints(A,B,C,M,N,P,G)
\end{tikzpicture}}{\begin{enumerate}
\item \lipsum[1]
\end{enumerate}}
\end{document}

在此处输入图片描述

相关内容