有没有办法丰富从任何 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