以下 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}