是否可以重新定义 \url,使其在没有 http 或有 http 的情况下工作

是否可以重新定义 \url,使其在没有 http 或有 http 的情况下工作

这个问题与问题相关如何避免 hyperref 的 \url 中的“http:”部分?以及解决方案https://tex.stackexchange.com/a/139934/39306https://tex.stackexchange.com/a/139925/39306

我想以如下方式重新定义 \url 以便产生相同的结果。

\url{ipython.org}

或者

\url{http://ipython.org}

(使用\rurl{http://ipython.org}上面给出的解决方案似乎不起作用,实际上在用 pdflatex 编译后,单击http://ipython.org在 pdf 文件中,指向不存在的页面http://www.http.com//ipython.org)请参阅下面的基于解决方案的示例https://tex.stackexchange.com/a/139934/39306

\documentclass{article}
\usepackage{hyperref}
\newcommand\rurl[1]{%
  \href{http://#1}{\nolinkurl{#1}}%
}


\begin{document}
\rurl{ipython.org}\\
\rurl{http://ipython.org}
\end{document}

答案1

\documentclass{article}
\usepackage{hyperref}
\newcommand\rurl[1]{\xurl#1\empty\empty\empty\empty\empty\xurl}
\def\xurl#1#2#3#4#5#6\xurl{%
  \def\tmp{#1#2#3#4#5}%
  \href{\ifx\tmp\xurlhttp \else http://\fi#1#2#3#4#5#6}%
       {\nolinkurl{#1#2#3#4#5#6}}%
}
\def\xurlhttp{http:}

\begin{document}
\rurl{ipython.org}\\
\rurl{http://ipython.org}
\end{document}

相关内容