hyperref 为 href 添加扩展

hyperref 为 href 添加扩展

我正在\href其中创建一个简单的宏。但这似乎有点棘手,因为使用\href参数无法识别链接格式。它只会.pdf向链接目标添加不需要的内容。

基本上链接

https://ctan.org/pkg/hyperref

自动更改为

https://ctan.org/pkg/hyperref.pdf

什么原因导致了这种现象?

\documentclass{article}
\usepackage{expl3,xparse}
\usepackage{hyperref}
\ExplSyntaxOn
\cs_new:Npn \__pkgcls:n #1 {
    \texorpdfstring{
            \href{https://ctan.org/pkg/#1}{\ttfamily#1}
    }{#1}
}
\DeclareDocumentCommand{\class}{o m}{% typeset class names
    \__pkgcls:n { #2 }
}
\DeclareDocumentCommand{\package}{o m}{% typeset package names
    \__pkgcls:n { #2 }
}
\ExplSyntaxOff
\begin{document}
  \class{scrartcl}\\\package{hyperref}\\\href{https://ctan.org/pkg/hyperref}{\ttfamily hyperref}
\end{document}

更新:以下是屏幕截图:

错误的扩展名

更新:这个问题似乎明显与 expl3 有关。使用类似

\def\pkgcls#1{\texorpdfstring{\href{https://ctan.org/pkg/#1}{\ttfamily #1}}{#1}}
\def\pkg#1{\pkgcls{#1}}

产生正确的结果。

答案1

:根据Christian Hupfer 给出的关于 URL 可能无法正常播放的好提示,我进行了一些修改,并使用\c_colon_str而不是文字冒号解决了该问题。

\documentclass{article}
\usepackage{expl3,xparse}
\usepackage{hyperref}
\ExplSyntaxOn
\cs_new:Npn \__pkgcls:n #1 {
    \texorpdfstring{
            \href{https\c_colon_str//ctan.org/pkg/#1}{\ttfamily#1}
    }{#1}
}
\DeclareDocumentCommand{\class}{o m}{% typeset class names
    \__pkgcls:n { #2 }
}
\DeclareDocumentCommand{\package}{o m}{% typeset package names
    \__pkgcls:n { #2 }
}
\ExplSyntaxOff
\begin{document}
  \class{scrartcl}\\\package{hyperref}\\\href{https://ctan.org/pkg/hyperref}{\ttfamily hyperref}
\end{document}

相关内容