Agregar código de programa al listado

Agregar código de programa al listado

Quiero hacer un buen titular. Para que no sobresalga, sino que quede exactamente con el marco. ¿Cómo configuro el ancho y el alto del encabezado gris? ¿Se puede hacer esto automáticamente?

Y aún así, ¿por qué las palabras no destacan en diferentes colores? Después de todo, uso el color del paquete. Gracias.

  \documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english,russian]{babel}
\usepackage{listings}
\lstset{inputencoding=utf8,extendedchars=false,keepspaces=true}
\renewcommand{\lstlistingname}{Листинг}

\usepackage{color} %% это для отображения цвета в коде

\usepackage{caption}
\DeclareCaptionFont{white}{\color{white}} %% это сделает текст заголовка белым
%% код ниже нарисует серую рамочку вокруг заголовка кода.
\DeclareCaptionFormat{listing}{\colorbox[rgb]{0.25,0.25,0.25}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}


\begin{document}
    
 \lstset{
       language=C, 
       numbers=left,       
        numberstyle=\small, 
       numbersep=8pt,  
       frame = single,    
       framexleftmargin=25pt, 
       framexrightmargin=75pt,
       captionpos=t 
 }

\begin{lstlisting}[label=some-code,caption={Это крутой исходный код}]
int main(void) // главная программа
{
int i, j; // инициализация счётчиков

// Сей код множит матрицу величиною 3x3
for (i=0; i<3; ++i) {
for (j=0; j<3; ++j) printf("%5.1f", m[i*3+j]);
putchar('\n');
}

// Вызов басурманской библиотеки BLAS
cblas_dgemv(CblasRowMajor, CblasNoTrans,
3, 3, 1.0, m, 3, x, 1, 0.0, y, 1);

// Подаём челобитную на экран
for (i=0; i<3; ++i) printf("%5.1f\n", y[i]);

return 0;
}
\end{lstlisting}

\end{document}

Respuesta1

¿Te refieres a algo como esto?

ejemplo de listado

El espacio encima y debajo del título del encabezado se controla con abovecaptionskip=parámetro y belowcaptionskip=parámetro. No tengo fuente T2A, así que usé Noto Serify fontspeccompilé con xelatex, y lo usé belowcaptionskip=0.5emcomo valor de parámetro, pero puedes cambiar/ajustar según necesites.

El color también se realiza con (muchos) parámetros, por ejemplo, para palabras clave,keywordstyle=\color{blue}\bfseries,

Consulte la página 6 del manual para conocer otros parámetros (hacer texdoc listings).

MWE

\documentclass[11pt]{article}
%\usepackage[utf8]{inputenc}
%\usepackage[T2A]{fontenc}

\usepackage{xcolor} %% это для отображения цвета в коде
\usepackage{fontspec}
\setmainfont{Noto Serif}
\usepackage[english,russian]{babel}
\usepackage{listings}
\lstset{inputencoding=utf8,extendedchars=false,keepspaces=true}
\renewcommand{\lstlistingname}{Листинг}

\usepackage{caption}
\DeclareCaptionFont{white}{\color{yellow}} %% это сделает текст заголовка белым
%% код ниже нарисует серую рамочку вокруг заголовка кода.
\DeclareCaptionFormat{listing}{\colorbox[rgb]{0.25,0.25,0.25}{\parbox{\textwidth}{#1#2#3}}}
\captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white}


\begin{document}
    
 \lstset{
       language=C, 
       numbers=left,       
        numberstyle=\small, 
       numbersep=8pt,  
       frame = single,    
       framexleftmargin=25pt, 
       framexrightmargin=75pt,
       captionpos=t,
    %       abovecaptionskip=0pt,
       belowcaptionskip=0.5em, 
        keywordstyle=\color{blue}\bfseries,
 }

\begin{lstlisting}[label=some-code,caption={Это крутой исходный код}]
int main(void) // главная программа
{
int i, j; // инициализация счётчиков

// Сей код множит матрицу величиною 3x3
for (i=0; i<3; ++i) {
for (j=0; j<3; ++j) printf("%5.1f", m[i*3+j]);
putchar('\n');
}

// Вызов басурманской библиотеки BLAS
cblas_dgemv(CblasRowMajor, CblasNoTrans,
3, 3, 1.0, m, 3, x, 1, 0.0, y, 1);

// Подаём челобитную на экран
for (i=0; i<3; ++i) printf("%5.1f\n", y[i]);

return 0;
}
\end{lstlisting}

\end{document}

información relacionada