LaTeX: убрать левое поле списка внутри таблицы
Используя 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 ответа
Да, маржа действительно исходит из перечисления. Но, к счастью, документация пакета перечисления отмечает пакет:
resetmargins = true | false (по умолчанию: false)
Если это правда, отступ из списочных сред, таких как enumerate или itemize, сбрасывается, т.е. не используется.
Следовательно, следующее должно помочь:
\begin{lstlisting}[numbersep=0pt,resetmargins=true]
С Уважением,
Christoph
Проблема вызвана табличной средой. По умолчанию латекс вставляет небольшое пространство перед строкой. Этого можно избежать, используя код @{}
до спецификации первого столбца.
\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}
Другой подход заключается в использовании отрицательного левого поля.
\begin{enumerate}[
xleftmargin=-40pt %the 40pt may not apply depending on your environment
]
% ... your enumeration here ...
\end{enumerate}
(Я использовал это для списков фрагментов кода)