![如何修复或更改小型大写字母书签?](https://linux22.com/image/314316/%E5%A6%82%E4%BD%95%E4%BF%AE%E5%A4%8D%E6%88%96%E6%9B%B4%E6%94%B9%E5%B0%8F%E5%9E%8B%E5%A4%A7%E5%86%99%E5%AD%97%E6%AF%8D%E4%B9%A6%E7%AD%BE%EF%BC%9F.png)
hyperref 包的一个很酷的功能是能够制作精美的 pdf 书签。但是,出于某种原因,它无法正确处理小型大写字母(请参阅小型大写标题在屏幕截图中),也许 GUI 字体没有小写字母。因此,有人知道如何修复这个问题吗?或者如果没有修复,请为书签提供另一个标题。
截屏:
最小文档:
\documentclass{article}
\usepackage{hyperref}
\usepackage[T1]{fontenc}
\begin{document}
\section{Introduction}
Content
\section{\textsc{aSmallCapsTitle}}
Content
\section{Conclusion}
Content
\end{document}
答案1
Christian Hupfer 的补充回答。
Unicode 标准定义了一些字符“ LATIN LETTER SMALL CAPITAL
”。然而,它们在语义上主要用于语音,不应用作字体属性。请参阅维基百科/小型大写字母/Unicode。
书签应为清晰可读的字符串,也应具有可能的字体属性bold
,并且italic
应谨慎使用。
尽管如此,一些 的模拟\textsc
对于书签是可以实现的。以下示例定义了\bkmsc
,它在书签中代替\textsc
。它将支持的小写字母转换为“小型大写”字母,例外是 q 和 y,它们的小型大写变体在 Unicode 中不可用。其他字符标记和空格被传递。参数必须是扩展的纯文本字符串。为简单起见,参数是\detokenize
d。宏、特殊字符应在外面使用。
例子:
\documentclass{article}
\usepackage[pdfencoding=auto]{hyperref}
\usepackage[T1]{fontenc}
\usepackage{bookmark}
\makeatletter
\newcommand*{\defLatinLetterSmallCapital}[2]{%
\@namedef{LLSC#1}{\unichar{"#2}}%
}
\defLatinLetterSmallCapital{a}{1D00}
\defLatinLetterSmallCapital{b}{0299}
\defLatinLetterSmallCapital{c}{1D04}
\defLatinLetterSmallCapital{d}{1D05}
\defLatinLetterSmallCapital{e}{1D07}
\defLatinLetterSmallCapital{f}{A730}
\defLatinLetterSmallCapital{g}{0262}
\defLatinLetterSmallCapital{h}{029F}
\defLatinLetterSmallCapital{i}{026A}
\defLatinLetterSmallCapital{j}{1D0A}
\defLatinLetterSmallCapital{k}{1D0B}
\defLatinLetterSmallCapital{l}{029F}
\defLatinLetterSmallCapital{m}{1D0D}
\defLatinLetterSmallCapital{n}{0274}
\defLatinLetterSmallCapital{o}{1D0F}
\defLatinLetterSmallCapital{p}{1D18}
\defLatinLetterSmallCapital{r}{0280}
\defLatinLetterSmallCapital{s}{A731}
\defLatinLetterSmallCapital{t}{1D1B}
\defLatinLetterSmallCapital{u}{1D1C}
\defLatinLetterSmallCapital{v}{1D20}
\defLatinLetterSmallCapital{w}{1D21}
\defLatinLetterSmallCapital{y}{028F}
\defLatinLetterSmallCapital{z}{1D22}
\defLatinLetterSmallCapital{bbar}{1D03}
\defLatinLetterSmallCapital{eth}{1D06}
\defLatinLetterSmallCapital{eturn}{2C7B}
\defLatinLetterSmallCapital{ghook}{029B}
\defLatinLetterSmallCapital{lstroke}{1D0C}
\defLatinLetterSmallCapital{mturn}{A7FA}
\defLatinLetterSmallCapital{nrev}{1D0E}
\defLatinLetterSmallCapital{oe}{0276}
\defLatinLetterSmallCapital{oopen}{1D10}
\defLatinLetterSmallCapital{ou}{1D15}
\defLatinLetterSmallCapital{rinv}{0281}
\defLatinLetterSmallCapital{rrev}{1D19}
\defLatinLetterSmallCapital{rrleg}{AB46}
\defLatinLetterSmallCapital{rturn}{1D1A}
\defLatinLetterSmallCapital{rum}{A776}
\defLatinLetterSmallCapital{ezh}{1D23}
\newcommand*{\bkmsc}[1]{%
\expandafter\BTS@ScanSpace\detokenize{#1} \@nil
}
\def\BTS@ScanSpace#1 #2\@nil{%
\BTS@ScanLetters#1\relax
\if\relax#2\relax
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{%
\BTS@ScanSpace#2\@nil
}%
}
\def\BTS@ScanLetters#1{%
\ifx#1\relax
\expandafter\@gobble
\else
\expandafter\@firstofone
\fi
{%
\@ifundefined{LLSC#1}{#1}{\@nameuse{LLSC#1}}%
\BTS@ScanLetters
}%
}
\pdfstringdefDisableCommands{\let\textsc\bkmsc}
\makeatother
\begin{document}
\section{Introduction}
Content
\section{\textsc{aSmallCapsTitle}}
Content
\section{Conclusion}
Content
\section{\textsc{abcd efgh ijkl mnro p!rs tuvw !z}}
Content
\section{\texorpdfstring{Dummy}{%
\LLSCbbar\LLSCeth\LLSCeturn\LLSCghook\space
\LLSClstroke\LLSCmturn\LLSCnrev\LLSCoe\space
\LLSCoopen\LLSCou\LLSCrinv\LLSCrrev\space
\LLSCrrleg\LLSCrturn\LLSCrum\LLSCezh
}}
Content
\end{document}
结果并不太令人信服:
- 字体混淆,字形用不同的线宽绘制。
- 可能并非所有字符都受支持,这里缺少 U+AB46 和 U+A776。
- 间隙:显示感叹号,其中缺少“Q”和“Y”。
- 语义错误。
答案2
不幸的是,这里的答案是否定的:
bookmarks
在PDF语言规范中它们被称为大纲。
PDF 参考 1.7 手册(第 586/587 页)指出
大纲项目字典的 F 条目 (PDF 1.4) 的值是一个无符号 32 位整数,其中包含指定显示项目的样式特征的标志。标志字内的位位置从 1(低位)到 32(高位)编号。表 8.5 显示了标志的含义;所有未定义的标志位都是保留的,必须设置为 0。
有记录的只有两个这样的标志,大胆的和斜体,其值分别为 2 和 1。其他字体样式则无法实现。
使用该bookmark
包可以激活或停用这些标志
\usepackage[bold=true,italic=true]{bookmark}
(或将其设置为false
其他值)。
不支持小型大写字体。
编辑替代方法 --> 文档中的小写字母,书签的其他样式
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{hyperref}
\usepackage[bold=bold,italic=true]{bookmark}
\begin{document}
\section{Introduction}
Content
\section{\texorpdfstring{\textsc{aSmallCapsTitle}}{The non Small Caps title}}
Content
\section{Conclusion}
Content
\end{document}