这与这个问题相关
但特定于 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 在 Adobe 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 查看器上不起作用。