我如何将带有背景颜色的列表放置在带有子标题框的 tikz 图片旁边?

我如何将带有背景颜色的列表放置在带有子标题框的 tikz 图片旁边?

我想将列表放在 tikz 图片旁边,以便标题在同一水平上垂直对齐。我发现这个\subcaptionbox命令非常有用。

但是,列表的浅灰色背景延伸到页面右侧,也覆盖了 tikzpicture。如果我改为添加图像,就不会发生这种情况。

以下是 MWE:

\documentclass{scrartcl}

\usepackage{subcaption}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{tikz}

\begin{document} 
\begin{figure}
    \subcaptionbox{Code}[0.5\textwidth]
    {
        \input{testListing}
    }
    \subcaptionbox{Line}[0.5\textwidth]
    {
       \begin{tikzpicture}
            \draw   (1,0) to (4,0);
       \end{tikzpicture}
    }
    \caption{Source code and Line.}
\end{figure}
\end{document}

输入文件testListing包含以下代码(需要使用“\input”,因为无论出于什么原因,子标题框块中的代码都无法编译):

\begin{lstlisting}[backgroundcolor=\color{lightgray}]
Test
Test
\end{lstlisting}

该文件如下所示:

在此处输入图片描述

我怎样才能防止灰色背景覆盖 tikz 图像?

答案1

subcaptions这只是我的观点,但我认为在你的情况下有两个是没有用的,因为caption他的观点已经很明确了。

实现此类目标的另一种方法(无需subcaptionbox)是使用tcolorbox包。这可能不是您所需要的,但您可以查看包文档,因为它提供了许多与listings和相关的集成可能性tikzpictures

编辑:改进框格式

我对这个盒子做了进一步的改进,使用了更多选项,使其看起来更加学术。感谢@samcarter 提供的超棒tikzducks包装!

\documentclass{scrartcl}
\usepackage[listings,skins]{tcolorbox}
\usepackage{tikzducks}
\newtcblisting{mylisting}[1][]{%
listing only,% quite explicit
colback=white!90!black, % color of the background
colframe=white!90!black, % color of the frame
left=1pt,right=1pt,top=1pt,bottom=1pt,% margins
boxrule=0pt
}

\newtcolorbox[blend into=figures]{myfigure}[2][]{
skin=bicolor,% to get different colors for the two sides of the box
colback=white!90!black,% left background color
colbacklower=white,% right background color
sidebyside=true,% left-right blocks instead of upper-lower
attach boxed title to bottom center,% position of the title
fontupper=\ttfamily,% font used in the left block
title={#2},% title of the box
colbacktitle=white,% title background color
coltitle=black,% title font color
colframe=white,% title frame color
left=1pt,right=1pt,top=1pt,bottom=1pt,% margins
sharp corners,% shape of box corners
boxrule=0pt, % frame thickness
boxsep=1pt, % separation between box and content
#1% room for more options
}
\begin{document}
  \begin{myfigure}[label={fig-listing}]{Listing Box with tikzpicture}
      % Left block (Upper block) content
      \begin{mylisting}
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
          Here is a pretty duck
      \end{mylisting}
      % Switch to Right block (Lower block) content
      \tcblower
      \centering
      \begin{tikzpicture}
          \duck[longhair=teal]
      \end{tikzpicture}

\end{myfigure}
Figure \ref{fig-listing} is a tcolorbox containing a listing and a tikzpicture. Thanks @samcarter.
\end{document}

在此处输入图片描述

编辑 2:对 OP 的问题进行更多调查

\subcaptionbox我尝试进一步调查该问题,我认为它与本身无关,而是与listings包有关。这似乎是由于修改构建过程中listings的行为的方式造成的,请参阅latex这个答案不幸的是缺少一些解释。

\subcaptionbox因此,一种解决方法可能是通过使用例如环境来摆脱这种情况subfigure,这些环境基本上是minipage具有更多字幕可能性的环境。

\documentclass{scrartcl}
\usepackage{subcaption}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{tikz}

\begin{document}
\begin{figure}
  \begin{subfigure}[b]{0.5\linewidth}
    \centering
     \begin{lstlisting}
      blablabla
    \end{lstlisting}
    \caption{Code}
  \end{subfigure}
  \begin{subfigure}[b]{0.5\linewidth}
    \centering
    \begin{tikzpicture}
      \draw (1,0) to (4,0);
    \end{tikzpicture}
    \caption{Line}
  \end{subfigure}

    \caption{Source code and Line.}
\end{figure}
\end{document}

在此处输入图片描述

相关内容