为什么缺少第一个脚注符号(星号)?

为什么缺少第一个脚注符号(星号)?

以下 MWE 应该可以演示该问题。我的平台:Lualatex(Win32/64 和 TL2016,均带有最新更新)。

\documentclass{book}

\usepackage{fontspec}
\setmainfont{Times New Roman}% without this, everything seems to work fine
%\setmainfont{Arial}% the same here

\usepackage[%
    main=english,
]{babel}%

\begin{document}
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}

\chapter{Symbolic footnotes and Times New Roman or Arial}

First footnote\footnote{Hello World!}\\
Second footnote\footnote{Hello Again!}\\
Third footnote\footnote{Heeeeello Agaiiiiiinn!}

\bigskip

Question(s):

When I use TNR or Arial font for example, the first footnotemark symbol (asterisk) is missing. Why?
(Note: Using Latin Modern, the output is fine.)

\end{document}

答案1

更新

在 2017/01/01 Patch Level 2 版本的 LaTeX(即今天的 texlive 更新)中,问题中发布的文档可以正常工作,不会缺少脚注。


原始答案

您将在日志中看到一条警告

Missing character: There is no ∗ (U+2217) in font TimesNewRoman:mode=node;scri
pt=latn;language=DFLT;+tlig;!

或者如果你有早期版本的tuenc.def(U+294E)

您可以使用*(U+002A),它在所有字体中都可用,但是一个上标星号。

因此其中之一:

\DeclareTextSymbol{\textasteriskcentered}{TU}{"204E} [⁎] [LOW ASTERISK]

\DeclareTextSymbol{\textasteriskcentered}{TU}{"2217}%  [∗] [ASTERISK OPERATOR]

\DeclareTextSymbol{\textasteriskcentered}{TU}{"002A}% [*] [ASTERISK]

棘手的是找到一种适用于所有字体并给出低星号的设置。

我们可能会默认使用

\DeclareTextCommand{\textasteriskcentered}{TU}{%
  \iffontchar\font"2217 \char"2217 \else\raisebox{-.5ex}{*}\fi}

当前计划(在下一个版本的 svn 源中)如下,但在发布之前可能会进行一些调整。

%    \end{macrocode}
% Not all fonts have U+2217 but using U+002A requires some adjustment.
%    \begin{macrocode}
\DeclareTextCommand{\textasteriskcentered}\UnicodeEncodingName{%
  \iffontchar\font"2217 \char"2217 \else
    \begingroup
      \fontsize
       {\the\dimexpr1.2\dimexpr\f@size pt\relax}%
       {\f@baselineskip}%
      \selectfont 
      \raisebox{-0.6ex}[\dimexpr\height-0.6ex][0pt]{*}%
    \endgroup
  \fi
}
%    \end{macrocode}

答案2

使用当前 TU 默认编码,\textasteriskcentered映射到 U+2217 ASTERISK OPERATOR,而 Times New Roman 恰好错过了。

旧的 EU1/EU2 编码基于xunicode映射\textasteriskcentered到 U+002A ASTERISK 的编码,这是错误的做法,因为用作脚注标记时的输出肯定是不好的:

在此处输入图片描述

与 TeX Gyre Termes 的输出进行比较

在此处输入图片描述

如果我添加

\UndeclareTextCommand{\textasteriskcentered}{TU}
\DeclareRobustCommand{\textasteriskcentered}{%
  \iffontchar\font"2217 \char"2217 \else\loweredasterisk\fi
}
\newcommand\loweredasterisk{\raisebox{-.5ex}{*}}

序言部分,我用的是 Times New Roman 字体,

在此处输入图片描述

这仍然不是很好,但肯定比之前的输出更好。

一个完全不同的解决方案:使用 TeX Gyre Termes 作为符号。您还可以添加代码来处理不同的字体系列。

\documentclass{book}

\usepackage{fontspec}
\usepackage{etoolbox}

\usepackage[
    main=english,
]{babel}

\setmainfont{Times New Roman}
\newfontfamily{\termes}{TeX Gyre Termes}% for the asterisk

\makeatletter
\patchcmd{\@fnsymbol}
  {\textasteriskcentered}
  {{\termes\textasteriskcentered}}
  {}{\ddt}
\makeatother

\begin{document}
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}

\chapter{Symbolic footnotes and Times New Roman or Arial}

First footnote\footnote{Hello World!}\\
Second footnote\footnote{Hello Again!}\\
Third footnote\footnote{Heeeeello Agaiiiiiinn!}

\bigskip

Question(s):

When I use TNR or Arial font for example, the first footnotemark symbol (asterisk) is missing. Why?
(Note: Using Latin Modern, the output is fine.)

\end{document}

在此处输入图片描述

相关内容