为什么使用 fontspec 时无法访问 Linux Libertine 中的替代字形?

为什么使用 fontspec 时无法访问 Linux Libertine 中的替代字形?

当我尝试使用 fontspec 字体名称和 Linux Libertine O 构建 Dario Taraborelli 的 CV 示例时,& 符号字形会中断。以下是 MWE:

%------------------------------------
% Dario Taraborelli
% Typesetting your academic CV in LaTeX
%
% URL: http://nitens.org/taraborelli/cvtex
% DISCLAIMER: This template is provided for free and without any guarantee 
% that it will correctly compile on your system if you have a non-standard  
% configuration.
% Some rights reserved: http://creativecommons.org/licenses/by-sa/3.0/
%------------------------------------

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass[10pt, a4paper]{article}
%\documentclass[10pt, a4paper]{scrartcl}

% DOCUMENT LAYOUT
\usepackage{geometry} 
\geometry{a4paper, textwidth=5.5in, textheight=8.5in, marginparsep=7pt, marginparwidth=.6in}
\setlength\parindent{0in}

% FONTS
\usepackage[usenames,dvipsnames]{color}
\usepackage{xunicode}
\usepackage{xltxtra}
\defaultfontfeatures{Mapping=tex-text}
\setromanfont [Ligatures={Common}, Numbers={OldStyle}, Variant=01]{Linux Libertine O}
\setmonofont[Scale=1]{Inconsolata}

% ---- CUSTOM COMMANDS
\chardef\&="E050
\newcommand{\html}[1]{\href{#1}{\scriptsize\textsc{[html]}}}
\newcommand{\pdf}[1]{\href{#1}{\scriptsize\textsc{[pdf]}}}
\newcommand{\doi}[1]{\href{#1}{\scriptsize\textsc{[doi]}}}
% ---- MARGIN YEARS
\usepackage{marginnote}
\newcommand{\amper{}}{\chardef\amper="E0BD }
\newcommand{\years}[1]{\marginnote{\scriptsize #1}}
\renewcommand*{\raggedleftmarginnote}{}
\setlength{\marginparsep}{7pt}
\reversemarginpar

% HEADINGS
\usepackage{sectsty} 
\usepackage[normalem]{ulem} 
\sectionfont{\mdseries\upshape\Large}
\subsectionfont{\mdseries\scshape\normalsize} 
\subsubsectionfont{\mdseries\upshape\large} 

% PDF SETUP
% ---- FILL IN HERE THE DOC TITLE AND AUTHOR
%\usepackage[dvipdfm, bookmarks, colorlinks, breaklinks, 
%% ---- FILL IN HERE THE TITLE AND AUTHOR
%   pdftitle={Albert Einstein - vita},
%   pdfauthor={My name},
%   pdfproducer={http://nitens.org/taraborelli/cvtex}
%]{hyperref}  
\usepackage[bookmarks, colorlinks, breaklinks, 
% ---- FILL IN HERE THE TITLE AND AUTHOR
    pdftitle={Albert Einstein - vita},
    pdfauthor={My name},
    pdfproducer={http://nitens.org/taraborelli/cvtex}
]{hyperref}  
\hypersetup{linkcolor=blue,citecolor=blue,filecolor=black,urlcolor=MidnightBlue} 

% DOCUMENT
\begin{document}

\section*{Grants, honors \& awards}
\noindent
\years{1921}Nobel Prize in Physics, Nobel Foundation

\section*{Publications \& talks}

\end{document}

在我的系统上,结果如下所示:

在此处输入图片描述

现在,显而易见的答案是字体没有字形,但它应该是相同的字体!如果我使用\usepackage{libertineotf},它可以工作,但我想改用 Xelatex。

答案1

请按如下方式使用:

\documentclass{article}
\usepackage{fontspec}
\defaultfontfeatures{Mapping=tex-text}
\setromanfont [Ligatures={Common}, Numbers={OldStyle}, Variant=01, 
  Extension=.otf]{LinLibertine_R}
\setmonofont[Scale=1]{Inconsolata}

\chardef\&="E050
\begin{document}

\section*{Grants, honors \& awards}
Nobel Prize in Physics, Nobel Foundation

\section*{Publications \& talks}

\end{document}

正如 Ulrike 已经指出的那样,使用包fontspec而不是其他两个

答案2

你的例子是不是MWE。它包含很多不相关的内容。这对我来说很好用:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures={Common}, Numbers={OldStyle}, Variant=01]{Linux Libertine O}
\chardef\&="E050
\begin{document}
Grants, honors \& awards
^^^^e050, \char"E050
\end{document}

我不明白为什么你不想使用 libertineotf(它应该与 xelatex 一起使用),但如果它与此包一起使用,而你自己调用字体却不行,这可能意味着你有多个 libertine 版本 - libertineotf 通过文件名调用字体。添加\XeTeXtracingfonts=1到你的文档并检查日志文件中的字体路径。

顺便说一句:不要xunicode在之前加载fontspec。这会破坏包的运行。在现代系统中,您根本不需要加载它,fontspec它会这样做。

相关内容