我查找了有关如何在 LuLaTeX (1.17.0) 中为图像添加替代文本的不同解决方案。我发现了以下内容解决方案
\documentclass[a4paper,11pt,naustrian]{article}
\usepackage{accsupp}
\usepackage{graphicx}
\begin{document}
123
\BeginAccSupp{method=escape, ActualText=2. Tag \%4,space}
\EndAccSupp{}
\includegraphics{img.png}%
66
\BeginAccSupp{method=plain, ActualText=abc\%4,space}
\includegraphics{img.png}%
\EndAccSupp{}
\end{document}
上述代码存在一些问题:
我不清楚是否
\BeginAccSupp
应该\EndAccSupp
包含图形。我在文档中没有找到注释。我认为跨页面放置图像可能会很棘手。当我阅读文档时,
accsupp
我读到该方法plain
可能会导致无效的 PDF 文件,因为特殊字符不受保护。有人知道什么是特殊字符吗?我在考虑,%
但显然这是 PDF 文件中的双重转义:ET /Span<</ActualText(2.\040Tag\040\\%4)>>BDC BT
有办法纠正吗?
阅读文档我也可以使用
pdfliteral
。但不知何故我没有成功 - 有办法纠正它吗?\BeginAccSupp{pdfliteral=direct} \pdfextension literal direct{/ActualText(2. Tag \%4)} \EndAccSupp{}
结束于
/Span<<>>BDC
/ActualText(2. Tag \%4)
ET
EMC
- 是使用包选项更好还是自己编码 pdfstring 并使用更好
pdfliteral
?(一旦我有一个工作样本)
答案1
ActualText 是内容的替代文本,应围绕内容。对于图像来说,这没有问题,因为这是一个框,因此不会跨页。
PDF 参考中描述了文字字符串的语法。除此以外,您还必须转义括号(因为它们用于整个字符串)、反斜杠,并且必须将非 ASCII 字符映射到某个八进制或类似的表示形式。这就是 escape 方法的作用。只要您有 TeX 宏(这包括像 这样的宏
\%
),使用 pdfstringdef 方法就更安全了。如果您想直接使用 \pdfliteral(但请注意,这是 pdftex 特有的,luatex 和 xetex 需要其他命令),您必须在内容之前和之后使用它们。您可以使用它
\showoutput
来查看 accsupp 到底插入了什么:
.\pdfliteral page{/Span<</ActualText(\(test\))>>BDC}
...\glue(\topskip) 6.28543
...\hbox(4.71457+0.0)x360.0, glue set 327.79163fil
....\hbox(0.0+0.0)x17.0
....\OT1/cmr/m/n/10.95 x
....\OT1/cmr/m/n/10.95 x
....\glue 3.65 plus 1.825 minus 1.21666
....\pdfliteral page{EMC}
附注:不要太相信这个空格选项。如果您使用屏幕阅读器,ActualText 正常工作,但复制粘贴时,您将受到 PDF 阅读器的启发式方法的支配,并且一半的时间它们会忽略该设置。