字体大小和 \tightlists 可能存在回忆录错误

字体大小和 \tightlists 可能存在回忆录错误

在我看来, 似乎memoir不支持\tightlists某些字体大小(firmlists顺便说一下 也不支持)。一张图片胜过千言万语:

MWE 的渲染

屏幕截图的源代码如下所示。您可以注释/取消注释\tightlists\firmlists以查看会发生什么。只有注释了这两行,我们才能正确获得高度递减的框。(但列表不再紧密 :-)

我真的发现了错误吗?还是我错过了一些明显的东西?

梅威瑟:

\documentclass[12pt]{回忆录}
% \documentclass[12pt]{文章}

\usepackage{printlen}

\newlength{\demoboxheight}

\newcommand{\demo}[1]{%
\settoheight{\demoboxheight}{\fbox{\parbox{.5\textwidth}{\begin{#1}
    \开始{逐项列举}
    \item 虚拟
    \item 虚拟
    \item 虚拟
    \end{逐项列举}
  \结束{#1}
}}}
\fbox{\parbox{.5\textwidth}{\begin{#1}
    \开始{逐项列举}
    \item 字体大小:#1
    \item 高度:\uselengthunit{pt}\printlength{\demoboxheight}
    \item 即:\uselengthunit{mm}\printlength{\demoboxheight}
    \end{逐项列举}
  \结束{#1}
}}
}

\紧密列表
% \公司列表

\开始{文档}

\demo{大}

\demo{大}

\demo{正常尺寸}

\demo{小}

\demo{脚注大小}

\demo{脚本大小}

\demo{微小}


\结束{文档}

答案1

与标准类一样articlememoir只为某些可用尺寸设置全套尺寸参数。\tiny例如,如果您切换到,列表参数不会更改,因此列表会获取当前设置,即此处的 normalsize 设置,因为所有更改都在本地组中,但是如果您从切换到,\footnotesize则会\tiny获取小列表中的 footnotesize 设置。

有些方面与字体大小有关,例如行距和项目符号等,但大多数字体变化时未指定项目之间的间距以及前后列表的间距。

相关代码复制如下,\@listi这里感兴趣的是第一级列表的设置(或不设置)。

\ProvidesFile{mem12.clo}%
             [2010/10/19 v0.4b memoir class 12pt size option]
\renewcommand{\normalsize}{%
   \@setfontsize\normalsize\@xiipt{14.5}%
   \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
   \abovedisplayshortskip \z@ \@plus3\p@
   \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
   \belowdisplayskip \abovedisplayskip
   \let\@listi\@listI}
\normalsize
\newcommand{\small}{%
   \@setfontsize\small\@xipt{13.6}%
   \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
   \abovedisplayshortskip \z@ \@plus3\p@
   \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
   \def\@listi{\leftmargin\leftmargini
               \topsep 9\p@ \@plus3\p@ \@minus5\p@
               \parsep 4.5\p@ \@plus2\p@ \@minus\p@
               \itemsep \parsep
%%               \itemindent\z@
              }%
   \belowdisplayskip \abovedisplayskip
}
\newcommand{\footnotesize}{%
   \@setfontsize\footnotesize\@xpt\@xiipt
   \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
   \abovedisplayshortskip \z@ \@plus3\p@
   \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
   \def\@listi{\leftmargin\leftmargini
               \topsep 6\p@ \@plus2\p@ \@minus2\p@
               \parsep 3\p@ \@plus2\p@ \@minus\p@
               \itemsep \parsep
%%               \itemindent\z@
              }%
   \belowdisplayskip \abovedisplayskip
}
\newcommand*{\miniscule}{\@setfontsize\miniscule\@viipt{8}}
\newcommand*{\tiny}{\@setfontsize\tiny\@viiipt{9.5}}
\newcommand*{\scriptsize}{\@setfontsize\scriptsize\@ixpt\@xpt}
\newcommand*{\large}{\@setfontsize\large\@xivpt{18}}
\newcommand*{\Large}{\@setfontsize\Large\@xviipt{22}}
\newcommand*{\LARGE}{\@setfontsize\LARGE\@xxpt{25}}
\newcommand*{\huge}{\@setfontsize\huge\@xxvpt{30}}
\ifextrafontsizes
  \newcommand*{\Huge}{\@setfontsize\Huge\@xxxpt{37}}
  \newcommand*{\HUGE}{\@setfontsize\HUGE\@xxxvipt{45}}
\else
  \let\Huge=\huge
  \let\HUGE=\huge
\fi

因此,预计某些大小可以更完整地处理列表,但是通过将列表设置设置为(例如) 0 \tightlists,会使问题更加复杂。这意味着0pt\itemsepi不是自定义列表可以获得紧密的间距,但自定义列表的尺寸则不能,因为它们不使用\itemsepi它们直接设置的\itemsep

幸运的是,在尺寸改变后,似乎有一个tightlist(没有s)你可以使用它来将(部分)参数重置为零。但它必须在列表内使用:

\documentclass[12pt]{memoir}
% \documentclass[12pt]{article}

\usepackage{printlen}

\newlength{\demoboxheight}
\makeatletter
\newcommand{\demo}[1]{%
\settoheight{\demoboxheight}{\fbox{\parbox{.5\textwidth}{\begin{#1}
    \begin{itemize}\tightlist
    \item dummy
    \item dummy
    \item dummy
    \end{itemize}
  \end{#1}
}}}
\fbox{\parbox{.5\textwidth}{\begin{#1}
    \begin{itemize}\tightlist
    \item font size: #1
    \item height: \uselengthunit{pt}\printlength{\demoboxheight}
    \item which is: \uselengthunit{mm}\printlength{\demoboxheight}
    \item \texttt{\meaning\@listi}
    \item \texttt{\the\itemsep}
    \end{itemize}
  \end{#1}
}}
} 

\tightlists
% \firmlists

\begin{document}

\demo{Large}

\demo{large}

\demo{normalsize}

\demo{small}

\demo{footnotesize}

\demo{scriptsize}

\demo{tiny}


\end{document}

答案2

所以我跟着daleif 的评论,解决了我的问题。谢谢 daleif !

对于后人来说,这个故事的寓意是:不要说\tightlists,而要使用enumitem

\usepackage{enumitem}
\setlist{nosep}

相关内容