使用 hyperref 和 fleqn 时方程前的额外垂直空间

使用 hyperref 和 fleqn 时方程前的额外垂直空间

当同时使用 hyperref 和 fleqn 时,我在编号方程上方获得了一些额外的垂直空间。我相信这个问题是 hyperref 中的一个已知错误,并且已在

但我无法成功地将那里给出的解决方法应用于我的具体问题,这就是我需要一些帮助的地方。这是一个 MnWE:

\documentclass[fleqn]{report}
\usepackage{hyperref}
\usepackage{amsmath}

\newcommand{\question}[4]{
    \par \noindent \textbf{\ignorespaces#2}
    \nopagebreak[2]
    \vspace{10pt}
    \par \noindent \ignorespaces#3 \textit{\ignorespaces#4}
    \vspace{20pt}
}

\begin{document}

\question{default}{
  A question whose answer is an equation*.
}{
  \begin{equation*} \frac{x}{(1-x)^2} \end{equation*}
}{}

\question{default}{
  A question whose answer is an equation.
}{
  \begin{equation} \frac{x}{(1-x)^2} \end{equation}
}{}


\question{default}{
  A question whose answer is plain old text.
}{
  The answer.
}{}

\end{document}

MWE 输出

一些背景

我有一系列问答形式的笔记。我喜欢用一张纸盖住(打印的)笔记,然后把纸往下移,直到我只能看到问题,这样我就可以复习它们了。这时,我会试着记住答案,一旦我认为我记住了,我就会把纸往下移,让答案显现出来。

直到最近,包含此内容的 tex 文件还是有点混乱,所以我决定尝试编写上面看到的宏。如果我的宏完全错误,请告诉我,我会单独提出一个问题,说明如何正确执行此操作。

答案1

你永远不应该在显示的方程式前有段落分隔符,TeX 在这种情况下总是会出错。在这里我删除了虚假的 par,还添加了一些%我遗漏的 par,\noindent尽管在几乎所有情况下都不应该在 latex 中使用,

在此处输入图片描述

\documentclass[fleqn]{report}
\usepackage{hyperref}
\usepackage{amsmath}

\newcommand{\question}[4]{%
    \par \noindent\nopagebreak[2]\textbf{\ignorespaces#2}%
    \ignorespaces#3 \textit{\ignorespaces#4}%
    \vspace{20pt}%
}

\begin{document}

\question{default}{
  My question
}{
  \begin{equation*} \frac{x}{(1-x)^2} \end{equation*}
}{}

\question{default}{
  My question
}{
  \begin{equation} \frac{x}{(1-x)^2} \end{equation}
}{}

\end{document}

相关内容