![使用 unicode-math Asana Math 作为字体时,使用 pdfencoding=auto 和 hyperref 会导致编译错误](https://linux22.com/image/403996/%E4%BD%BF%E7%94%A8%20unicode-math%20Asana%20Math%20%E4%BD%9C%E4%B8%BA%E5%AD%97%E4%BD%93%E6%97%B6%EF%BC%8C%E4%BD%BF%E7%94%A8%20pdfencoding%3Dauto%20%E5%92%8C%20hyperref%20%E4%BC%9A%E5%AF%BC%E8%87%B4%E7%BC%96%E8%AF%91%E9%94%99%E8%AF%AF.png)
我正在尝试Asana Math
在旧文件上添加字体,看看它看起来怎么样。我发现lualatex
出现编译错误,因为文件使用了
\usepackage[pdfencoding=auto]{hyperref}
将上述内容更改为
\usepackage[]{hyperref}
删除错误。删除Asana Math
字体并保留也pdfencoding
可以修复错误。我的subsubsection
标题里面有数学字体。
这是为什么?我做错了什么?最好的改正方法是什么?
以下是显示错误的内容
\documentclass[12pt]{article}%
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmathfont{Asana Math}
\usepackage[pdfencoding=auto]{hyperref}
\begin{document}
\subsubsection{Part 4 $\det\left( A^{T}\right) =\det A$}
test
\end{document}
现在 lualatex foo.tex
给出
This is LuaTeX, Version 1.10.0 (TeX Live 2019)
restricted system commands enabled.
(./foo.tex
LaTeX2e <2018-12-01>
....
Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref) removing `\nmlimits@' on input line 13.
! Improper alphabetic constant.
<to be read again>
\math@bgroup
l.13 ...{Part 4 $\det\left( A^{T}\right) =\det A$}
?
但如果我使用这个
\documentclass[12pt]{article}%
\usepackage{amsmath}
\usepackage[pdfencoding=auto]{hyperref}
\begin{document}
\subsubsection{Part 4 $\det\left( A^{T}\right) =\det A$}
test
\end{document}
没有错误。但我从 hyperref 收到相同的警告
Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref) removing `math shift' on input line 10.
根据答案节标题中的数学符号 它说
选项 pdfencoding=auto 或 unicode 可以使用更多符号启用 Unicode 书签。
使用 TL 2019
答案1
书签必须以 PDF 编码编写,而不能使用 LaTeX 格式(尽管某些扩展为字符的文本模式宏仍可工作)。您可以通过将选项添加到 来使某些公式psdextra
工作hyperref
。
你可以指定替代的 PDF 字符串用于目录。这可能包含任何 Unicode 字符,包括所有数学符号、数学字母数字符号以及上标和下标。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Pagella}[Scale = 1.0]
\setmathfont{Asana Math}
\usepackage[unicode, bookmarks]{hyperref}
\newcommand\transpose[1]{#1^{\symup T}}
\begin{document}
\subsubsection{\texorpdfstring{Part 4 \( \det\left( \transpose{A} \right) =\det A \)}%
{Part 4 det(
答案2
基本上问题描述为https://github.com/latex3/hyperref/issues/63:如果在用于书签的文本中含有已分配给字符的命令,hyperref 会不喜欢它。
在 unicode math 的字体更改命令的某个深度中,使用了这样的命令,然后失败了\det
。我不知道有什么好的解决方案:问题中的 luacode 不会解决问题;虽然它避免了错误,但它也会在书签中插入不需要的内容。
最好的办法是避免在书签内容中使用任意、复杂的数学运算。按照 Davislor 的建议使用\texorpdfstring
。
附注:使用当前的 hyperref 和 lualatex,你可以/应该简单地使用
\usepackage{hyperref}
这将默认为unicode书签。