您好,我正在嘗試在我的一張投影機幻燈片中包含一個簡短的程式碼片段
然而,其中一條線不適合幻燈片。請讓我知道如何減小字體大小以使原始程式碼正確適合。
這是我的程式碼,
\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}
這是當前乳膠代碼的輸出。
答案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
Gonzalo 已經詳細解釋了選項和較小的字體大小。
靈活的列對齊方式
包的預設設定listings
使用固定的列對齊方式,其中所有字母使用相同的空格。它破壞了單字中字母之間的正常距離,使得看起來很難看。此外,信箱非常寬,因為寬字母也必須適合信箱。靈活的列對齊可以獲得更好的結果,特別是在不需要固定佈局的情況下,請參閱清單文件「2.10 固定和靈活列」和「4.13 列對齊」。下面的範例使用flexible
.
寬度可變的字體
字體也可以改進。此範例使用cmtt
Computer Modern 的打字機字體 。這些字體的進一步發展,拉丁現代字體,提供了字母寬度可變的打字機字體:
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
選項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}