如何创建一个可以执行附加操作的新图形环境?

如何创建一个可以执行附加操作的新图形环境?

目前,我有一个文档,其中大多数图表和表格的标题都放在边距中,使用mcaption。但对于某些图表和表格,我需要全宽(文本宽度和边距)。这两种设置都很好用,但我喜欢这样,\begin{figure}\begin{table}自动假定它是一个边距捕获浮动元素。对于超过全宽的图片,我喜欢有一个新的环境\begin{fullwidthfigure}\begin{fullwidthtable}

\documentclass{article}
\usepackage{mwe}

\usepackage[
    left=2.cm,
    right=6.5cm,
    marginparwidth=4.5cm,
    marginparsep=5mm,
    a4paper]{geometry} % Page margins

\usepackage{caption}
\usepackage{mcaption}
\usepackage{etoolbox}
\preto\margincap{\captionsetup{options=margincap}}


\begin{document}
\noindent Some text.
\begin{figure} [h]
\begin{margincap}
    \centering
    \includegraphics[width=0.4\linewidth]{example-image-a}
    \caption{A caption in the margin.}
\end{margincap}
\end{figure}

\noindent Some more text.
\begin{figure}[h]
  \checkoddpage
  \edef\side{\ifoddpage l\else r\fi}%
  \makebox[\textwidth][\side]{%
    \begin{minipage}[t]{\textwidth+\marginparsep+\marginparwidth}
      \centering
      \includegraphics[width=\textwidth]{example-image-b}
          \caption{A caption for a fullwidth picture. The caption also goes all the way form the left to the right side.}
    \end{minipage}%
  }%
\end{figure}

\noindent Some more text.

\end{document}

编辑: 我刚刚看到,第二个图形没有占据整个宽度。这是因为缺少操作包吗+?它在我的其他文档中运行正常……

在此处输入图片描述

答案1

您的代码中有两个问题。

  1. 正如@ChristianHupfer的评论中提到的那样,您需要调用 package calc。 然后您的代码将按希望执行您的 + ...
  2. 您需要将\textwidth第二个\includegraphics命令中的 used 更改为\linewidth。这样做的原因是,您最后将 used 的线宽更改为minipage\textwidth+\marginparsep+\marginparwidth现在由包计算calc)。
  3. 我为没有环境的大图像添加了一个版本figure,第二个版本有环境。请参阅我添加的评论。因为您使用类,所以article您不必检查奇数页是否...

完成 MWE(参见标有 的重要行<=======):

\documentclass{article}
\usepackage{mwe}

\usepackage[
    left=2.cm,
    right=6.5cm,
    marginparwidth=4.5cm,
    marginparsep=5mm,
    a4paper,
    showframe,
]{geometry} % Page margins

\usepackage{caption}
\usepackage{mcaption}
\usepackage{calc} % <===================================================
\usepackage{etoolbox}
\preto\margincap{\captionsetup{options=margincap}}


\begin{document}
\noindent Some text.
\begin{figure}%[h]
\begin{margincap}
    \centering
    \includegraphics[width=0.4\linewidth]{example-image-a}
    \caption{A caption in the margin.}
\end{margincap}
\end{figure}

\noindent Some more text.

\noindent % <======================= no indention for following minipage
\begin{minipage}[t]{\textwidth+\marginparsep+\marginparwidth}
  \centering
  \includegraphics[width=\linewidth]{example-image-b} % <===============
 \captionof{figure}{A caption for a fullwidth picture. The caption also goes all the way form the left to the right side.}
\end{minipage}%

\noindent Some more text 2.

\begin{figure}%[h]
% \checkoddpage
% \edef\side{\ifoddpage l\else r\fi}%
% \makebox[\textwidth][\side]{%
\noindent % <======================= no indention for following minipage
\begin{minipage}[t]{\textwidth+\marginparsep+\marginparwidth}
  \centering
  \includegraphics[width=\linewidth]{example-image-b} % <===============
 \caption{A caption for a fullwidth picture. The caption also goes all the way form the left to the right side.}
\end{minipage}%
% }%
\end{figure}

\end{document}

结果(第 1 页):

生成的 pdf 第 1 页

相关内容