你好,我正在尝试将一小段代码片段包含到我的一张投影仪幻灯片中
但是其中一行不适合幻灯片。请告诉我如何减小字体大小以使源代码正确适合。
这是我的代码,
\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 的打字机字体。这些字体的进一步发展,即 Latin Modern 字体,提供了一种字母宽度可变的打字机字体:
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
Optionvariablett
选择字体系列lmvtt
。有一个缺点,下划线太宽,中间的空间太小:
可以使用literate
包的功能来修复此问题listings
,请参见下面的示例。
缩进
源代码被意外缩进,因为源文件中行首有空格。这些空格可以通过选项删除,gobble
以避免源文件看起来很糟糕。在输出中,源可以像其他环境一样缩进( ,...),使用可以设置为的quote
选项,顶级列表的缩进(下一级是,...)。右边距也可以设置为(LaTeX 对左右使用相同的缩进),但我认为,最好忽略右缩进,以避免源行跨行断开。xleftmargin
\leftmargini
\leftmarginii
\leftmargini
颜色 绿色
绿色非常亮,在白色背景上难以阅读。稍微暗一点可以提高可读性。例如,该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}