至少有两个问题要求回答这个问题但没有明确提到这一点,所以我们开始吧。
两者都不这 也不实际上回答了问题,如何使\href
样式与\url
- 相同,而无需在第二个参数中添加其他命令\href
。我看过 Heiko 的评论在另一个相关问题中,这\href
要复杂得多,因为它支持图像和其他东西。但修补\href
以额外包含一个\texttt
不是相当无害吗?
但是,\href
看起来相当复杂;如何以侵入性最小的方式修补它以潜入强制等宽字体样式?
我的天真解决方案/MWE 只是重新定义\href
并插入一个\texttt
,它在简单的测试用例中工作正常,但我不知道在更复杂的 hyperref 用法中会产生什么后果。
\documentclass{article}
\usepackage[hidelinks]{hyperref}
\usepackage{letltxmacro}
\begin{document}
\bigskip
url: \url{www.yahoo.com}
original href: \href{http://www.yahoo.com/}{www.yahoo.com}
\bigskip
url: \url{www.yahoo.com}
nolink-url href: \href{http://www.yahoo.com/}{\nolinkurl{www.yahoo.com}}
% patch it - usually in the preamble of course...
\LetLtxMacro\oldhref\href
\renewcommand{\href}[3][]{%
\oldhref[#1]{#2}{\texttt{#3}}
}
\bigskip
url: \url{www.yahoo.com}
patched href: \href{http://www.yahoo.com/}{www.yahoo.com}
\medskip
yay!
\end{document}
这可能造成什么后果(会破坏它的测试用例)以及如何做得更好?
答案1
您可以像这样将 \ttfamily 添加到 \href。我还添加了一个关键选项来在本地进行更改
\documentclass{article}
\usepackage[hidelinks]{hyperref}
\makeatletter
\define@key{href}{font}{#1}
\makeatother
\usepackage{xpatch}
\newcommand\hrefdefaultfont{\ttfamily}
\xpatchcmd\href{\setkeys{href}{#1}}{\setkeys{href}{font=\hrefdefaultfont,#1}}{}{\fail}
\begin{document}
\bigskip
url: \url{www.yahoo.com}
original href: \href{http://www.yahoo.com/}{www.yahoo.com}
some text
\href[font=\rmfamily\bfseries]{http://www.yahoo.com/}{www.yahoo.com}
\end{document}
答案2
这并没有回答我的问题,但我认为它对某些人可能仍然有用...
经过一番思考,我最终得到了一些完全不同的东西:\url
它有两个参数,基本思想相同,\href
但第二个参数是可选的:
\documentclass{article}
\PassOptionsToPackage{hyphens}{url}
\usepackage[hidelinks]{hyperref}
\usepackage{xparse}
\usepackage{letltxmacro}
\LetLtxMacro\oldurl\url
\RenewDocumentCommand \url{mg}{%
\IfNoValueTF{#2}{%
\oldurl{#1}%
}{%
\href{#1}{\nolinkurl{#2}}%
}
}
\begin{document}
\smallskip
\noindent\rule{\linewidth}{1ex}
\smallskip
\noindent url\hfill\hspace{0.6\linewidth}\url{https://www.yahoo.com/break/me}
\smallskip
\noindent url\#2\hfill\hspace{0.6\linewidth}\url{https://www.yahoo.com/break-me/please}{www.yahoo.com/break/me/please}
\smallskip
\noindent url\#2\hfill\hspace{0.6\linewidth}\url{https://www.yahoo.com/break-me/please}{www.yahoo.com/break-me/please}
\noindent\rule{\linewidth}{1ex}
\end{document}
有了它,您可以轻松创建格式与纯文本相同的链接,\url
但仍可以自定义显示的字符(例如,省略https://
)。此外,界面更加美观且易于记忆 - 无需\nolinkurl
像其他解决方案一样一直重复。