Diminuir o tamanho da fonte em uma listagem

Diminuir o tamanho da fonte em uma listagem

Olá, estou tentando incluir um pequeno trecho de código em um dos meus slides do beamer

No entanto, uma das linhas não cabe nos slides. Por favor, deixe-me saber como diminuir o tamanho da fonte para que o código-fonte caiba corretamente.

Aqui está o meu código,

\begin{frame}[fragile]{CUDA C Concepts}
  \textbf{\color{orange}Kernel} \textit{Def} C functions which are executed N times in parallel by 
                                        N different CUDA threads
   \lstset{language=C++,
           basicstyle=\ttfamily,
           keywordstyle=\color{blue}\ttfamily,
           stringstyle=\color{red}\ttfamily,
           commentstyle=\color{green}\ttfamily
          }
    \begin{lstlisting}
    // Kernel Definition
   __global__ void VecAdd(float* A, float* B, float* C)
    {
      int i = threadIdx.x;
      C[i] = A[i] + B[i]; 
    }
    int main(void)
    {
    ...
    // Kernel Invocation with N threads
    return 0;
    }
    \end{lstlisting}  
\end{frame}

Aqui está a saída do código látex atual. insira a descrição da imagem aqui

Responder1

Neste caso você pode usar breaklines=truepara ativar a quebra automática de linhas longas:

\documentclass{beamer}
\usetheme{Boadilla}
\usepackage{listings}

\begin{document}

\begin{frame}[fragile]{CUDA C Concepts}
  \textbf{\color{orange}Kernel} \textit{Def} C functions which are executed N times in parallel by 
                                        N different CUDA threads
   \lstset{language=C++,
           basicstyle=\ttfamily,
           keywordstyle=\color{blue}\ttfamily,
           stringstyle=\color{red}\ttfamily,
           commentstyle=\color{green}\ttfamily,
          breaklines=true
          }
    \begin{lstlisting}
    // Kernel Definition
   __global__ void VecAdd(float* A, float* B, float* C)
    {
      int i = threadIdx.x;
      C[i] = A[i] + B[i]; 
    }
    int main(void)
    {
    ...
    // Kernel Invocation with N threads
    return 0;
    }
    \end{lstlisting}  
\end{frame}

\end{document}

insira a descrição da imagem aqui

Se ainda quiser reduzir o tamanho da fonte, você pode usar uma das opções de tamanho de fonte padrão (ou \fontsize{<size>}{<baseline>}\selectfont) em basicstyle, como em:

basicstyle=\ttfamily\footnotesize

Um exemplo completo em que usei \scriptsize:

\documentclass{beamer}
\usetheme{Boadilla}
\usepackage{listings}

\begin{document}

\begin{frame}[fragile]{CUDA C Concepts}
  \textbf{\color{orange}Kernel} \textit{Def} C functions which are executed N times in parallel by 
                                        N different CUDA threads
   \lstset{language=C++,
           basicstyle=\ttfamily\scriptsize,
           keywordstyle=\color{blue}\ttfamily,
           stringstyle=\color{red}\ttfamily,
           commentstyle=\color{green}\ttfamily,
          breaklines=true
          }
    \begin{lstlisting}
    // Kernel Definition
   __global__ void VecAdd(float* A, float* B, float* C)
    {
      int i = threadIdx.x;
      C[i] = A[i] + B[i]; 
    }
    int main(void)
    {
    ...
    // Kernel Invocation with N threads
    return 0;
    }
    \end{lstlisting}  
\end{frame}

\end{document}

insira a descrição da imagem aqui

Como observação lateral, eu moveria esta seção

\lstset{language=C++,
       basicstyle=\ttfamily,
       keywordstyle=\color{blue}\ttfamily,
       stringstyle=\color{red}\ttfamily,
       commentstyle=\color{green}\ttfamily,
      breaklines=true
      }

ao preâmbulo do documento.

Responder2

Opção breaklinese tamanhos de fonte menores já são explicados detalhadamente por Gonzalo.

Alinhamento de coluna flexível

As configurações padrão do pacote listingsutilizam um alinhamento de coluna fixo, onde todas as letras utilizam o mesmo espaço. Destrói as distâncias normais entre as letras da palavra, o que torna a aparência feia. Além disso, as caixas de correio são bastante largas, porque letras largas também devem caber nas caixas. Alinhamentos de colunas flexíveis obtêm melhores resultados, principalmente se o layout fixo não for necessário, veja documentação das listagens, "2.10 Colunas fixas e flexíveis" e "4.13 Alinhamento de colunas". O exemplo abaixo usa flexible.

Fonte com larguras variáveis

Além disso, as fontes podem ser melhoradas. O exemplo usa cmtta fonte de máquina de escrever da Computer Modern. Um desenvolvimento adicional dessas fontes, as fontes Latin Modern, fornecem uma fonte de máquina de escrever com larguras variáveis ​​das letras:

\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}

A opção variablettseleciona a família de fontes lmvtt. Há uma desvantagem: o sublinhado é muito largo e com muito menos espaço entre eles:

Sublinhado com lmvtt e lmtt

Isso pode ser corrigido usando o literaterecurso package listings, veja o exemplo abaixo.

Recuo

O código-fonte fica recuado acidentalmente, devido aos espaços no início da linha no arquivo fonte. Esses espaços podem ser removidos opcionalmente gobblepara evitar arquivos de origem com aparência desagradável. Na saída a fonte pode ser recuada como outros ambientes ( quote, …) usando a opção xleftmarginque pode ser definida como \leftmargini, o recuo das listas de nível superior (o próximo nível é \leftmarginii, …). Além disso, a margem direita pode ser definida como \leftmargini(o LaTeX usa o mesmo recuo para esquerda e direita), mas acho melhor ignorar o recuo direito para evitar linhas de origem quebradas entre linhas.

Cor verde

O verde é muito brilhante e difícil de ler sobre fundo branco. Um pouco mais de escuridão melhora a legibilidade. Por exemplo, o listingspacote usa darkgreenchaves e comandos no guia de referência:

\definecolor{darkgreen}{rgb}{0,0.5,0}

Exemplo completo

documentclass{beamer}
\usetheme{Boadilla}
\usepackage{listings}

\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}

\newcommand*{\vttfamily}{%
  \fontencoding{T1}\fontfamily{lmvtt}\selectfont
}

\newcommand*{\textsmallunderscore}{%
  \begingroup
    \fontencoding{T1}\fontfamily{lmtt}\selectfont
    \textunderscore
  \endgroup
}

\definecolor{darkgreen}{rgb}{0,.5,0}

\begin{document}

\begin{frame}[fragile]{CUDA C Concepts}
  \textbf{\color{orange}Kernel} \textit{Def} C functions
  which are executed N times in parallel by
  N different CUDA threads
  \lstset{
    language=C++,
    basicstyle=\ttfamily,
    keywordstyle=\color{blue}\ttfamily,
    stringstyle=\color{red}\ttfamily,
    commentstyle=\color{darkgreen}\ttfamily,
    breaklines=true,
    columns=flexible,
    literate={_}{\textsmallunderscore}1,
    gobble=4,
    xleftmargin=\leftmargini,
  }
  \begin{lstlisting}
    // Kernel Definition
    __global__ void VecAdd(float* A, float* B, float* C)
    {
      int i = threadIdx.x;
      C[i]  = A[i] + B[i];
    }
    int main(void)
    {
    ...
    // Kernel Invocation with N threads
    return 0;
    }
  \end{lstlisting}
\end{frame}

\end{document}

Resultado

informação relacionada