当列表中的项目在内联数学模式下包含显示样式分数时,如何全局调整/拉伸列表中项目之间的垂直间距?

当列表中的项目在内联数学模式下包含显示样式分数时,如何全局调整/拉伸列表中项目之间的垂直间距?

这是我使用 LuaLaTeX 编译的 MWE:

\documentclass[oneside,DIV=12]{scrbook}

\usepackage{scrhack}
\usepackage[automark]{scrlayer-scrpage}
\usepackage[english]{babel}
\usepackage[babel]{microtype}
\usepackage{mathtools, amsthm, amssymb}
\usepackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
    \setmathfont{Latin Modern Math}
\usepackage{setspace}\setdisplayskipstretch{}
\usepackage{enumitem}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % List environment settings
\setlist[enumerate]{font={\bfseries}}
\setlist[enumerate,1]{label=\arabic*., labelsep=0.5em}
\setlist[enumerate,2]{label=(\roman*), align=left, leftmargin=3em, labelwidth=2.5em}
    % Resizeable \bullet symbol
\newcommand{\rbullet}[1][.75]{\mathbin{\vcenter{\hbox{\scalebox{#1}{$\bullet$}}}}} % https://tex.stackexchange.com/a/389240/228055
    % Custom amsthm theorem environments
\newtheoremstyle{custom}
  {\topsep}   % ABOVESPACE
  {\topsep}   % BELOWSPACE
  {\normalfont}  % BODYFONT
  {0pt}       % INDENT (empty value is the same as 0pt)
  {\(\rbullet\) \bfseries} % HEADFONT
  { }         % HEADPUNCT
  {\newline} % HEADSPACE
  {\thmnote{#3 }\thmname{#1}} % CUSTOM-HEAD-SPEC
\theoremstyle{custom}
\newtheorem*{problems}{Problems}
\newtheorem*{solutions}{Solutions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\onehalfspacing\KOMAoptions{DIV=current}

\begin{problems}
\begin{enumerate}
    \item[]
    % No. 01
    \item   Prove the following:
            \begin{enumerate}
                % (i)
                \item \(x^n - y^n = (x - y) (x^{n-1}+ x^{n-2} y + \dots + x y^{n-2} + y^{n-1})\).
                % (ii)
                \item \(x^3 + y^3 = (x + y) (x^2 - xy + y^2)\), (There is a particularly easy way to do this, using \textbf{(iv)}, and it will show you how to find a factorization for \(x^n + y^n\) whenever \(n\) is odd.)
            \end{enumerate}
    % No. 02
    \item What is wrong with the following ``proof''? Let \(x = y\). Then
    \begin{align*}
        x^2 &= xy, \\ 
        x^2 - y^2 &= xy - y^2, \\ 
        (x + y) (x - y) &= y (x - y), \\ 
        x + y &= y, \\ 
        2y &= y, \\ 
        2 &= 1.
    \end{align*}
    % No. 03
    \item   Prove the following:
            \begin{enumerate}
                % (i)
                \item \(\dfrac{a}{b} + \dfrac{c}{d} = \dfrac{ad + bc}{bd}\), if \(b\), \(d \neq 0\).
                % (ii)
                \item \(\left.\dfrac{a}{b} \,\middle/\, \dfrac{c}{d}\right. = \dfrac{ad}{bc}\), if \(b\), \(c\), \(d \neq 0\).  
                % (iii)
                \item If \(b\), \(d \neq 0\), then \(\dfrac{a}{b} = \dfrac{c}{d}\) if and only if \(ad = bc\). Also determine when \(\dfrac{a}{b} = \dfrac{b}{a}\).
            \end{enumerate}
    % No. 04
    \item   Find all numbers \(x\) for which
            \begin{enumerate}
                % (i)
                \item \(\dfrac{1}{x} + \dfrac{1}{1 - x} > 0\).
                % (ii)
                \item \(\dfrac{x - 1}{x + 1} > 0\).
            \end{enumerate}
    % No. 05
    \item   Prove the following:
            \begin{enumerate}
                % (i)
                \item If \(a < b\) and \(c < d\), then \(a + c < b + d\).
                % (ii)
                \item If \(a < b\), then \(-b < -a\).
            \end{enumerate}
    % No. 06
    \item   \begin{enumerate}[label=(\alph*)]
                % (a)
                \item Prove that if \(0 \leq x < y\), then \(x^n < y^n\),\(n = 1, 2, 3, \dots\)
                % (b)
                \item Prove that if \(x < y\) and \(n\) is odd, then \(x^n < y^n\).
            \end{enumerate}
\end{enumerate}
\end{problems}
\end{document}

在此处输入图片描述

当使用该enumitem包时,我通常对列表中的默认垂直值感到满意sep,但我发现当内联数学模式中有显示样式分数时,它会有点窄或紧,即\dfrac包含在\item它会有点窄或紧。例如,我发现中间的垂直间距从3, 然后3(一)第3(二)条第3(三)条44(一)4(二),结束于5对我来说还不够。不过其余的都还不错。

我的问题是: 当列表中的项目在内联数学模式下包含显示样式分数时,如何全局调整/拉伸列表中项目之间的垂直间距?

最好不要手动向每个包含内联数学模式中的显示样式分数的环境添加选项,并且不会全局影响不包含内联数学模式中的显示样式分数的其他环境的enumerate垂直间距和值,以免过度拉伸整个文档的长度。谢谢。sepenumerate

答案1

这是我想出的方法。您无需弄清楚\dfrac列表中是否存在某个位置,然后更改 sep,而是可以本地重新定义\dfrac自身,这样它就会“更高”一点,从而模拟额外的空间。

\documentclass{article}
\usepackage{amsmath}
\usepackage{enumitem}

\setlist[enumerate]{font={\bfseries}}
\setlist[enumerate,1]{label=\arabic*., labelsep=0.5em}
\setlist[enumerate,2]{label=(\roman*), align=left, leftmargin=3em, labelwidth=2.5em}

\makeatletter
\let\enumcopy\enumerate
\let\endenumcopy\endenumerate
\let\olddfrac\dfrac
\renewenvironment{enumerate}{
    \renewcommand{\dfrac}[2]{
        \olddfrac{##1}{##2}
        \ifnum\arabic{\@enumctr}>1
            \rule{0pt}{30pt}
        \fi
    }
    \enumcopy
}{
    \endenumcopy
}
\makeatother

\begin{document}

\begin{enumerate}
\item
    \begin{enumerate}
    \item $\dfrac{1}{2}$
    \item $\dfrac{1}{2}$
    \end{enumerate}
\end{enumerate}


\end{document}

在此处输入图片描述

解释:

enumerate首先,我通过执行以下操作复制环境

\let\enumcopy\enumerate
\let\endenumcopy\endenumerate

这是可行的,因为 latex 中的每个环境实际上都是两个宏\ENVendENV。之后你可以enumerate使用其自身重新定义。

\renewenvironment{enumerate}{
    \enumcopy
}{
    \endenumcopy
}

现在只需将重新定义的\dfrac命令放在环境定义内enumitem,这样它就不会影响\dfrac文档中的任何其他地方。

我们再次需要一个副本来使用其自身重新定义它。例如,\dfrac可以使用来增加高度。\rule{0pt}{<height>}

\let\olddfrac\dfrac
\renewcommand{\dfrac}[2]{\olddfrac{#1}{#2}\rule{0pt}{30pt}}

但是,如果\dfrac要将其放置在列表的第一项中,则可能不需要上面的额外空间。为了解决这个问题,您可以通过以下方式检查它是否不是第一项:

\ifnum\arabic{\@enumctr}>1
    <code>
\fi

其中\@enumctr是当前级别枚举环境的计数器。

另请注意,如果您在另一个中使用它,则必须退出#1#2添加额外的#\renew...


1pt例如,如果你将规则的宽度设置为

\rule{1pt}{30pt}

你将看到它究竟是如何工作的

在此处输入图片描述

相关内容