我想将列表放在 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}