如何避免 hyperref 的 \url 中的“http:”部分?

如何避免 hyperref 的 \url 中的“http:”部分?

是否可以使用\urlhyperref 包中的命令和“简写” URL,例如

\url{ipython.org}

代替

\url{http://ipython.org} ?

前者似乎只能链接到我电脑上的本地文件,而不是检索网址。(我想我可以使用\href,但\url它更短,我想保留它的格式功能。)

编辑回应 karlkoeller 的回答:

抱歉,我写得不够准确。我不介意输入“http”部分,但我宁愿不看到它打印

egreg 的回答满足了我的要求——非常感谢!

答案1

最好使用不同的命令,以便其用法更清楚:

\documentclass{article}
\usepackage{xcolor}
\usepackage[
  colorlinks,
  linkcolor=magenta
]{hyperref}
\newcommand\rurl[1]{%
  \href{http://#1}{\nolinkurl{#1}}%
}

\begin{document}
This is a link \rurl{ipython.org} written in abbreviated form.
\end{document}

当然,您会失去技巧\url并且\href能够使用复杂的 URI 来处理特殊字符,但是像这样的短 URI 不应该有这个问题。

图像中的颜色表明它确实是一个网页的链接。

在此处输入图片描述

如果您的 URL 很长,请加载xurl

\documentclass{article}
\usepackage{xcolor}
\usepackage{xurl}
\usepackage[
  colorlinks,
  linkcolor=magenta
]{hyperref}

\newcommand\rurl[1]{%
  \href{http://#1}{\nolinkurl{#1}}%
}

\begin{document}
This is a link \rurl{ipython.org} written in abbreviated form.

This is a very long link \rurl{tex.stackexchange.com/questions/139921/how-to-avoid-the-http-part-in-hyperrefs-url/139934?noredirect=1\#comment1699916_139934}

\end{document}

在此处输入图片描述

答案2

您可以加载包url并重新定义命令\url,如下所示:

\DeclareUrlCommand\url{\color{magenta}\def\UrlLeft{http://}\urlstyle{tt}}

xcolor请注意,如果您想为链接添加颜色,也需要该包。

现在你可以简单地写

\url{ipython.org}

http://自动添加。

完整示例

\documentclass{article}
\usepackage{hyperref}

\usepackage{xcolor,url}

\DeclareUrlCommand\url{\color{magenta}\def\UrlLeft{http://}\urlstyle{tt}}

\begin{document}

\url{ipython.org}

\end{document} 

输出:

在此处输入图片描述


当然,你可以保留原\url命令,然后定义一个新命令,\shorturl以便

\documentclass{article}
\usepackage[colorlinks]{hyperref}

\usepackage{xcolor,url}

\DeclareUrlCommand\shorturl{\color{magenta}\def\UrlLeft{http://}\urlstyle{tt}}

\begin{document}

\url{local-link}

\shorturl{ipython.org}

\end{document} 

输出:

在此处输入图片描述

答案3

我使用以下补丁向 添加了可选参数,\url该参数包含在链接地址中但不打印。您可以在 url 的两个部分中使用“特殊”字符,例如 、_和(与原始 一样),但那里$&%\url一定不参数中、参数之间或宏与参数之间的任何换行符。(这可以解决 - 原始宏就是这样做的 - 但必须非常小心地完成,对我来说这不值得付出努力,因为我不认为这是一个相关的限制。)

\documentclass{article}

\usepackage{etoolbox}
\usepackage{xparse}

\usepackage[colorlinks]{hyperref}

\makeatletter
  % \url[no-print-prefix]{url}
  \begingroup
    \endlinechar=-1 %
    \catcode`\^^A=14 %
    \catcode`\^^M\active
    \catcode`\%\active
    \catcode`\#\active
    \catcode`\_\active
    \catcode`\$\active
    \catcode`\&\active
    \let\my@url\hyper@normalise
    \patchcmd\my@url{\hyper@n@rmalise}{\my@url@}{}{}^^A
    \global\let\my@url\my@url
  \endgroup
  \DeclareRobustCommand*\my@url@[2][]{\endgroup\href{#1#2}{\nolinkurl{#2}}}
  \DeclareRobustCommand*\url{\my@url}
\makeatother

\begin{document}

This is a link written in abbreviated form: \url[https://]{tex.stackexchange.com}

Special characters work, too: \url[https://]{en.wikipedia.org/w/index.php?search=LaTeX&title=Special%3ASearch}

\end{document}

MWE 输出

相关内容