Привет, я пытаюсь включить короткий фрагмент кода в один из моих слайдов для проектора.
Однако одна из строк не помещается в слайды. Пожалуйста, дайте мне знать, как уменьшить размер шрифта, чтобы исходный код помещался правильно.
Вот мой код,
\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
. Есть недостаток: подчеркивание слишком широкое, а между ними слишком мало места:
Это можно исправить с помощью 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}