Уменьшить размер шрифта в листинге

Уменьшить размер шрифта в листинге

Привет, я пытаюсь включить короткий фрагмент кода в один из моих слайдов для проектора.

Однако одна из строк не помещается в слайды. Пожалуйста, дайте мне знать, как уменьшить размер шрифта, чтобы исходный код помещался правильно.

Вот мой код,

\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}

Вот вывод текущего кода Latex. введите описание изображения здесь

решение1

В этом случае вы можете использовать breaklines=trueдля активации автоматического переноса длинных строк:

\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}

введите описание изображения здесь

Если вы все же хотите уменьшить размер шрифта, вы можете использовать один из стандартных переключателей размера шрифта (или \fontsize{<size>}{<baseline>}\selectfont) basicstyle, например:

basicstyle=\ttfamily\footnotesize

Полный пример, в котором я использовал \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}

введите описание изображения здесь

В качестве примечания, я бы переместил этот раздел

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

к преамбуле документа.

решение2

Опции breaklinesи меньшие размеры шрифта уже подробно описаны Гонсало.

Гибкое выравнивание столбцов

Настройки пакета по умолчанию listingsиспользуют фиксированное выравнивание столбцов, где все буквы используют одинаковое пространство. Это разрушает обычные расстояния между буквами в слове, что делает его вид уродливым. Кроме того, поля для писем довольно широкие, потому что широкие буквы тоже должны вписываться в поля. Гибкое выравнивание столбцов дает лучшие результаты, особенно если фиксированная разметка не нужна, см. документацию листингов, "2.10 Фиксированные и гибкие столбцы" и "4.13 Выравнивание столбцов". В примере ниже используется flexible.

Шрифт с переменной шириной

Также шрифты могут быть улучшены. В примере используется cmtt, шрифт пишущей машинки Computer Modern. Дальнейшее развитие этих шрифтов, шрифты Latin Modern, предоставляют шрифт пишущей машинки с переменной шириной букв:

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

Option variablettвыбирает семейство шрифтов lmvtt. Есть недостаток: подчеркивание слишком широкое, а между ними слишком мало места:

Подчеркивание с помощью lmvtt и lmtt

Это можно исправить с помощью literateфункции package listings, см. пример ниже.

Отступы

Исходный код случайно отступает, потому что в начале строки в исходном файле есть пробелы. Эти пробелы можно удалить с помощью параметра, gobbleчтобы избежать некрасивого вида исходных файлов. В выводе исходный код может быть отступлен, как и другие среды ( quote, …), используя параметр xleftmargin, который можно установить на \leftmargini, отступ списков верхнего уровня (следующий уровень — \leftmarginii, …). Также правое поле можно установить на \leftmargini(LaTeX использует одинаковый отступ слева и справа), но я думаю, что лучше игнорировать правый отступ, чтобы избежать разрывов строк исходного кода.

Цвет зеленый

Зеленый цвет очень яркий и его трудно читать на белом фоне. Немного больше темноты улучшает читаемость. Например, пакет listingsиспользует darkgreenдля клавиш и команд в справочном руководстве:

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

Полный пример

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}

Результат

Связанный контент