xgalley 打破回忆录和 ntheorem

xgalley 打破回忆录和 ntheorem

我还有一个关于实验性 expl3 包的问题xgalley:这次,简单地加载包会导致memoir和出现问题ntheorem。考虑下面的 MWE。当我加载时xgalley,会发生以下事情:

  • 我的间距\maketitle坏了
  • 定理变得缩进,而以前并不是这样。
  • 我的文档中添加了空白的第二页(下面的屏幕截图中看不到)

这一切都能解决吗?

\documentclass[a5paper]{memoir}

\usepackage{lipsum,ntheorem}

\title{Blahblah}
\author{Me, myself, and I}

\newtheorem{theorem}{Theorem}

\usepackage{xgalley}

\begin{document}

\maketitle

\begin{theorem}
\lipsum[1]
\end{theorem}

\end{document}

xgalley

在此处输入图片描述

没有xgalley

在此处输入图片描述

答案1

这不是一个修复。我认为,考虑到代码的实验状态,目前更重要的是找到问题。

因此,我查看了l3galley代码,找到了所有可能重要的标准 LaTeX/TeX 命令的重新定义,并设置了一个测试环境。

有了它您可以恢复命令的“旧”含义。

注意力:这些命令并不独立,因此如果只恢复部分命令,则很有可能一切都会中断。但对于调查来说,这仍然非常有用。

在您的例子中,很容易发现缩进是由 的更改引起的\everypar,而间距是一个\addvspace问题。空白页是由\clearpage重新定义引起的,重新定义执行了\newpage,然后插入了一个框,但该框不会像原始\clearpage代码中那样被丢弃——在我看来,这看起来像是一个错误。

\documentclass[a5paper]{memoir}
\usepackage{expl3}

\ExplSyntaxOn
%save the old definitions
\clist_set:Nn\l_tmpa_clist{
  clearpage,
  nobreak,
  noindent,
  vspace,
  @vspace,
  @xnewline,
  @newline,
  newline,
  addpenalty,
  addvspace,
  @afterheading,
  @hangfrom,
  @normalcr,
  @par,
  everypar
  }

\clist_map_inline:Nn\l_tmpa_clist{\cs_set_eq:cc{ORI#1}{#1}}
\cs_set_eq:NN \ORINewline\\
\cs_set_eq:Nc \ORIpar { @ @ par }
\skip_set_eq:NN\l_tmpa_skip\parskip
\ExplSyntaxOff

\usepackage{lipsum}
\usepackage{ntheorem}

\title{Blahblah}
\author{Me, myself, and I}

\newtheorem{theorem}{Theorem}

\usepackage{l3galley}

% Restore the old meanings, choose the one you want to test
\ExplSyntaxOn\makeatletter
\clist_set:Nn\l_tmpa_clist{
%  clearpage,
%  nobreak,
%  noindent,
%  vspace,
%  @vspace,
%  @xnewline,
%  @newline,
%  newline,
%  addpenalty,
%  addvspace,
%  @afterheading,
%  @hangfrom,
%  @normalcr,
%  @par,
%  everypar
  }
\clist_map_inline:Nn\l_tmpa_clist{\cs_set_eq:cc{#1}{ORI#1}}
%\cs_set_eq:NN \\\ORINewline
%\cs_set_eq:cN  { @ @ par }\ORIpar
%\cs_set_eq:Nc \@normalcr { \cs_to_str:N \\ }
%\skip_set_eq:NN\parskip\l_tmpa_skip

\ExplSyntaxOff\makeatother


\begin{document}

%wrong spacing between lists:
\begin{center}
blub
\end{center}
\vspace*{10pt}
\begin{center}
blub
\end{center}

{
\let\addvspace\ORIaddvspace

\begin{center}
blub
\end{center}
\vspace*{10pt}
\begin{center}
blub
\end{center}
}

\maketitle

\begin{theorem}
blub\lipsum[1]
\end{theorem}

\end{document}

相关内容