LaTeX:在表格中删除列表的左边距

7
使用 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}

这是我得到的结果:

.

正如您所看到的,代码左侧有一个边距。我猜这个边距是为了编号,但我不需要编号,想要去掉它。我尝试更改了一些选项(numbersepxleftmargin),但没有达到我希望的效果。 更新 这里是完整的文档,展示了问题:
\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}

我可以推断问题是因为该表格位于枚举项中。是否有解决方法?

很遗憾,我无法重现您的错误。我已经使用article-documentclass和您提供的代码片段进行了测试,但没有任何缩进。无论如何,您可以尝试编写\noindent\begin{lstlisting},这将避免段落缩进(必须在开头使用)。 - tux21b
同样的问题,没有缩进。我们能看到你的导言吗? - Joseph Wright
@tux21 和 @Joseph Wright:我更新了我的问题。我的第一个代码片段没有显示我的表格是枚举项的一部分。这是问题的根源,但我不知道如何解决它。 - Jérôme
1
图片链接已损坏。重新上传? - Nathaniel M. Beaver
3个回答

14

问题是由表格环境引起的。默认情况下,latex在行前插入了一个小空间。可以通过在第一列规范之前使用代码@{}来避免这种情况。

\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}

@midtiby:非常感谢你的提示,我之前不知道 @{}。然而它并没有解决我的实际问题(但是 tux21b 解决了)。谢谢! - Jérôme

8

是的,这个边距确实来自于枚举。但幸运的是,listing包的文档注明:

resetmargins= true|false (默认值:false)

如果为true,则重置像enumerate或itemize这样的列表环境中的缩进,即不使用。

因此,以下内容应该会有所帮助:

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

敬礼,
克里斯托夫


使用lstset对表格外的图像并没有起作用(与此问题不同)。 - Caleb Stanford

0

另一种方法是使用负左边距。

\begin{enumerate}[
        xleftmargin=-40pt %the 40pt may not apply depending on your environment
    ]
    % ... your enumeration here ...
\end{enumerate}

(我用这个来列出代码片段)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接