以下两段代码的唯一区别是使用了multicols=2
。这会导致 中的对齐方式parbox
错误Code 1
——尽管t
给出了对齐方式,但排版看起来像是对齐方式b
。
如何纠正?
\documentclass{article}
\usepackage{listings,multicol}
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Code 1:\par
\begin{minipage}[t]{2in}
\begin{lstlisting}[multicols=2]
ab
cd
ef
gh
\end{lstlisting}
\end{minipage}
\vrule\
\fbox{\parbox[t]{1in}{ab}}
\bigskip
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Code 2:\par
\begin{minipage}[t]{2in}
\begin{lstlisting}
ab
cd
ef
gh
\end{lstlisting}
\end{minipage}
\vrule\
\fbox{\parbox[t]{1in}{ab}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
答案1
默认情况下,多列框的基线位于底部。您可以使用 \vspace 来顶部对齐小页面:
\documentclass{article}
\usepackage{listings}
\usepackage{multicol}
\begin{document}
Code 1:\par
\begin{minipage}[t]{2in}
\vspace{-\splittopskip}
\begin{lstlisting}[multicols=2]
ab
cd
ef
gh
\end{lstlisting}
\end{minipage}
\vrule\
\fbox{\parbox[t]{1in}{ab\\blub}}
\end{document}
答案2
如果您想让第一个案例与第二个案例一样垂直对齐,请\null
在之前使用\begin{lstlisting}[multicols=2]
。它会创建一个空行,您的代码\fbox
将以此为准进行对齐。