为什么如果我指定了颜色,页码会更低?

为什么如果我指定了颜色,页码会更低?

在这个 MWE 中,如果我用下一个(颜色为{black})替换 fancyfoot 行,页码就会变得更低(甚至被剪掉)。

为什么这两个版本之间存在差异?我希望它们确实会产生同样的东西:在完全相同的位置出现黑色页码。

顺便说一句,我放了一个“\setlength{\footskip}{50pt}”,因为我在第一个版本(无颜色版本)中遇到了警告。也许这与解释有关……?

\documentclass{article}
\usepackage[a4paper,top=2cm, bottom=2.5cm, left=2cm, right=2cm, twoside=true]{geometry}
\usepackage{fancyhdr}
\usepackage{fontspec}
\usepackage{xcolor}
\begin{document}
\fancypagestyle{plain}{%
\fancyhf{}%
}%
\pagestyle{plain}%
\setlength{\footskip}{50pt}
\fancyfoot[RO, LE]{\fontspec{Arial}\fontsize{50pt}{60pt}\selectfont\thepage}%
%\fancyfoot[RO, LE]{\fontspec{Arial}{\color{black}{\fontsize{50pt}{60pt}\selectfont\thepage}}}%
some text
\end{document}

编辑:我在 Ubuntu 22.04 操作系统上使用 lualatex 命令 (lualatex somefilename.tex)(编译日志:“这是 LuaHBTeX,版本 1.14.0 (TeX Live 2022/dev/Debian)”)。结果如下:

  • 没有颜色也没有文本颜色,或者有文本颜色:结果相同(页码不剪切) 无色
  • 带颜色:页码剪切 带有颜色

答案1

我无法重现这种行为,但是

  1. 使用\fontspec是一种浪费资源;
  2. 页面样式的定义毫无用处且令人困惑;
  3. 脚踏的设置应通过 进行geometry
  4. \color{black}{...}应该\textcolor{black}{...}
\documentclass{article}
\usepackage[
  a4paper,
  top=2cm,
  bottom=2.5cm,
  left=2cm,
  right=2cm,
  twoside=true,
  footskip=50pt,%<--- change to suit
]{geometry}
\usepackage{fancyhdr}
\usepackage{fontspec}
\usepackage{xcolor}

\usepackage{lipsum}

\newfontfamily{\arial}{Arial}

\fancypagestyle{plain}{%
  \fancyhf{}%
  \fancyfoot[RO, LE]{\textcolor{black}{\fontsize{50pt}{60pt}\arial\thepage}}%
  \renewcommand{\headrulewidth}{0pt}%
}
\pagestyle{plain}

\begin{document}

\lipsum[1-20]

\end{document}

在此处输入图片描述

答案2

恕我直言,间距不同\color是因为在提供的示例中,\color宏是在 TeX 处于(内部)垂直模式时处理的。事实上,如果你在 MWE\ifvmode\ifinner\typeout{We are in internal vertical mode}\fi\fi之前插入\color,TeX 将打印“我们处于内部垂直模式”(使用 LuaTeX 测试)。

众所周知什么东西在垂直模式下发生可能会影响垂直间距:

  • 因为它们会阻止后续\addvspace“看到”事物之外的东西(参见 David Carlisle 的例子这里或者想象一个\addvspace后面跟着一个什么东西,后面跟着第二个\addvspace);

  • 因为 开头的 whatsit\vtop可能会修改\vtop的参考点(根据 TeX 的规则)。

这两个可能的原因在第 6 页的脚注中给出。grf指南.pdf;可能还有其他。

相反,在xcolor加载时,\textcolor用于\leavevmode在将颜色内容附加到当前列表之前切换到水平模式:

\def\textcolor#1#{\@textcolor{#1}}
\def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}

因此,当\textcolor使用 (而不是\color)时,您可以确定它的第二个强制参数将在水平模式下处理,因此不应影响垂直间距。

正如大卫·卡莱尔所写上面的链接

诀窍是尽可能在水平而非垂直模式下进行颜色变化

相关内容