我在 overleaf.com latex 项目中有以下代码
%document class
\usepackage[unicode]{hyperref}
\begin{document}
\href{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
\end{document}
我知道格式是,\href{link}{text display}
但文本显示部分不接受特殊字符。我也试过
\href{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
{\url{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}}
但我得到的是无效的 URL。此外,我尝试了
\href[http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf]
{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
并再次收到错误。
我应该尝试什么?我想在 .pdf 输出中显示准确的网页链接。提前感谢您的帮助。
答案1
第二个参数中出现的~
(波浪号)和(下划线)字符_
\href
造成了麻烦。事实上,任何TeX 特殊字符 —— 例如,&
或#
,在 URL 字符串中会引起麻烦。
解决这个问题的一个方法是将 的第二个参数放入“包装器”\href
中\detokenize
。这将删除 参数中所有字符的 TeX 特殊含义\detokenize
。
更好的方法是认识到由于的两个参数\href
是相同的,因此可以\href
用单参数指令替换双参数\url
指令。
如果您加载包,则可以获得“更好的方法”的显著附加好处xurl
,它允许轻松换行包含在 中的长 URL 字符串。重要的是,如果使用 ,\url{...}
则无法保证 LaTeX 会找到令人满意的换行符。\href{<URL string>}{\detokenize{<URL string>}
下面的屏幕截图说明了这一点,其中显示了\href{...}{\detokenize{...}}
和的输出\url{...}
。(黑色垂直线表示文本块的边缘 - 请注意,第一个 URL 字符串突出到右边距。)
\documentclass{article}
\usepackage[T1]{fontenc} % needed to render '_' characters
\usepackage{showframe}
\usepackage{xurl}
\urlstyle{same}
\usepackage[colorlinks,allcolors=blue]{hyperref}
\begin{document}
\href{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
{\detokenize{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}}
\url{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
\end{document}
答案2
首先,请发布一个可行的示例。发布代码片段会让用户难以调试。我认为错误在于文本显示中的“_”。
只需在文本显示参数中的“_”下划线前添加“\”即可更正它,并且可以正常工作。
\documentclass{article}
\usepackage{standalone}
\usepackage[unicode]{hyperref}
\begin{document}
\href{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001_CoursePack_08.pdf}
{http://www.cs.unc.edu/~tracker/media/pdf/SIGGRAPH2001\_CoursePack\_08.pdf}
\end{document}