Подтвердить что ты не робот

Центр Latex lstlisting

Это сводит меня с ума.

Я хочу центрировать lstlisting в LaTeX.

Через 3 часа здесь можно найти код:

\lstset{ %
    caption=Descriptive Caption Text,
    label=lst:descr_capti_text,
    basicstyle=\ttfamily\footnotesize\bfseries,
    frame=tb,
    linewidth=0.6\textwidth
 }
\centering\begin{tabular}{c}
\begin{lstlisting}
printf("this should be centered!");
\end{lstlisting}
\end{tabular}

Это помещает lstlisting в центр, но не его подпись, которая идет вправо. Если я вытащил табличку, то заголовок центрируется, но код идет влево!: (

Спасибо.

4b9b3361

Ответ 1

Вместо использования ширины линии вы должны использовать xleftmargin и xrightmargin (см. texdoc listings, глава 4.10). Следующий код работает без какой-либо среды центра или мини-диска:

\lstset{
  caption=Descriptive Caption Text, 
  basicstyle=\footnotesize, frame=tb,
  xleftmargin=.2\textwidth, xrightmargin=.2\textwidth
}
\begin{lstlisting}
    printf("this should be centered!");
\end{lstlisting}

Ответ 2

Ваша подпись фактически сосредоточена над листингом. Вы просто делаете строки, которые идут вверх и вниз по вашему списку, только 0.6\textwidth long. Это заставляет его выглядеть так, как если бы подпись была вне центра. Кроме того, ваш \centering не центрирует список (видимо, если вы не сокращаете строки ниже и выше).

Это должно работать:

\begin{center}
  \lstset{%
    caption=Descriptive Caption Text,
    basicstyle=\ttfamily\footnotesize\bfseries,
    frame=tb
  }
  \begin{lstlisting}
    printf("this should be centered!");
  \end{lstlisting}
\end{center}

Вы не объясняете, почему вы хотите, чтобы разделительные строки были 0.6\textwidth длинными. Если вы действительно хотели установить ширину вашего списка, чтобы это значение, ваше подход не делает то, что вы хотите. Используйте что-то вроде мини-диска, чтобы установить ширину для всего списка.

begin{minipage}{0.6\textwidth}
  \begin{center}
    \lstset{%
      caption=Descriptive Caption Text,
      basicstyle=\ttfamily\footnotesize\bfseries,
      frame=tb,
    }
    \begin{lstlisting}
      printf("this should be centered!");
    \end{lstlisting}
  \end{center}
\end{minipage}

Ответ 3

Собственно, то, что для меня работало, - это обратное: помещение мини-диска внутри центральной среды.