如何修复或更改小型大写字母书签?

如何修复或更改小型大写字母书签?

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 中不可用。其他字符标记和空格被传递。参数必须是扩展的纯文本字符串。为简单起见,参数是\detokenized。宏、特殊字符应在外面使用。

例子:

\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}

相关内容