我想设置一个新命令,旨在使用 href(来自 hyperref 包),但通过提供一些超目标作为特定 pdf 的新命令的参数。
hypperref 和 href 的经典用法是:在第一个文档 A 中,我放了一些超目标:
\hypertarget{fileAhypertarget}{Should come to this}
在第二个文档 B 中,我引用了文档 FileA.pdf 的超目标
\href{fileA.pdf#fileAhypertarget}{Let's go to file A!}
请注意,pdf 中 url 的 href 语法使用 # 符号
它可以工作,但现在我想定义一个这种类型的命令
\newcommand{\myhref}[2]{\href{fileA.pdf##1}{#2}}
但是它不起作用,因为 href 命令的 # 符号与#
的参数符号冲突\newcommand
。
你知道吗,我尝试了不同的语法,\protect 并想到了 \expandafter,但我失败了。
如果你有任何想法,非常感谢
答案1
你需要让 LaTeX 看到“字符串化” #
;这里有一种方法
\documentclass{article}
\usepackage{hyperref}
\begingroup\lccode`?=`# \lowercase{\endgroup
\newcommand{\myhref}[2]{\href{fileA.pdf?#1}{#2}}
}
\begin{document}
\myhref{fileAhypertarget}{Let's go}
\end{document}
当然,您会失去对特殊字符的特殊处理,但如果参数中没有特殊字符,\href
那就不是问题。#1