我正在\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}