【问题标题】:Change \parskip only inside enumerate & itemize environment仅在 enumerate 和 itemize 环境中更改 \parskip
【发布时间】:2010-02-01 22:34:36
【问题描述】:

有什么方法可以在某些环境中将\parskip 更改为不同的值,即enumerateitemize

我希望段落之间有空格 (\setlength{\parskip}{1em plus 1pt minus 1pt}),但不在 itemize 或 enumerate 内。

【问题讨论】:

    标签: latex markup


    【解决方案1】:

    如果你使用enumitem 包,你可以在你的序言中说

    \setlist[itemize]{parsep=0pt}
    \setlist[enumerate]{parsep=0pt}
    

    得到你想要的。 enumitem 允许进行更多列表自定义,请参阅其文档了解详细信息。

    【讨论】:

    • 非常感谢。这是对我最有帮助的答案。 +1。
    • 这是一个不错的包。不幸的是,it conflicts with beamer.
    【解决方案2】:

    是的,你可以;但是您必须从类文件中更改 enumerateitemize 环境(通过复制它们并添加您的 \parskip),或者通过重新定义适用于所有列表的 \@listi

    \makeatletter
    
    \def\@listi{%
      % default settings for base LaTeX classes at 10pt:
      \parsep 4pt plus 2pt minus 1pt
      \topsep 8pt plus 2pt minus 4pt
      \itemsep 4pt plus 2pt minus 1pt
      % your settings:
      \parskip 1em plus 1pt minus 1pt
    }
    
    \makeatother
    

    如果您想在嵌套列表级别进行不同的设置,请更改 \@listii\@listiii 等。

    【讨论】:

    • 啊,我希望会有更简单的事情。谢谢
    • 如果你喜欢冒险,你可以试试\expandafter\def\expandafter\@listi\expandafter{\@listi \parsep 1em plus 1pt minus 1pt} 这样,你不需要复制现有的设置(\expandafter 会为你做这些)。
    【解决方案3】:

    你也可以使用:

    begin{itemize} \itemsep -5pt
    \item foo
    \item bar
    \end{itemize}
    

    这只会影响当前列表。

    【讨论】:

      【解决方案4】:

      序言中的以下补充更新了enumerate 以进行建议的更改:

      \let\oldenumerate\enumerate% Keep a copy of \enumerate (or \begin{enumerate})
      \let\endoldenumerate\endenumerate% Keep a copy of \endenumerate (or \end{enumerate})
      \renewenvironment{enumerate}
        {\begin{oldenumerate}
           \setlength{\parskip}{0pt}}% Adjust \parskip to suit your needs
        {\end{oldenumerate}}
      

      这是一个完整的最小示例,显示了将\parskip 设置为0pt 时的调整:

      \documentclass{article}
      \begin{document}
      
      \begin{enumerate}
        \item First line
      
          Second line
      \end{enumerate}
      
      \let\oldenumerate\enumerate
      \let\endoldenumerate\endenumerate
      \renewenvironment{enumerate}
        {\begin{oldenumerate}
           \setlength{\parskip}{0pt}}
        {\end{oldenumerate}}
      
      \begin{enumerate}
        \item First line
      
          Second line
      \end{enumerate}
      
      \end{document}
      

      itemize 的做法完全相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2023-01-02
        • 2012-05-15
        • 2012-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多