是否有可能模仿
\section{\texorpdfstring{$x_1$}{x\_1}}
使用\section{$x_1$}
和\pdfstringdefDisableCommands{...}
?我只见过这个答案,它试图做类似的事情,但它不起作用(正如他们承认的那样)。我不太担心警告;我只想x_1
出现在 PDF 的书签中,而不是出现\texorpdfstring{...}{...}
在每个下划线实例中。
使用@StevenB.Segletes 的第一个解决方案时,tikz 生成的错误的 MWE:
\documentclass{article}
\usepackage{hyperref}
%\usepackage{tikz} % OK
\let\svus_
\catcode`\_=\active
\gdef_{\texorpdfstring{\svus}{\string_}}
%%%
% pgfmathparser.code.tex
% ! Missing \endcsname inserted.
% <to be read again>
% \svus
% l.251 ...mnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ}
% \usepackage{tikz}
%%%
\begin{document}
\tableofcontents
\section{$x_1$}
Document math, $a^3_1$ should be no problem
\section{$y_1$}
Does This\_work?
\end{document}
答案1
回想一下,hyperref 会用类似这样的方式警告你下标字符
Package hyperref Warning: Token not allowed in a PDF string (Unicode): (hyperref) removing `subscript' on input line 33.
因此,hyperref 显然知道它遇到了下标字符。您需要做的就是告诉 hyperref,下次看到时_
,您将把该字符放入 pdf 目录中,而不是警告。
下面的代码可以实现这个功能。
\documentclass{article}
\usepackage{tikz}
\usepackage{hyperref}
\makeatletter
\def\subscripttext{subscript}
\def\HyPsd@CatcodeWarning#1{%
\def\argone{#1}
\ifx\subscripttext\argone
\expandafter\def\expandafter\HyPsd@String\expandafter{\HyPsd@String_}%
\else
\HyPsd@Warning{%
Token not allowed in a PDF string (%
\ifHy@unicode
Unicode%
\else
PDFDocEncoding%
\fi
):%
\MessageBreak removing `\HyPsd@RemoveCmdPrefix#1'%
}%
\fi
}
\begin{document}
\tableofcontents
\section{$x_1$}
Document math, $a^3_1$ should be no problem
\section{$y_1$}
Does This\_work?
\end{document}
这种方法允许您不设置 catcode_
。只有这么多特殊字符,并且一堆包正在相互竞争定义激活字符的机会。Ti钾正如您所注意到的,Z 是这方面的专家。
答案2
您可以使下划线数学活跃起来。
你会收到警告
Package hyperref Warning: Token not allowed in a PDF string (Unicode):
(hyperref) removing `math shift' on input line 17.
但输出将符合预期。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz} % OK
\usepackage{hyperref}
\usepackage{bookmark}
\AtBeginDocument{%
\begingroup\lccode`~=`_ \lowercase{\endgroup\let~\sb}%
\mathcode`_="8000
\catcode`_=12
}
\begin{document}
\tableofcontents
\section{$x_1$}
Document math, $a^3_1$ should be no problem
\section{$y_1$}
This\_works and also_this.
\end{document}
答案3
这里我采取了_
积极措施来实现它。不确定这是否能满足您的需要。
\documentclass{article}
\usepackage{hyperref}
\let\svus_
\catcode`\_=\active
\gdef_{\texorpdfstring{\svus}{\string_}}
\begin{document}
\tableofcontents
\section{$x_1$}
Document math, $a^3_1$ should be no problem
\section{$y_1$}
Does This\_work?
\end{document}
也许更好的方法是使用\mathcode
,这样_
就不会激活,但文档里面的 catcode-12 会起作用:
\documentclass{article}
\usepackage{hyperref}
\let\svus_
\mathcode\number`\_="8000
\begingroup\lccode`\~=`\_ \lowercase{\endgroup\def~}%
{\texorpdfstring{\svus}{\string_}}
\catcode`\_=12
\begin{document}
\tableofcontents
\section{$x_1$}
Document math, $a^3_1$ should be no problem
\section{$y_1$}
Does This\_work?
\end{document}