编辑

编辑

MWE 显示wrapfig下面的短表列表旁边的行为。

\documentclass{article}
\usepackage[]{wrapfig}
\usepackage[]{booktabs}
\usepackage[]{blindtext}
\setlength{\parindent}{0pt} % Without it, all \entry below will be indented, which is not desireable for the MWE's purposes.

\newcommand{\tab}{%
    \begin{tabular}{r}
    \toprule 
    This \\ \midrule
    is \\
    a \\
    table \\
    \bottomrule
    \end{tabular}
    }

\newcommand{\entry}{%
    \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lr@{}}
        \toprule
        a & b \\ \midrule
        c & d \\
        \bottomrule
    \end{tabular*}
    }

\begin{document}
\blindtext

\begin{wraptable}{l}{0pt}
\tab
\end{wraptable}
\entry

\entry

\entry

\entry

\blinddocument
\end{document}

输出(第一页)如下所示。

MWE 输出第 1 页

可以看出,wraptable垂直放置在预期的位置。但是,水平放置时却不是这样:它并没有像我预期的那样在它旁边减少。它应该导致环绕 的\linewidth多个,即改变旁边适合 的 的。\entrywraptable\linewidthwraptable1. 这能实现吗?如何实现?

此外,它还会将文本缩进四个以下。此缩进在文档的其余部分中\entry每次重复。\par2. 为什么会出现这种重复压痕?

周围有wraptable一些垂直空间。水平方向有一些较小的空间,我猜是长度\columnsep3. 垂直空间是否可以缩小到等于换行文本和wraptable/之间的水平空间wrapfigure

答案1

wrapfig它的工作原理是使用包装对象的高度来计算应缩短的文本行数,然后缩短这些行。有时,这并不正确,您可以使用可选参数覆盖该数字。在这种情况下,这永远不够,因为它实际上无法找到可以缩短的任何行,直到遇到一些普通文本。

基本上,文字环绕图形或表格是难的在 LaTeX 中,没有解决方案可以避免相当大的脆弱性。wrapfig通过在文档中解释限制等并提供针对某些类型的问题的解决方法来尽力而为。

在这种情况下,最好的办法就是简单地手动进行包装,minipage例如依靠 s。

这需要调整,但是是这样的:

\documentclass{article}
\usepackage{booktabs,calc}
\usepackage{blindtext}
\setlength{\parindent}{0pt} % Without it, all \entry below will be indented, which is not desireable for the MWE's purposes.
\newcommand{\tab}{%
  \begin{tabular}{r}
    \toprule
    This \\ \midrule
    is \\
    a \\
    table \\
    \bottomrule
  \end{tabular}%
}
\newcommand{\entry}{%
  \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lr@{}}
    \toprule
    a & b \\ \midrule
    c & d \\
    \bottomrule
  \end{tabular*}%
}
\begin{document}
\blindtext

\begin{minipage}[]{25mm}
  \tab
\end{minipage}%
\begin{minipage}{\linewidth-25mm}
  \entry

  \entry

  \entry

  \entry
\end{minipage}

\blinddocument
\end{document}

将产生

表格的假包装

这不太方便,但我们可以定义一个包装器来提供一些帮助。\wrapmytable[]{}{}需要一个可选参数和两个强制参数。如果指定,可选参数指定左侧部分的宽度。否则,这是内容的自然宽度。第二和第三个参数指定左侧和右侧内容。\columnsep允许作为两部分之间的分隔。

例如,

\wrapmytable{\tab}{%
  \entry

  \entry

  \entry

  \entry
}

生产

便利宏的输出

完整代码:

\documentclass{article}
\usepackage{booktabs,calc}
\usepackage{blindtext}
\setlength{\parindent}{0pt} % Without it, all \entry below will be indented, which is not desireable for the MWE's purposes.
\newcommand{\tab}{%
  \begin{tabular}{r}
    \toprule
    This \\ \midrule
    is \\
    a \\
    table \\
    \bottomrule
  \end{tabular}%
}
\newcommand{\entry}{%
  \begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}lr@{}}
    \toprule
    a & b \\ \midrule
    c & d \\
    \bottomrule
  \end{tabular*}%
}
\newlength\mywrapwidth
\newcommand\wrapmytable[3][]{%
  \edef\tempa{}%
  \edef\tempb{#1}%
  \ifx\tempa\tempb\settowidth{\mywrapwidth}{#2}\else\setlength\mywrapwidth{#1}\fi
  \smallskip
  \begin{minipage}{\mywrapwidth}
    #2
  \end{minipage}\hskip \columnsep
  \begin{minipage}{\linewidth-\mywrapwidth-\columnsep}
    #3
  \end{minipage}%
  \smallskip
}
\begin{document}
\blindtext

\wrapmytable{\tab}{%
  \entry

  \entry

  \entry

  \entry
}

\blinddocument
\end{document}

编辑

为了回应评论中的查询,请使用t可选参数中的放置选项,minipagetabular允许左侧和右侧部分按要求在顶部对齐。

顶部对齐

代码:

\documentclass{article}
\usepackage{booktabs,calc}
\usepackage{blindtext}
\setlength{\parindent}{0pt} % Without it, all \entry below will be indented, which is not desireable for the MWE's purposes.
\newcommand{\tab}{%
  \begin{tabular}[t]{r}
    \toprule
    This \\ \midrule
    is \\
    a \\
    table \\
    \bottomrule
  \end{tabular}%
}
\newcommand{\entry}{%
  \begin{tabular*}{\linewidth}[t]{@{\extracolsep{\fill}}lr@{}}
    \toprule
    a & b \\ \midrule
    c & d \\
    \bottomrule
  \end{tabular*}%
}
\newlength\mywrapwidth
\newcommand\wrapmytable[3][]{%
  \edef\tempa{}%
  \edef\tempb{#1}%
  \ifx\tempa\tempb\settowidth{\mywrapwidth}{#2}\else\setlength\mywrapwidth{#1}\fi
  \smallskip
  \begin{minipage}[t]{\mywrapwidth}
    #2
  \end{minipage}\hskip \columnsep
  \begin{minipage}[t]{\linewidth-\mywrapwidth-\columnsep}
    #3
  \end{minipage}%
  \smallskip
}
\begin{document}
\blindtext

\wrapmytable{\tab}{%
  \entry

  \entry

  \entry

  \entry
}

\blinddocument
\end{document}

由下面的 OP 编辑​​,上面的原始答案未经编辑。

这对于缩进其中几个也非常有效\entry,但可能需要针对特定​​实现进行一些调整。

\entry

\wrapmytable[]{\tab}{%
  \entry

  \entry

  \entry
}

\entry

产量

<code>\entry</code> 环绕边桌

我编辑了\entry以显示\the\linewidth以说明 s 的效果minipage。您可能会注意到, 之间的垂直空间\entry变化\linewidth并不尽可能小。这可以通过禁用\smallskip定义中的两个 s来解决\wrapmytable。如果 的第三个参数\wrapmytable比第二个输入参数具有更大的高度(如果需要,还可以跳过一些) ,那么这可能没问题。

相关内容