UTF-8
感谢最近对输入pdfTeX
和重音的覆盖范围进行了修订expl3
(请参阅更新的答案https://tex.stackexchange.com/a/286703/18401),下面的代码可以很好地工作:
\documentclass{article}
\usepackage{lmodern} % Over-ridden by fontspec for XeTeX/LuaTeX
\usepackage[T1]{fontenc} % Over-ridden by fontspec for XeTeX/LuaTeX
\usepackage[utf8]{inputenc} % This bails out for XeTeX/LuaTeX
\ifnum 0%
\ifdefined\XeTeXversion 1\fi
\ifdefined\directlua 1\fi
>0 %
\usepackage{fontspec}
\fi
\usepackage{xparse}
% \usepackage{hyperref}
% \hypersetup{unicode}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \ExplUpperCase { m } { \text_uppercase:n {#1} }
\ExplSyntaxOff
\begin{document}
\ExplSyntaxOn
\section{\ExplUpperCase{aäa}}
\section{\text_uppercase:n{aäa}}
% \section{\ExplUpperCase{a\"aa}}
% \section{\text_uppercase:n{a\"aa}}
\ExplSyntaxOff
\end{document}
尽管如此,如果hyperref
加载:
- 无论使用什么引擎,
\"a
都无法使用,因为“包 hyperref 警告:PDF 字符串(Unicode)中不允许使用令牌:在输入行中删除“\”[...]”, - 如果使用的引擎是:
pdf(La)TeX
,无论使用哪种方式,书签都是错误的\hypersetup{unicode}
,xe(La)TeX
\hypersetup{unicode}
,无论使用什么,书签都是正确的,lua(La)TeX
,书签为:- 如果
\hypersetup{unicode}
使用, - 错误如果
\hypersetup{unicode}
是不是用过的。
- 如果
您知道如何在所有情况下正确制作书签吗?
答案1
处理带有hyperref
和缺少unicode
选项的 LuaTeX 将会很棘手,但其他情况都可以通过强制扩展来解决。您必须记住,hyperref
否则看到的不是案例变化的结果,而是输入。类似
\usepackage{xparse,letltxmacro}
\LetLtxMacro\oldsection\section
\makeatletter
\DeclareDocumentCommand\section{sO{}m}{%
\begingroup
\protected@edef\x{%
\endgroup
\noexpand\oldsection
\IfNoValueT#1{*}%
\if\relax\detokenize{#2}\relax
\else
[\unexpanded{#2}]%
\fi
{#3}%
}%
\x
}
\makeatother
将\section
扩展强制参数,但对于 LaTeX2e 强命令来说应该是“安全的”。