水平移动页面上的所有浮动内容

水平移动页面上的所有浮动内容

我想通过相对于段落文本水平移动标准浮动框(如figuretable)来修改它们在页面上的显示方式,见下图。

在此处输入图片描述

为此我尝试使用adjustwidth包提供的环境,并按照以下方式changepage重新定义原始环境(例如)。figure

\documentclass[]{article}

\usepackage{mwe}
\usepackage{changepage}

\makeatletter
\newenvironment{shiftedfloat}[2][]
               {\@float{#2}[#1]\begin{adjustwidth}{2cm}{-2cm}}
               {\end{adjustwidth}\end@float}
\renewenvironment{figure}[1][\fps@figure]
               {\shiftedfloat[#1]{figure}}
               {\endshiftedfloat}
\makeatother

\begin{document}

\blindtext

\begin{figure}[h]
  \includegraphics[width=\textwidth]{example-image}
  \caption{Figure caption}
\end{figure}

\end{document}

这仅在我尝试加载float包并将放置规范从 更改[h]为 时才有效[H],此时我收到错误:

! Extra }, or forgotten \endgroup.

adjustwidth有趣的是,当我脱离定义shiftedfloat并将其直接放入给定的图中时,一切都正常:

\documentclass[]{article}

\usepackage{mwe}
\usepackage{float}
\usepackage{changepage}

\makeatletter
\newenvironment{shiftedfloat}[2][]
               {\@float{#2}[#1]}
               {\end@float}
\renewenvironment{figure}[1][\fps@figure]
               {\shiftedfloat[#1]{figure}}
               {\endshiftedfloat}
\makeatother

\begin{document}

\blindtext

\begin{figure}[H]
  \begin{adjustwidth}{2cm}{-2cm}
  \includegraphics[width=\textwidth]{example-image}
  \caption{Figure caption}
  \end{adjustwidth}
\end{figure}

\end{document}

在我看来,由于某种原因,\end{adjustwidth}在的先前定义中丢失了shiftedfloat,但我无法弄清楚原因。

有什么建议可以解决这个问题吗?或者也许有更好的方法来实现预期的效果?重要的是,原始浮动环境被改变而不是引入任何新环境,并且解决方案与包兼容float,特别是与参数兼容[H]

答案1

谢谢阿克塞尔·索末菲的解决方案类似的问题描述\renewenvironment{figure} 与 [H] 位置的兼容性问题我也能够通过\float@endH 包修补来解决问题。float

\documentclass[]{article}

\usepackage{mwe}
\usepackage{changepage}
\usepackage{float}

\makeatletter
\newenvironment{shiftedfloat}[2][]
               {\@float{#2}[#1]\begin{adjustwidth}{2cm}{-2cm}}
               {\end{adjustwidth}\end@float}
\renewenvironment{figure}[1][\fps@figure]
               {\shiftedfloat[#1]{figure}}
               {\endshiftedfloat}               
% Adaption to the [H] placement provided by the float package
\AtBeginDocument{%
  \let\float@endHorg\float@endH
  \def\float@endH{\end{adjustwidth}\float@endHorg}
}
\makeatother

\begin{document}

\blindtext

\begin{figure}[H]
  \includegraphics[width=\textwidth]{example-image}
  \caption{Figure caption}
\end{figure}

\end{document}

相关内容