我怎样才能将程序列表放入投影仪列中?

我怎样才能将程序列表放入投影仪列中?

我想在 beamercolumns环境中使用程序列表,如果需要,稍微改变列表的宽度。在另一列中,会出现一些解释。下面的代码展示了我的尝试。如果breaklines=true,那么长线当然会在绿色框的边界处换行。如果breaklines=false,那么长线会超出绿色框,但\maxsizebox会考虑绿色框的宽度,即长线与右列重叠。在任何一种情况下,绿色框都不会填满列宽。看起来该选项会linewidth增加绿色框的宽度,但它并没有最大化 \maxsizebox

我如何知道绿色框填满了可用的列宽(即在本例中为 0.4\columnwidth)并且最长的行没有超出绿色框?

\documentclass{beamer}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{adjustbox}
\begin{document}
\newsavebox\listingboxname
\begin{columns}
\column{0.4\columnwidth}
    \lstset{ %breaklines=true,
     linewidth=1.2\textwidth,
     backgroundcolor=\color{green}}
    \begin{lrbox}{\listingboxname}
    \begin{lstlisting}
int sumvec(int v[N])
{
    int i, sum = 0;

    for (i = 0; i < N; i++)
      sum += v[i];
    return sum;
}  
    \end{lstlisting}
    \end{lrbox}
    \maxsizebox{\columnwidth}{\textheight}
        {\usebox\listingboxname}
\column{0.6\textwidth}
Just some text
\end{columns}

\end{document}

这导致 在此处输入图片描述

答案1

对于小于列宽的列表,使用背景颜色的解决方案非常有效(参见示例中的第二帧)。

对于较宽的列表,您可以使用adjustbox来调整其大小以适应列宽。为了添加背景颜色,我使用了\colorbox,但由于列表对于 来说有问题,因此\colorbox我通过将列表存储在 中来隐藏它lrbox

\documentclass{beamer}

\usepackage{listings}
\usepackage{adjustbox}
\newsavebox\listingboxname

\begin{document}

\begin{frame}[fragile]
    \begin{columns}[onlytextwidth]
        \begin{column}{0.4\textwidth}
            \begin{lrbox}{\listingboxname}
                \begin{adjustbox}{max width=\linewidth, margin=0pt}
                \begin{lstlisting}
int sumvec(int v[N])
{
    int i, sum = 0;

    for (i = 0; i < N; i++) longer line to test
      sum += v[i];
    return sum;
}  
                \end{lstlisting}
                \end{adjustbox}
            \end{lrbox}
            \colorbox{cyan}{\usebox\listingboxname}
        \end{column}
        \begin{column}{0.5\textwidth}
            Just some text
        \end{column}
    \end{columns}
\end{frame}

\begin{frame}[fragile]
    \begin{columns}[onlytextwidth]
        \begin{column}{0.4\textwidth}
                \begin{lstlisting}[linewidth=\textwidth,
                     backgroundcolor=\color{cyan}]
int 
{
}  
                \end{lstlisting}
        \end{column}
        \begin{column}{0.5\textwidth}
            Just some text
        \end{column}
    \end{columns}
\end{frame}

\end{document}

在此处输入图片描述

答案2

据我所知,没有规定自动将列表的宽度设置为最宽的行。

将列表设置为适合最长行的宽度,然后调整框的大小。

\documentclass{beamer}
\usepackage{listings}

\newsavebox\listingboxname

\begin{document}

\begin{frame}[fragile]

\begin{columns}
\column{.4\textwidth}
\lstset{
   %breaklines=true,
   backgroundcolor=\color{green},
   linewidth=1.5\columnwidth, % maybe it fits
}
\begin{lrbox}{\listingboxname}
\begin{lstlisting}
int sumvec(int v[N])
{
    int i, sum = 0;

    for (i = 0; i < N; i++)
      sum += v[i];
    return sum;
}  
\end{lstlisting}
\end{lrbox}
\resizebox{\columnwidth}{!}{\usebox{\listingboxname}}

\column{.6\textwidth}
Just some text

\end{columns}

\end{frame}

\end{document}

在此处输入图片描述

相关内容