列表中使用多列会导致意外对齐

列表中使用多列会导致意外对齐

以下两段代码的唯一区别是使用了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将以此为准进行对齐。

相关内容