LaTeX: убрать левый край списка внутри таблицы - PullRequest
4 голосов
/ 30 июня 2010

Используя LaTeX , мне нужно показать фрагмент кода внутри таблицы.Вот пример того, что я пытаюсь сделать:

\begin{document}
Par exemple :
\begin{center}
\begin{tabular}{lp{5cm}l}
\hline
Méthode & Description & Exemple d'utilisation\\
\hline
\texttt{isLetter()}& Indique si le caractère est une lettre de l'alphabet. &
\begin{lstlisting}[numbersep=0pt]
QChar MyChar('x');
bool IsLetter = MyChar.isLetter();
\end{lstlisting} \\
\hline
\texttt{toUpper()}& Retourne le même caractère mais en majuscules. & toto \\
\hline
\end{tabular}
\end{center}
\end{document}

Вот результат, который я получаю:

http://img693.imageshack.us/img693/1709/latexcodetable.png.

Как видите, тамполе слева от кодаЯ думаю, что это поле для нумерации, но мне не нужна нумерация, и я хотел бы от нее избавиться.Я попытался изменить некоторые параметры (numbersep, xleftmargin), но ни один из них не работает так, как мне хочется.

ОБНОВЛЕНИЕ

Вот полный документ, демонстрирующийпроблема:

\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern,textcomp}
\usepackage[frenchb]{babel}
\usepackage{listings}

\begin{document}
   \begin{enumerate}
   \item Par exemple :
      \begin{center}
      \begin{tabular}{lp{5cm}l}
      \hline
      Méthode & Description & Exemple d'utilisation\\
      \hline
      \texttt{isLetter()}& Indique si le caractère est une lettre de l'alphabet. &
      \begin{lstlisting}[numbersep=0pt]
QChar MyChar('x');
bool IsLetter = MyChar.isLetter();
// IsLetter vaut vrai
QChar MyChar2('&');
IsLetter = MyChar2.isLetter();
// IsLetter vaut faux
      \end{lstlisting}\\
      \hline
      \texttt{toUpper()}& Retourne le même caractère mais en majuscules. & toto \\
      \end{tabular}
      \end{center}
   \end{enumerate}
\end{document}

Я могу сделать вывод, что проблема в том, что таблица находится в элементе перечисления.

Есть ли способ решить эту проблему?

Ответы [ 2 ]

7 голосов
/ 01 июля 2010

Проблема вызвана табличной средой.По умолчанию латекс вставляет небольшое пространство перед строкой.Этого можно избежать, используя код @{} перед указанием первого столбца.

\begin{tabular}{@{}lp{5cm}l}
...
\end{tabular}

Для получения дополнительной информации о @{} см. эту ссылку .

Вашполный пример кода будет тогда

\documentclass[a4paper,11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern,textcomp}
\usepackage[frenchb]{babel}
\usepackage{listings}

\begin{document}
   \begin{enumerate}
   \item Par exemple :
      \begin{center}
      \begin{tabular}{@{}lp{5cm}l}
      \hline
      Méthode & Description & Exemple d'utilisation\\
      \hline
      \texttt{isLetter()}& Indique si le caractère est une lettre de l'alphabet. &
      \begin{lstlisting}[numbersep=0pt]
QChar MyChar('x');
bool IsLetter = MyChar.isLetter();
// IsLetter vaut vrai
QChar MyChar2('&');
IsLetter = MyChar2.isLetter();
// IsLetter vaut faux
      \end{lstlisting}\\
      \hline
      \texttt{toUpper()}& Retourne le même caractère mais en majuscules. & toto \\
      \end{tabular}
      \end{center}
   \end{enumerate}
\end{document}
4 голосов
/ 01 июля 2010

Да, маржа действительно исходит из перечисления. Но, к счастью, документация пакета перечисления отмечает пакет:

resetmargins = true | false (по умолчанию: false)

Если true, отступ из списочных сред, таких как enumerate или itemize сбрасывается, т.е. не используется.

Следовательно, следующее должно помочь:

\begin{lstlisting}[numbersep=0pt,resetmargins=true]

С уважением,
Christoph

...