Hola, estoy intentando incluir un fragmento de código corto en una de mis diapositivas del proyector.
Sin embargo, una de las líneas no encaja en las diapositivas. Déjame saber cómo disminuir el tamaño de fuente para que el código fuente se ajuste correctamente.
Aquí está mi código,
\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}
Aquí está el resultado del código de látex actual.
Respuesta1
En este caso puedes utilizar breaklines=true
para activar el salto de línea automático de líneas largas:
\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}
Si aún desea reducir el tamaño de fuente, puede usar uno de los interruptores de tamaño de fuente estándar (o \fontsize{<size>}{<baseline>}\selectfont
) en basicstyle
, como en:
basicstyle=\ttfamily\footnotesize
Un ejemplo completo en el que utilicé \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}
Como nota al margen, movería esta sección
\lstset{language=C++,
basicstyle=\ttfamily,
keywordstyle=\color{blue}\ttfamily,
stringstyle=\color{red}\ttfamily,
commentstyle=\color{green}\ttfamily,
breaklines=true
}
al preámbulo del documento.
Respuesta2
breaklines
Gonzalo ya explica en detalle la opción y los tamaños de fuente más pequeños.
Alineación de columnas flexible
La configuración predeterminada del paquete listings
usa una alineación de columnas fija, donde todas las letras usan el mismo espacio. Destruye las distancias normales entre las letras de la palabra, lo que hace que la palabra se vea fea. Además, los buzones son bastante anchos, porque en ellos también deben caber letras anchas. Las alineaciones de columnas flexibles obtienen mejores resultados, especialmente si no se necesita el diseño fijo; consulte la documentación de listados, "2.10 Columnas fijas y flexibles" y "4.13 Alineación de columnas". El siguiente ejemplo utiliza flexible
.
Fuente con anchos variables
También se pueden mejorar las fuentes. El ejemplo utiliza cmtt
, la fuente de máquina de escribir de Computer Modern. Un desarrollo posterior de estas fuentes, las fuentes Latin Modern, proporcionan una fuente de máquina de escribir con anchos de letras variables:
\usepackage[T1]{fontenc}
\usepackage[variablett]{lmodern}
La opción variablett
selecciona la familia de fuentes lmvtt
. Hay un inconveniente: el guión bajo es demasiado ancho y hay menos espacio entre ellos:
Esto se puede solucionar utilizando la literate
función del paquete listings
; consulte el ejemplo a continuación.
Sangría
El código fuente recibe sangría por accidente, debido a los espacios al inicio de la línea en el archivo fuente. Estos espacios se pueden eliminar opcionalmente gobble
para evitar archivos fuente de aspecto desagradable. En la salida, la fuente se puede sangrar como otros entornos ( quote
,…) usando la opción xleftmargin
que se puede configurar en \leftmargini
, la sangría de las listas de nivel superior (el siguiente nivel es \leftmarginii
,…). También se podría establecer el margen derecho \leftmargini
(LaTeX usa la misma sangría para izquierda y derecha), pero creo que es mejor ignorar la sangría derecha para evitar líneas fuente que estén divididas entre líneas.
Color verde
El verde es muy brillante y difícil de leer sobre un fondo blanco. Un poco más de oscuridad mejora la legibilidad. Por ejemplo, el listings
paquete utiliza darkgreen
claves y comandos en la guía de referencia:
\definecolor{darkgreen}{rgb}{0,0.5,0}
Ejemplo completo
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}