hyperref href 的主机名中含有特殊字符,导致 URL 生成错误

hyperref href 的主机名中含有特殊字符,导致 URL 生成错误

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_natbibbib 样式。还请注意,我删除了某人(可能是 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}

相关内容