こんにちは。私は短いコードスニペットをビーマースライドの1つに含めようとしています。
しかし、1 行がスライドに収まりません。ソース コードが適切に収まるようにフォント サイズを小さくする方法を教えてください。
これが私のコードです。
\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
と小さいフォント サイズについては、Gonzalo によってすでに詳しく説明されています。
柔軟な列配置
パッケージのデフォルト設定ではlistings
、すべての文字が同じスペースを使用する固定列配置が使用されます。これにより、単語内の文字間の通常の距離が破壊され、見た目が醜くなります。また、幅の広い文字もボックスに収まる必要があるため、文字ボックスはかなり広くなります。柔軟な列配置を使用すると、特に固定レイアウトが必要ない場合は、より良い結果が得られます。リストのドキュメント、「2.10 固定列と柔軟な列」および「4.13 列配置」を参照してください。以下の例では を使用していますflexible
。
可変幅フォント
フォントも改良できます。例ではcmtt
、Computer Modern のタイプライター フォントを使用しています。これらのフォントをさらに発展させた Latin Modern フォントは、文字の幅が可変のタイプライター フォントを提供します。
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
オプションはvariablett
フォント ファミリを選択します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}