我尝试创建一个没有标签和缩进的列表 - 与前面的文本对齐到相同的左边距。为什么这不起作用?:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\noindent No indentation --- before the \verb|list|.
\begin{list}{}{}
\setlength{\leftmargin}{0pt}
\setlength{\labelwidth}{0pt}
\setlength{\labelsep}{0pt}
\item \lipsum[2]
\end{list}
\end{document}
答案1
如果您在第二个参数中设置长度参数,它就会起作用\begin{list}
:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\noindent No indentation --- before the \verb|list|.
\begin{list}{}{%
\setlength{\leftmargin}{0pt}%
\setlength{\labelwidth}{0pt}%
\setlength{\labelsep}{0pt}%
}
\item \lipsum[2]
\end{list}
\end{document}
你也可以使用trivlist
环境。引用 Lamport 的话,LaTeX:文档准备系统,第 115 页:
该
trivlist
环境是环境的受限形式,list
其中边距不缩进,\item
没有可选参数的命令不产生文本。该环境没有参数,非常类似于list
第二个参数将\leftmargin
、\rightmargin
、\labelwidth
和\itemindent
的长度设置为零的环境。
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\noindent No indentation --- before the \verb|list|.
\begin{trivlist}
\item \lipsum[2]
\end{trivlist}
\end{document}
答案2
这是对lockstep答案的补充。
执行长度修改时,列表参数已使用 TeX\parshape
基元设置。对于整形属性,您需要使用第二个参数,\begin{list}{#1}{#2}
因为它是在设置list
形状之前插入的:
\def\list#1#2{%
\ifnum \@listdepth >5\relax
\@toodeep
\else
\global\advance\@listdepth\@ne
\fi
\rightmargin\z@
\listparindent\z@
\itemindent\z@
\csname @list\romannumeral\the\@listdepth\endcsname
\def\@itemlabel{#1}%
\let\makelabel\@mklab
\@nmbrlistfalse
#2\relax % <---- #2 is inserted here
\@trivlist
\parskip\parsep
\parindent\listparindent
\advance\linewidth -\rightmargin
\advance\linewidth -\leftmargin
\advance\@totalleftmargin \leftmargin
\parshape \@ne \@totalleftmargin \linewidth % <---- this sets the paragraph shape
\ignorespaces}
知道 的list
缩进为\@totalleftmargin
,即\advance
,\leftmargin
也可以设置\@totalleftmargin
为-\leftmargin
:
\documentclass{article}
\usepackage{lipsum}% http://ctan.org/pkg/lipsum
\begin{document}
\noindent No indentation --- before the \verb|list|.
\begin{list}{}{}
\makeatletter
\setlength{\leftskip}{-\@totalleftmargin}
\makeatother
\item \lipsum[2]
\item \lipsum[1]
\end{list}
\end{document}