1 min read

LaTeX 自定义命令在 PDF 大纲中的正确显示

在写 LaTeX 时经常需要定义一些方便的命令来定制内容样式。

这里举个例子,比如说内联代码。使用 `colorbox` 实现一个底色为灰色的内联代码命令。如果我们使用了 hyperref 包,那么 PDF 自动生成出纯文本的大纲。

\newcommand{\codeinline}[1]{
  \colorbox[HTML]{EEEEEE}{\texttt{\sbseries{\smaller{#1}}}}
}
LaTeX command codeinline
PDF 目录(大纲显示内联代码内容有问题)

可以看到,内联代码样式在 PDF 页面上显示正常,但是在 PDF 大纲里却显示有问题,同时显示了代码和内容。

这是因为在我们定义命令的时候,没有额外说明这个命令纯文本版的内容是什么。我们可以使用 `texorpdfstring` 命令来修复这个问题。

\newcommand{\codeinline}[1]{
  \texorpdfstring{
    \colorbox[HTML]{EEEEEE}{\texttt{\sbseries{\smaller{#1}}}}
  }{
    #1
  }
}
LaTeX 命令 codeinline (支持纯文本模式)
PDF 目录 (修复后)