hyperref href 中的 URL 中的特殊字符会生成错误的 URL
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\href{https://www.målogmæle.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}{En hvislen i bækken}
\end{document}
我得到的链接是:
https://www.m\unhbox \voidb@x \bgroup \let \unhbox \voidb@x \setbox \@tempboxa \hbox {a\global \mathchardef \accent@spacefactor \spacefactor }\let \begingroup \endgroup \relax \let \ignorespaces \relax \accent 23 a\egroup \spacefactor \accent@spacefactor logm\OT1\ae le.dk/MoM-arkiv/MoM_36/MoM36_3.pdf
该链接实际上来自 Bibtex 文件,但我认为这不是实际问题。 bibtex 文件是:
@Article{Q87401587,
author = {Sune Gregersen},
title = {En hvislen i bækken},
journal = {Mål \& mæle},
year = {2014},
pages = {5-8},
URL = {https://www.målogmæle.dk/MoM-arkiv/MoM\_36/MoM36\_3.pdf},
wikidata = {Q87401587}
}
使用该文件的乳胶文件是:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\cite{Q87401587}
\bibliographystyle{acl_natbib}
\bibliography{tmp}
\end{document}
运行 Bibtex 会产生这个.bbl
文件:
\begin{thebibliography}{}
\expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi
\bibitem[{Gregersen(2014)}]{Q87401587}
Sune Gregersen. 2014.
\newblock \href{https://www.målogmæle.dk/MoM-arkiv/MoM\_36/MoM36\_3.pdf}{En
hvislen i bækken}.
\newblock {\em Mål \& mæle\/} pages 5--8.
\end{thebibliography}
有没有办法来解决这个问题?
答案1
使用当前的 LaTeX 和 utf8 编码的输入文件不会发生这种情况。链接如您所见。实际上,您的链接未正确编码,PDF 需要特殊字符的百分比编码。因此,最好使用 punycode(如另一个答案中所示),或者使用这个:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\href{https://www.m%C3%A5logm%C3%A6le.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}{En hvislen i
bækken}
\end{document}
使用 \DocumentMetadata{} 加载的新 pdf 管理,您还可以 hyperref let 重新编码 url:
\DocumentMetadata{}
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\hrefurl[urlencode]{https://www.målogmæle.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}{En
hvislen i bækken}
\end{document}
答案2
这里的关键字是“punycode”,答案是域名中的 Punycode(unicode)未正确转换
punycode 转换后的 latex 文件将会起作用:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\href{https://www.xn--mlogmle-exan.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}{En hvislen i bækken}
\end{document}
答案3
我建议您使用 LuaLaTeX 或 XeLaTeX(即完全支持 unicode 的引擎之一)而不是 pdfLaTeX 来编译文档。如果您进行切换,您将获得以下屏幕截图中所示的输出,我认为这就是您所需要的。
请注意,示例代码采用了plainnat
书目样式,因为我的 TeX 发行版 MacTeX2022 无法访问acl_natbib
bib 样式。还请注意,我删除了某人(可能是 OP?)似乎_
在 URL 字符串中的字符前插入的反斜杠字符。
bbl 文件中的条目如下所示:
\bibitem[Gregersen(2014)]{Q87401587}
Sune Gregersen.
\newblock En hvislen i bækken.
\newblock \emph{Mål \& mæle}, pages 5--8, 2014.
\newblock URL \url{https://www.målogmæle.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}.
% !TEX TS-program = lualatex %% or 'xelatex', if you prefer
\documentclass{article}
\begin{filecontents}[overwrite]{tmp.bib}
@Article{Q87401587,
author = {Sune Gregersen},
title = {En hvislen i bækken},
journal = {Mål \& mæle},
year = {2014},
pages = {5-8},
URL = {https://www.målogmæle.dk/MoM-arkiv/MoM_36/MoM36_3.pdf},
wikidata = {Q87401587}
}
\end{filecontents}
\usepackage[numbers]{natbib}
\bibliographystyle{plainnat} % I don't have the 'acl_natbib' bib style
\usepackage{xurl} % allow linebreaks at arbitrary points in URL strings
\urlstyle{same}
\usepackage[colorlinks,allcolors=blue]{hyperref}
\begin{document}
\noindent
\href{https://www.målogmæle.dk/MoM-arkiv/MoM_36/MoM36_3.pdf}{En hvislen i bækken}
\nocite{*}
\bibliography{tmp}
\end{document}