![图片和代码并排:Lstlisting 在 \subcaptionbox 中不起作用](https://linux22.com/image/425176/%E5%9B%BE%E7%89%87%E5%92%8C%E4%BB%A3%E7%A0%81%E5%B9%B6%E6%8E%92%EF%BC%9ALstlisting%20%E5%9C%A8%20%5Csubcaptionbox%20%E4%B8%AD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在尝试获取源代码和一张图片,其中两个标题与标题文本的上部对齐,如本线程所建议的那样:在同一行上有两个图形副标题。
对于对齐,有人建议使用\subcaptionbox
环境。但是,当我尝试在以下示例中将 lstlising 插入 \subcaptionbox 环境时,我收到多个错误:
\begin{figure}[!htbp]
\centering
\subcaptionbox{Example of a parameterized type in Scala adopted from~\cite{2.13-types}}[.45\textwidth]{
\begin{lstlisting}
class TreeMap[A <: Comparable[A], B] { … }
\end{lstlisting}
}
\subcaptionbox{UML representation of parameterized type TreeMap}[.45\textwidth]{
\includegraphics{parameterized-types.pdf}
}
\label{fig:scalaspecific:bounds}
\caption{Examplary UML representation of parameterized types}
\end{figure}
产生的错误:
! Package inputenc Error: Invalid UTF-8 byte "80.See the inputenc package documentation for explanation.Type H <return> for immediate help.... }
! Argument of \lst@next has an extra }.<inserted text>\par }
...
我现在主要有两个问题。
首先:是否有办法解决这个问题,以便可以将列表放入\subcaptionbox
环境中?
第二:如果没有修复,还有其他方法可以实现图片和代码的同一行标题对齐吗?
答案1
如果将列表内容放在外部文件中,则可以输入\lstinputlisting
以下参数\subcaptionbox
:
\begin{filecontents*}{\jobname.lst}
class TreeMap[A <: Comparable[A], B] { ... }
\end{filecontents*}
\documentclass{article}
\usepackage{subcaption,listings,graphicx}
\newsavebox{\listingsbox}
\begin{document}
\begin{figure}[!htbp]
\centering
\subcaptionbox{Example of a parameterized type in Scala
adopted from~\cite{2.13-types}}[.45\linewidth]{%
\lstinputlisting[breaklines]{\jobname.lst}%
}\hfill
\subcaptionbox{UML representation of parameterized type TreeMap}[.45\textwidth]{
\includegraphics[width=\linewidth]{example-image-duck}
}
\caption{Examplary UML representation of parameterized types\label{fig:scalaspecific:bounds}}
\end{figure}
\end{document}
答案2
将环境保存lstlistings
在一个盒子里,您可以在里面使用\subcaptionbox
。
\documentclass{article}
\usepackage{subcaption,listings,graphicx}
\newsavebox{\listingsbox}
\begin{document}
\begin{figure}[!htbp]
\centering
\begin{lrbox}{\listingsbox}
\begin{minipage}{0.45\textwidth}
\begin{lstlisting}[breaklines]
class TreeMap[A <: Comparable[A], B] { ... }
\end{lstlisting}
\end{minipage}
\end{lrbox}
\subcaptionbox{Example of a parameterized type in Scala
adopted from~\cite{2.13-types}}{%
\usebox{\listingsbox}%
}
\subcaptionbox{UML representation of parameterized type TreeMap}[.45\textwidth]{
\includegraphics[width=\linewidth]{example-image}
}
\caption{Examplary UML representation of parameterized types}
\label{fig:scalaspecific:bounds}
\end{figure}
\end{document}
应该\label
去后 \caption
。