Hallo, ich versuche, einen kurzen Codeausschnitt in eine meiner Beamer-Folien einzufügen
Allerdings passt eine der Zeilen nicht in die Folien. Bitte lassen Sie mich wissen, wie ich die Schriftgröße verringern kann, damit der Quellcode richtig hineinpasst.
Hier ist mein Code,
\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}
Hier ist die Ausgabe des aktuellen Latex-Codes.
Antwort1
In diesem Fall können Sie den breaklines=true
automatischen Zeilenumbruch für lange Zeilen aktivieren:
\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}
Wenn Sie die Schriftgröße dennoch verringern möchten, können Sie einen der Standard-Schriftgrößenschalter (oder \fontsize{<size>}{<baseline>}\selectfont
) in verwenden basicstyle
, wie in:
basicstyle=\ttfamily\footnotesize
Ein vollständiges Beispiel, in dem ich Folgendes verwendet habe \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}
Als Randbemerkung möchte ich diesen Abschnitt verschieben
\lstset{language=C++,
basicstyle=\ttfamily,
keywordstyle=\color{blue}\ttfamily,
stringstyle=\color{red}\ttfamily,
commentstyle=\color{green}\ttfamily,
breaklines=true
}
zur Präambel des Dokuments.
Antwort2
Option breaklines
und kleinere Schriftgrößen wurden von Gonzalo bereits ausführlich erklärt.
Flexible Spaltenausrichtung
Die Standardeinstellungen des Pakets listings
verwenden eine feste Spaltenausrichtung, bei der alle Buchstaben den gleichen Abstand einnehmen. Dadurch werden die normalen Abstände zwischen den Buchstaben im Wort zerstört, was das Erscheinungsbild unschön macht. Außerdem sind die Buchstabenkästen recht breit, da auch breite Buchstaben in die Kästen passen müssen. Flexible Spaltenausrichtungen erzielen bessere Ergebnisse, insbesondere wenn das feste Layout nicht benötigt wird, siehe Dokumentation der Auflistungen, „2.10 Feste und flexible Spalten“ und „4.13 Spaltenausrichtung“. Das folgende Beispiel verwendet flexible
.
Schriftart mit variabler Breite
Auch die Schriftarten können verbessert werden. Das Beispiel verwendet cmtt
, die Schreibmaschinenschriftart von Computer Modern. Eine Weiterentwicklung dieser Schriftarten, die Latin Modern-Schriftarten, bieten eine Schreibmaschinenschriftart mit variabler Breite der Buchstaben:
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
Option variablett
wählt Schriftfamilie aus lmvtt
. Es gibt einen Nachteil, der Unterstrich ist zu breit und hat zu wenig Platz dazwischen:
Dies kann mit der literate
Paketfunktion behoben werden listings
, siehe Beispiel unten.
Einrücken
Der Quellcode wird versehentlich eingerückt, da die Leerzeichen am Zeilenanfang in der Quelldatei vorhanden sind. Diese Leerzeichen können mit einer Option entfernt werden, gobble
um hässlich aussehende Quelldateien zu vermeiden. In der Ausgabe kann der Quellcode wie in anderen Umgebungen ( quote
, …) eingerückt werden, indem eine Option verwendet wird xleftmargin
, die auf gesetzt werden kann \leftmargini
, die Einrückung von Listen der obersten Ebene (die nächste Ebene ist \leftmarginii
, …). Auch der rechte Rand könnte auf gesetzt werden \leftmargini
(LaTeX verwendet für links und rechts die gleiche Einrückung), aber ich denke, es ist besser, die rechte Einrückung zu ignorieren, um Quellzeilen zu vermeiden, die über mehrere Zeilen umbrochen werden.
Farbe grün
Das Grün ist sehr hell und auf weißem Hintergrund schwer zu lesen. Etwas mehr Dunkelheit verbessert die Lesbarkeit. Beispielsweise listings
verwendet das Paket darkgreen
für Tasten und Befehle im Referenzhandbuch:
\definecolor{darkgreen}{rgb}{0,0.5,0}
Vollständiges Beispiel
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}