LuaTeX + Roboto + \= :适用于 A,但不适用于 B 或 C

LuaTeX + Roboto + \= :适用于 A,但不适用于 B 或 C

我想\={<letter>}在使用 排版的文档中对大写字母使用“bar”重音符号 ( ) roboto。如果我使用 LaTeX 编译文档,它可以完美运行。但如果我使用 LuaLaTeX 编译它,则可以正常工作\={A},但 和\={B}都不起作用\={C}

在此处输入图片描述在此处输入图片描述

问题:为什么?如何在 roboto 和 LuaLaTeX 中使用 'bar' 重音符号?

笔记:使用其他字体时我还没遇到过这样的问题。


平均能量损失

\documentclass{article}
    \usepackage[sfdefault]{roboto}
    \usepackage{ifluatex}
        \ifluatex
            \newcommand{\engine}{LuaTeX}
        \else
            \newcommand{\engine}{TeX}
        \fi
\begin{document}
    \engine: 
    \={A}
    \={B}
    \={C}
\end{document}

答案1

Roboto 字体缺少 U+0304 COMBINING MACRON 字符,因此你确实收到了可怕的消息

Missing character: There is no ̄ (U+0304) in font [Roboto-Regular.ttf]

\=您可以通过声明以传统方式处理与的组合来解决这个问题,即通过\accent

\documentclass{article}
\usepackage{fontspec}

\makeatletter
\DeclareUnicodeEncoding{roboto}{%
  \input{tuenc.def}%
  \DeclareTextAccent{\=}{roboto}{"00AF}%
}
\makeatother

\setmainfont{Roboto}[
  Extension      = .ttf,
  NFSSEncoding   = roboto,
  UprightFont    = *-Regular,
  ItalicFont     = *-RegularItalic,
  BoldFont       = *-Bold,
  BoldItalicFont = *-BoldItalic,
]

\begin{document}
    \={A}
    \={B}
    \={C}
\end{document}

我没有看到使用该包的简单方法,因为它不允许NFSSEncoding在字体选择中添加选项。

在此处输入图片描述

答案2

以下解决方法(灵感来自:https://tex.stackexchange.com/a/233378/112503)似乎有效:

\documentclass[12pt]{article}

\usepackage{fontspec}

\setmainfont{Roboto}[%
    Extension = .ttf ,
    Path = C:/path-to-font-file/ ,
    UprightFont = {Roboto-Regular},
]

\begin{document}
\=A (\accent"02C9 A)

\accent"02C9 B

\accent"02C9 C
\end{document}

在此处输入图片描述

相关内容