我在将某些文本粘贴到 Microsoft Word 2016 中时遇到了一些奇怪的行为。如果我将第 21 页粘贴到这个文件进入 Word 后,该页面上前两个 <(不是 ≤)字符之间的所有文本都被替换为单个 < 字符。其他 < 周围也会出现类似的奇怪行为。如果我粘贴并保留文本,则会出现缺失的文本,但我粘贴到 Word 中的目的是改变格式,以便我的TTS 阅读器在合适的位置放置停顿,而“仅保留文本”会重新插入不需要的换行符。使用粘贴和“仅保留文本”,然后将所有 ^p 替换为单个空格,基本上可以解决问题,只剩下偶尔未诊断出的奇怪行为。
为什么会出现这种情况?在粘贴可能包含许多此类实例的文档时,是否有比使用“仅保留文本”更有针对性的解决方法?
答案1
我调查了这个特殊情况,复制了 PDF 页面上的所有内容,除了底部的页码(I - 21)。我在 Windows 11 上的 Office 365 中使用当前版本的 Word。
我最好的猜测是,这个特定的复制出了问题,因为您正在复制的程序正在剪贴板上创建一个 HTML 格式的“剪辑”,该剪辑不能<
正确地对字符进行编码,而只是保留<
HTML 文本,而不是使用标准“转义”对其进行编码,即<
。
如果我在 Microsoft Edge 中打开 PDF,就会发生这种情况,但在其他浏览器中也可能会发生的事情,例如旧版 Internet Explorer。
我无法在 Edge 中找到任何可以改变这种行为的设置(尽管 Edge 也可能正常工作,但像我的病毒检查程序这样的程序会更改数据)。
即使固定这个问题你需要在至少能生成正确 HTML 的程序中打开 PDF,最好是更好的程序。在这里,我有最好的格式化通过在免费版 Adobe Acrobat 中打开 PDF 来查看结果,但即使您可以这样做,您也需要检查它是否能满足您的需要。或者,如果您只需要纯文本,则每次都使用“粘贴->特殊”并使用“Unicode 文本”选项可能会更容易。
Edge 将少量格式放在剪贴板上(主要是 Unicode 文本、文本和 HTML)。Word 从剪贴板获取的 HTML 是这样开始的 - 我使用了@@@
无法与源数据完全相同地重现编码字节的序列:
Version:0.9
StartHTML:0000000105
EndHTML:0000003438
StartFragment:0000000141
EndFragment:0000003402
<html>
<body>
<!--StartFragment-->Theorem 2. If gi is the Sprague-Grundy function of Gi, i = 1,...,n, then G = G1 +
@@@ + Gn has Sprague-Grundy function g(x1,...,xn) = g1(x1) @@@ gn(xn).
Proof. Let x = (x1,...,xn) be an arbitrary point of X. Let b = g1(x1)@@@gn(xn).
We are to show two things for the function g(x1,...,xn):
(1) For every non-negative integer a<b, there is a follower
前 5 行构成一个标题,描述格式并指示实际数据的起始位置和长度。下一行以标准关键字开头<html>
,但 中没有任何类似于普通 HTML 标记的内容。您可能还会注意到,在 PDF 中,表达式中的符号<body>
两侧都有空格,但在此“HTML”中只有。这可能意味着原始文档使用自动机制在数学表达式的 两侧添加空格(LaTeX 和 Word 都会这样做),并且无论生成 PDF 的是什么,都会将字符定位以反映这一点,而不是添加空格。<
a < b
a<b
<
因此,当 Word 粘贴该内容时,它可能会将其解释<
为 HTML 打开元素标记的开头,然后误解它读取的所有内容,直到到达告诉它停止的内容 - 可能是下一个<
字符。
相反,如果我在 FireFox 中打开该页面并将其复制到剪贴板,它会发布一组截然不同的格式,但我认为 Word 仍会选择 HTML 格式。它开始如下:
Version:0.9
StartHTML:00000182
EndHTML:00096939
StartFragment:00000216
EndFragment:00096903
SourceURL:https://www.cs.cmu.edu/afs/cs/academic/class/15859-f01/www/notes/comb.pdf
<html><body>
<!--StartFragment--><div class="canvasWrapper"></div><div class="textLayer" style="width: round(var(--scale-factor) * 612px, 1px); height: round(var(--scale-factor) * 792px, 1px);" data-main-rotation="0"><span style="left: 11.76%; top: 9.38%;
您可能已经发现 HTML 块要长得多(比较 EndHTML 或 EndFragment 的值),并且它实际上看起来是“正确的”HTML。其中部分的编码a<b
如下所示:
<span style="left: 54.78%; top: 17.77%; font-size: calc(var(--scale-factor)*11.96px); font-family: sans-serif; transform: scaleX(1.23868);" role="presentation" dir="ltr" class="">a < b\</span>\<span style="left: 60.23%; top: 17.77%; font-size: calc(var(--scale-factor)*11.96px); font-family: serif; transform: scaleX(1.167);" role="presentation" dir="ltr">, there is a follower
即,它编码a<b
为a < b
哪个 Word 似乎以您希望的方式进行解释。
我发现使用 Adobe Acrobat 似乎最适合导入正确的格式,原因是它以 RTF 而不是 HTML 格式复制文本+格式,并且它似乎比 HTML 具有更高的渲染质量。
我没有研究过这是否是 Edge 的一个众所周知的问题,但我确实发现它会出现这样的错误,这很奇怪。