我需要我的 pdf 中的网络链接具有以下行为。我花了很多时间尝试让这些更改很好地协同工作,但没有成功
不以 开头的 URL
www
应该可以正确解析。如果没有某种干预,我的 PDF 经常(但并非总是)认为它们是file://
而不是http://
。我编写了一个宏来http://
明确提供 前缀\href
,而不在文档中显示它。长 URL 必须分成多行。有些 URL 不能自然拆分,我准备用 逐个处理
\UrlBreak
,如 使 url 包自定义断点设置仅适用于特定 url
在以下 M(N)WE 中,所有链接都有效,但拆分有时无效,并将\detokenize
下划线替换为点。我似乎无法使用建议的字体编码
\detokenize 和下划线的奇怪行为
我尝试\detokenize
用自己的宏来替换_
我\_
重写的\url
但无法使其工作。
任何完整的解决方案都会受到欢迎。可能有一个从头开始的解决方案,而无需尝试修补我的解决方案。我已经尝试了很长时间了。
我现在要去看血月食了。也许当我回来的时候(明天?)我会在这里找到答案。
\documentclass[10pt]{article}
\usepackage[showframe,text={5in,3in}]{geometry}
\usepackage{microtype} % since it's in my document
%\usepackage[T1]{fontenc} % fails to compile
\usepackage[pdftex,breaklinks]{hyperref}
\usepackage{xstring}
\let\realurl\url
\renewcommand{\url}[1]{%
\IfBeginWith{#1}{www}%
{\realurl{#1}}%{
{\href{http://#1}{\detokenize{#1}}}%
}
\begin{document}
\begin{itemize}
\item Url without www: \url{donnellycolt.com}. This works as is in
Firefox, but would fail from the pdf without the explicit http
prefix I generate.
\item Url without www: \url{tex.stackexchange.com/questions}. This one
would work from the pdf without the explicit http.
\item Long url with underscore, no www:
\url{en.wikipedia.org/wiki/List_of_humorous_units_of_measurement}. It
doesn't break, and the underscores are dots.
\item Long url to break, without www:
{\def\UrlBreaks{\do\-\do\d}%
\url{earthsky.org/science-wire/recycling-is-good-for-the-environment-as-well-as-the-brain}}
\item Long url to break, without www:
{\def\UrlBreaks{\do\/\do\=\do\0\do\A}%
\url{answers.yahoo.com/question/index?qid=20080914095156AAR7NXU}}. This
one would break if I didn't prefix the http://. It would work, too.
\item Long url to break, with www:
{\def\UrlBreaks{\do\/\do\=\do\P\do\U\do\S\do\H\do\A}%
\url{www.adfg.alaska.gov/index.cfm?adfg=PersonalUsebyAreaSouthcentralHerringandHooligan.regs}}.
\end{itemize}
\end{document}
答案1
这是一个似乎有效的答案。我重新定义\url
为调用以始终为实际链接\href
生成前缀。然后我使用包中的宏来转义可见 url 中的下划线。 \path 似乎可以咨询,因此拆分问题自行解决。http://
\path
url
\UrlBreak
\renewcommand{\url}[1]{%
\href{http://#1}{\path{#1}}%
}
我知道如果我不小心在粘贴到文档中的 URL 中留下显式内容,这将会失败http://
,但是使用 grep 很容易检查。
如果它可能会破坏某些东西我希望有人能告诉我。