6

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

这是我得到的结果:

.

如您所见,代码左侧有一个边距。我想这个边距是用来编号的,但我不需要编号并且想摆脱它。我尝试更改一些选项(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}

我可以推断出问题是因为该表位于枚举项中。

有没有办法解决这个问题?

4

3 回答 3

11

该问题是由表环境引起的。默认情况下,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}
于 2010-07-01T07:22:12.153 回答
7

是的,利润确实来自枚举。但幸运的是,listing包的包文档说明:

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

如果为真,来自列表环境(如 enumerate 或 itemize)的缩进将被重置,即不使用。

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

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

问候,
克里斯托夫

于 2010-07-01T08:12:14.883 回答
0

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

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

(我将其用于代码片段列表)

于 2019-07-30T01:57:49.713 回答