DOI 中的特殊字符导致 URL 无效

DOI 中的特殊字符导致 URL 无效

这与这个问题相关

URL 链接中的特殊字符

但特定于 DOI 并且不涉及 Unicode 字符。

我必须使用像这样的奇怪 DOI

10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2

因此,我需要能够构建类似的命令

\doi{10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2}
-> 
\href%
{http://doi.org/10.1175/1520-0485%281986%29016%3C1929%3ACTWOTE%3E2.0.CO%3B2}%
{doi:10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2}

也就是说,我需要在第一个参数中基于\href包含无效字符作为 URL 的 DOI 提供一个有效的 URL。

我们可以假设有一个外部命令可以转义 URL 中的无效字符:

$ urlencode '10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2'
10.1175/1520-0485%281986%29016%3C1929%3ACTWOTE%3E2.0.CO%3B2
$

如果我知道如何调用外部程序并捕获其标准输出,我就能构建这样的 LaTeX 命令。

或者也许有人已经有解决方案了。

如果urlencode可以在 LaTeX 内部使用,它也可以作为解决 Unicode 字符问题的一种方法。

顺便说一句,带有无效字符的 URL 在 Adob​​e Reader 上仍然可以使用,但在 Apple 的 PDF 查看器和其他使用 Webkit 的 PDF 查看器上却不行(我被告知如此)。我怀疑 Apple 不会修复它,因为 URL 毕竟是无效的。

答案1

事实证明,该doi软件包已经提供了问题中描述的命令(尽管我不知道它是否真的扩展为\href命令)。感谢@UrlikeFischer。

你只需\usepackage{doi}在序言中:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{doi}
\usepackage{url}
\usepackage{hyperref}
\begin{document}
\noindent
\href%
{http://doi.org/10.1175/1520-0485%281986%29016%3C1929%3ACTWOTE%3E2.0.CO%3B2}%
{URL including percent encoding}\\
\href%
{http://doi.org/10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2}%
{URL including invalid characters}\\
\url{http://doi.org/10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2}\\
\url{http://doi.org/10.1175/1520-0485%281986%29016%3C1929%3ACTWOTE%3E2.0.CO%3B2}\\
\doi{10.1175/1520-0485(1986)016<1929:CTWOTE>2.0.CO;2}
\end{document}

这是为了证明指向无效 URL 的超链接在 Apple 的 PDF 查看器上不起作用。

相关内容