urls:拆分较长的网址,转义下划线,必要时添加前缀 http

urls:拆分较长的网址,转义下划线,必要时添加前缀 http

我需要我的 pdf 中的网络链接具有以下行为。我花了很多时间尝试让这些更改很好地协同工作,但没有成功

  • 不以 开头的 URLwww应该可以正确解析。如果没有某种干预,我的 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://\pathurl\UrlBreak

\renewcommand{\url}[1]{%
\href{http://#1}{\path{#1}}%
}

我知道如果我不小心在粘贴到文档中的 URL 中留下显式内容,这将会失败http://,但是使用 grep 很容易检查。

如果它可能会破坏某些东西我希望有人能告诉我。

相关内容