行末的连字符在粘贴时会消失,即使输入中存在

行末的连字符在粘贴时会消失,即使输入中存在

当我从 pdflatex 输出粘贴文本时,我想更改连字符的两点:

  • 连字符粘贴为“hyphen-minus”(U+002D,“-”),但我更喜欢使用较新的 Unicode 字符“hyphen”(U+2010,“‐”),用于文本连字符。
  • 换行连字符总是会消失。如果输入中没有连字符,这很好,但是当诸如“ice-cream”之类的单词换行时,最好保留连字符。

请注意,行末的短破折号粘贴正确。以下是一些说明该问题的代码:

\documentclass{article}
\input glyphtounicode
  \pdfgentounicode=1
\usepackage[T1]{fontenc}

\begin{document}

Hello World, this is dummy text intended to cause a line break: I love line-breaking. Now a long word without an original hyphen: antidisestablishmentarianism. Some dummy text for getting the desired line breaks; some dummy text for getting the desired line breaks.

Compound adjective (with en-dash): World\ War\ II--related, World\ War\ II--related, World\ War\ II--related.

\end{document}

使用此代码,粘贴行为如下:“line-breaking”中的连字符消失(不需要),“antidisestablishmentarianism”的换行符消失(需要),短划线保留(需要)。(以防万一,我在 Windows 7 上使用 Adob​​e Reader X(版本 10.1.4)。)

有没有简单的方法来解决这两个问题?理想的解决方案不会使用新命令(例如,使用accsupp,尽管这个包很棒),但会修改 (La)TeX-在其输入源代码中处理的方式。此外,理想的解决方案是保守地应用专门的连字符 (U+2010):例如,URL 中的连字符通常是简单的连字符减号。(是的,我知道所有这些可能很难实现。)

另请参阅我的相关问题这里

答案1

这是迈向答案的第一步,希望在其他人的帮助下能够做得更好(或者可以激励那些知情人士发表更好的答案):

\documentclass{article}
\input{glyphtounicode}
  \pdfgentounicode=1
\usepackage[T1]{fontenc}
\usepackage{accsupp}

\usepackage{url}

\let\originalhyphen-


\makeatletter
\newcount\vh@hyphens


\def\vh@mkhyphens#1\originalhyphen
{%
  \ifnum#1>\z@
    \expandafter\vh@mkhyphens\number\numexpr#1-\@ne\relax\originalhyphen
  \fi
  \originalhyphen
}


\catcode`\-=\active
\DeclareRobustCommand\visiblehyphen
{%
  \ifmmode
    \originalhyphen
   \else
    \expandafter\@visiblehyphen
  \fi
}

\newcommand\@visiblehyphen
{%
  \@ifnextchar-{\global\advance\vh@hyphens\@ne}\@@visiblehyphen
}

\newcommand\@@visiblehyphen
{%
  \ifnum\vh@hyphens>\z@
    \expandafter\vh@mkhyphens\number\vh@hyphens\originalhyphen
    \global\vh@hyphens\z@
   \else
    \mbox{\BeginAccSupp{method=hex,unicode,ActualText=200B2010}\originalhyphen\EndAccSupp{}}\hskip\z@%
  \fi
}
\makeatother

\let-\visiblehyphen


\begin{document}

Hello World, this is dummy text intended to cause a line break: I love line-breaking. Now a long word without an original hyphen: antidisestablishmentarianism. Some dummy text for getting the desired line breaks; some dummy text for getting the desired line breaks.

Compound adjective (with en-dash): 
World\ War\ II--related, World\ War\ II--related, World\ War\
II--related.

Math mode 
\[a^2-b^2\]

Url
\begin{center}
  \url{http://chat.stackexchange.com/rooms/41/tex-latex-and-friends}
\end{center}


\end{document}

它有以下缺点:

  1. 它使用了accsupp您不想要的包。但我无法想象如何以其他方式实现此结果。
  2. 至少在 Linux 上,似乎acroread抑制了任何单词内部的连字符,因此 u+2010 和 u+2011 都消失了。为了证明该技术完全有效,我现在在连字符 (u+200B) 前使用了一个零宽度空格,奇怪的是,粘贴后它会变成常规空格,但也许您可以通过实验找到更好的方法。
  3. 以不可扩展的方式重新定义字符-会产生很多副作用,例如在\numexpr或内部\dimexpr。也许最好使用专用命令来显式地在文本内部使用连字符。或者以某种方式将 的重新定义限制-在文档文本中。

以下是粘贴的文本:

Hello World, this is dummy text intended to cause a line break: I love line ‐
breaking. Now a long word without an original hyphen: antidisestablishmentarianism.
Some dummy text for getting the desired line breaks; some dummy
text for getting the desired line breaks.
Compound adjective (with en ‐dash): World War II–related, World War II–
related, World War II–related.
Math mode
a2 − b2
Url
http://chat.stackexchange.com/rooms/41/tex-latex-and-friends

相关内容