使用 \href 定义一些新命令,## 的问题

使用 \href 定义一些新命令,## 的问题

我想设置一个新命令,旨在使用 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

相关内容