当我从 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 上使用 Adobe 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}
它有以下缺点:
- 它使用了
accsupp
您不想要的包。但我无法想象如何以其他方式实现此结果。 - 至少在 Linux 上,似乎
acroread
抑制了任何单词内部的连字符,因此 u+2010 和 u+2011 都消失了。为了证明该技术完全有效,我现在在连字符 (u+200B) 前使用了一个零宽度空格,奇怪的是,粘贴后它会变成常规空格,但也许您可以通过实验找到更好的方法。 - 以不可扩展的方式重新定义字符
-
会产生很多副作用,例如在\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