编辑:参见这个答案如果你还希望你的链接不过满(他们会在他们认为合适的地方使用连字符)
我见过这,但是那里使用了 biblatex,在我的情况下我不使用它。
有没有办法我可以这样做:
\url{https://example.tld/example/something/}
或者,如果可能的话,甚至可能:
\url{https://www.example.tld/example/something/}
而且,
https://www.example.tld/example/something/
作为文档中的输出
得到这个:
example.tld/example/something
但它仍然指向完整链接吗?
这个问题没有解决办法吗?我是不是只能访问\href
所有链接?:
\href{https://www.example.tld/example/something/}{example.tld/example/something}
或者有什么东西可以自动解决这个问题?
我之所以问这个问题,是因为如果我在命令中输入链接(\url
就像我希望它显示出来一样),当它被点击时它并不总是能起作用。
答案1
这是基于 LaTeX3 的解决方案,它使用正则表达式执行高级匹配,就像您所引用的帖子一样。
\documentclass{article}
\usepackage{expl3}
\usepackage{hyperref}
\ExplSyntaxOn
\newcommand{\clearurl}[1]{
\tl_set:Nn \parsed_url {#1}
\regex_replace_all:nnN {.*:\/\/(?:www.)?(.*[^\/])\/?} {\1} \parsed_url
\href{#1}{\texttt{\parsed_url}}
}
\ExplSyntaxOff
\begin{document}
Follow the link: \clearurl{https://example.tld/example/something/}
\end{document}
请注意,已经有几十个包可以加载expl3
(例如xparse
),因此你甚至可能不需要使用\usepackage{expl3}
编辑:
评论中讨论了由于\texttt
工作方式而导致的连字符问题。以下是基于这个答案。
\documentclass{article}
\usepackage{expl3}
\usepackage{hyperref}
\makeatletter
\DeclareRobustCommand\ttfamily
{\not@math@alphabet\ttfamily\mathtt
\fontfamily\ttdefault\selectfont\hyphenchar\font=-1\relax}
\makeatother
\DeclareTextFontCommand{\mytexttt}{\ttfamily\hyphenchar\font=`\/\relax}
\ExplSyntaxOn
\newcommand{\clearurl}[1]{
\tl_set:Nn \parsed_url {#1}
\regex_replace_all:nnN {.*:\/\/(?:www.)?(.*[^\/])\/?} {\1} \parsed_url
\href{#1}{\mytexttt{\parsed_url}}
}
\ExplSyntaxOff
\begin{document}
Follow the link: \clearurl{https://example.tld/example/something/}
\end{document}
答案2
您可以为此提议定义一个新命令,例如:
\documentclass{article}
\usepackage{hyperref}
\newcommand{\shortlink}[1]{\href{https://www.#1}{\texttt{#1}}}
\begin{document}
\shortlink{example.tld/example/something}
\end{document}