在法语中,字符“·”(U+00B7)有时用于表示中性语言。它与pdflatex
UTF-8 配合良好:
% !TEX TS-program = pdflatexmk
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[francais]{babel}
\begin{document}
Bonjour à tou·te·s!
\end{document}
但如果我使用lualatex
,polyglossia
并fontspec
使用此代码
% !TEX TS-program = lualatex
% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{french}
\begin{document}
Bonjour à tou·te·s!
\end{document}
它不再起作用了。
如何在 LuaLaTeX 中使用标点符号,polyglossia
以及fontspec
?
答案1
我建议如下:
\documentclass{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setdefaultlanguage{french}
%\catcode`\·=13 \def\cdottext{$\cdot$} \let·\cdottext
\catcode`\·=13 \def\cdottext{\ensuremath\cdot} \let·\cdottext % @Manuel; more robust
\begin{document}
Bonjour à tou·te·s!
\end{document}
它使其处于·
活动状态并\lets
插入一个\cdot
(而不是字体文件中可能错误的字形)。
答案2
拉丁现代字体中的字符的宽度不正确,高度也可能不正确。
\documentclass{article}
\usepackage{ifxetex,ifluatex}
\newif\ifunicode
\ifxetex\unicodetrue\else\ifluatex\unicodetrue\fi\fi
\ifunicode
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{french}
\else
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\fi
\usepackage{newunicodechar}
\ifunicode
% fix middle dot in Latin Modern
\newunicodechar{·}{\makebox[0.27em]{·}}
\fi
\begin{document}
Bonjour à tou·te·s!
\end{document}
使用 LuaLaTeX 运行
使用 pdflatex 运行
使用 LuaLaTeX 或 XeLaTeX 降低点数
变成\newunicodechar{·}{\makebox[0.27em]{·}}
\newunicodechar{·}{\ensuremath{{\cdot}}}
仅供比较,如果 LuaLaTeX 将主字体设置为 Libertinus Serif,我们得到的结果没有\newunicodechar
修复,
不同的修复
另一种可能性是从另一种字体中取中间的点。如果我们添加
\newfontfamily{\cmu}{CMU Serif}
并做
\newunicodechar{·}{{\cmu ·}}
输出是
稍微复杂一点的是使其也适应无衬线字体系列。