我如何创建一个环境以便能够在图形旁边保留文本的空间?

我如何创建一个环境以便能够在图形旁边保留文本的空间?

我正在为自定义教科书类别设计布局,但在让这个环境按我喜欢的方式运行时遇到了问题。

这是我当前的工作布局:

在此处输入图片描述

我希望能够创建一个环境,使小页面位于图像的左侧,并且我可以根据需要在它上面填充文本。我尝试使用该environ包来执行此操作,但尽管进行了多次调整,布局仍然不起作用。

这是我的页面布局:

在此处输入图片描述

我希望左侧\minipage使用边注空间,右侧小页面使用正文。

我尝试使用下面的代码,但它似乎不起作用。

\documentclass{book}
\let\cleardoublepage\clearpage

\usepackage{tikz}
\usepackage[explicit]{titlesec}
\usepackage[strict]{changepage}
\usepackage{calc}
\usepackage{environ}
\usepackage[
  left=2.25in,
  right=0.75in,
  top=1.25in,
  bottom=1.25in,
  marginparwidth=1.75in,
  marginparsep=.25in,
  asymmetric]{geometry}

\NewEnviron{myfig}[2]{
  \begin{adjustwidth}{-2.0in}{0.25in}
    \begin{table}[h]
      \centering
      \makebox[0pt][c]{\parbox{\textwidth}{%
      \colorbox{lightgray}{
      \begin{minipage}{2.0in}
        #1\\#2
      \end{minipage}}
      \colorbox{cyan}{
      \begin{minipage}{\textwidth}
        \BODY
      \end{minipage}}
      }}
    \end{table}
  \end{adjustwidth}
  }


\makeatletter
\titleformat{\chapter}
  {\normalfont\sffamily\Huge\scshape}
  {}{0pt}
  {\thispagestyle{empty}    % Remove page number on new chapters
  \begin{tikzpicture}[remember picture,overlay]
    \node[yshift=-3cm] at (current page.north west)
      {\begin{tikzpicture}[remember picture, overlay]
        \draw[fill=cyan] (0,-1) rectangle
          (25cm,3cm);
        \draw[fill=cyan] (0,-24) rectangle
          (25cm,-25cm);
        \ifttl@label% <---------------------- Added condition on \ifttl@label
          \node[anchor=west,xshift=.21\paperwidth,yshift=-.01\paperheight,rectangle]
              {\color{white}\LARGE CHAPTER \Huge\thechapter};
        \fi% <------------------------------- end condition on \ifttl@label
        \node[anchor=west,xshift=.21\paperwidth,yshift=-.065\paperheight,rectangle]
              {\color{cyan}\Huge\MakeUppercase{#1}};
       \end{tikzpicture}
      };
   \end{tikzpicture}
  }
\makeatother

\begin{document}
  \chapter{test}
  \begin{myfig}{Label}{This is a description}
    foobar
  \end{myfig}
\end{document}

上述 mwe 产生以下内容:

在此处输入图片描述


编辑:感谢 Sašo Živanović 的帮助,它已经接近正常工作了……但我想指出一个对齐问题:我希望图形的文本描述显示在图像的左上角。截至目前,它悬停在左下角。

在此处输入图片描述

答案1

这是你想要的结果吗?

结果页面

这是通过以下环境定义实现的myfig(其余代码相同)。

\newbox\myfigbox  
\newenvironment{myfig}[1][]{%
  {\noexpandarg\IfStrEq{#1}{}{}{%
    \raisebox{-\height}{\makebox[0pt][r]{%
      \colorbox{lightgray}{
        \begin{minipage}[t]{2.0in}
          \formatlabeldesc#1\formatlabeldesc
        \end{minipage}%
      }%
      \hspace{0.4em}% set as needed
    }}%
  }}%
  \setbox\myfigbox=\hbox\bgroup
  \begin{minipage}[t]{\textwidth}%
}{%
  \end{minipage}\egroup
  \raisebox{-\height}{\colorbox{cyan}{\box\myfigbox}}%
}
\def\formatlabeldesc#1\\#2\formatlabeldesc{\textbf{#1}\\\textit{#2}}

为了回应评论,我已将上述定义中的参数签名从两个强制参数更改为单个可选参数。 (因此,如果没有给出标签和描述,一切都很好。)关于 keyval 请求,我会说它只会迫使您输入更多内容:我建议只需用 分隔标签和描述\\。 (如果您需要它,这也可以让您完全控制格式。)

\begin{document}
  \chapter{test}
  \begin{myfig}[Label\\This is a description]
    foobar
  \end{myfig}
  \begin{myfig}
    foobar
  \end{myfig}
\end{document}

花式键值版本(使用pgfkeys):

\usepackage{pgfkeys}
\pgfkeys{/myfig/.cd,
  label/.store in=\myfiglabel,
  description/.store in=\myfigdescription
}
\newbox\myfigbox
\newenvironment{myfig}[1][]{%
  {\noexpandarg\IfStrEq{#1}{}{}{%
    \def\myfiglabel{}\def\myfigdescription{}%
    \pgfkeys{/myfig/.cd,#1}%
    \raisebox{-\height}{\makebox[0pt][r]{%
      \colorbox{lightgray}{
        \begin{minipage}[t]{2.0in}
          \textbf{\myfiglabel}%
          \expandarg\IfStrEq{\myfiglabel}{}{}{\IfStrEq{\myfigdescription}{}{}{\\}}%
          \textit{\myfigdescription}%
        \end{minipage}%
      }%
      \hspace{0.4em}% set as needed
    }}%
  }}%
  \setbox\myfigbox=\hbox\bgroup
  \begin{minipage}[t]{\textwidth}%
}{%
  \end{minipage}\egroup
  \raisebox{-\height}{\colorbox{cyan}{\box\myfigbox}}%
}

% ...
\begin{myfig}[label=Label,description=This is a description]
  foobar
\end{myfig}

相关内容