如何使 pdf 输出中使用的符号可搜索?

如何使 pdf 输出中使用的符号可搜索?

有没有办法丰富从任何 tex 源生成的 pdf 输出,使其包含所用符号的名称?例如,假设我们有以下最小示例:

\documentclass[11pt]{article}
\usepackage{amssymb,amsmath}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\def\mystigma{\symbol{"03DB}} % hex code of some symbol
\begin{document}
 Some pages...


 $\int_1^ x (t +1) dt=\frac{1}{2}(x^2+2x-3)$. This is the greek stigma: \mystigma. 

 More pages follows..
\end{document}

我们如何重新定义\int\mystigma命令,以便能够在 pdf 中搜索单词“integral”、“stigma”或“mystigma”?

答案1

您可以使用该accsupp包来提供实际的文本。

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{Linux Libertine O}
\def\mystigma{\symbol{"03DB}} % hex code of some symbol

\ifdefined\directlua % = if we are using LuaTeX
  \protected\def\pdfliteral{\pdfextension literal }
\fi
\usepackage{accsupp,etoolbox}
\newcommand\actualtext[2]{%
  \preto#1{\BeginAccSupp{ActualText=#2}}%
  \appto#1{\EndAccSupp{}}%
  \robustify#1
}

\actualtext\int{integral}
\actualtext\mystigma{stigma}

\begin{document}
 Some pages...


 $\int_1^ x (t +1) dt=\frac{1}{2}(x^2+2x-3)$. This is the greek stigma: \mystigma. 

 More pages follows..
\end{document}

输出没有变化,但pdftotext现在报告

Some
integral x pages… 1 2
1 (t + 1)dt = 2 (x + 2x − 3). This is the greek stigma: stigma.
More pages follows..

1

如果您不使用 ConTeXt,您可以忽略这部分。

\definetypeface[main][rm][serif][libertine][default]
\definetypeface[main][ss][sans] [modern]   [default]
\definetypeface[main][tt][mono] [modern]   [none]
\definetypeface[main][mm][math] [modern]   [default]
\setupbodyfont[main]

\chardef\mystigma="03DB

\define[2]\actualtext{%
  \expandafter\let\csname saved_\string#1\endcsname=#1
  \define#1{\pdfactualtext{\csname saved_\string#1\endcsname\relax}{#2}}
}

\actualtext\int{integral}
\actualtext\mystigma{stigma}

\starttext
Some pages...

$\int_1^ x (t +1) dt=\frac{1}{2}(x^2+2x-3)$. This is the greek stigma: \mystigma.

More pages follows..
\stoptext

pdftotext报告

1

Some pages…
integral 

相关内容