重置 \href 中的活动字符

重置 \href 中的活动字符

在我的文档中,符号/处于活动状态。这导致链接出现问题。它们包含斜线的扩展,而不是斜线。

通缉:

http://aaa/ggg/ddd/

得到:

http://www.\discretionary%20{.com/}{}{/ }\discretionary%20{/}{}{/}aaa\discretio nary%20{/}{}{/}ggg\discretionary%20{/}{ }{/}ddd\discretionary%20{/}{}{/}

如何得到想要的结果?

\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}

\def\SlashDesc{\discretionary{/}{}{/}}
\AtBeginDocument{\catcode`\/=\active}
\catcode`\/=\active
\def/{\SlashDesc}

\pdfstringdefDisableCommands{\def/{X}} % Doesn't help

\begin{document}

\begin{minipage}{5cm}
\lipsum*[75]
\href{http://aaa/ggg/ddd/}{aaa/bbb/ccc/ddd/eee/fff/ggg/hhh/iii/jjj/kkk/lll}
\end{minipage}

\end{document}

答案1

/首先,您不应该激活。控制序列\slash已经(更好地)满足了您的要求\SlashDesc

如果你坚持这样做,那么你必须将的设置添加/\hyper@normalise列表中。这里有一种方法;我还简化了你对活动斜线的定义。

\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}

\makeatletter
\let\ORIG@hyper@normalise\hyper@normalise
\def\hyper@normalise{%
  % make / other
  \begingroup\@makeother\/%
  % now expand the original and gobble the leading \begingroup
  \expandafter\@gobble\ORIG@hyper@normalise}
\makeatother

\AtBeginDocument{\catcode`\/=\active}
\begingroup\lccode`~=`/ \lowercase{\endgroup\let~}\slash

\begin{document}

\makeatletter

\begin{minipage}{5cm}
\lipsum*[75]%
\href{http://aaa/ggg/ddd/}{aaa/bbb/ccc/ddd/eee/fff/ggg/hhh/iii/jjj/kkk/lll}
\end{minipage}

\end{document}

(抱歉,添加图片的界面好像无法使用。)

答案2

非常感谢egreg您提出的如何注入的建议\hyper@normalise。这对我来说是一个新且非常有用的技巧。

该解决方案也可以推广至其他活动符号。

\documentclass{article}
\usepackage{lipsum}
\usepackage{hyperref}

\makeatletter
\let\ORIG@hyper@normalise\hyper@normalise
\def\ORIG@slash@letter{/}
\catcode`\/=\active
\edef\hyper@normalise{%
  \begingroup
  \def\noexpand/{\ORIG@slash@letter}%
  \noexpand\expandafter\noexpand\@gobble\noexpand\ORIG@hyper@normalise}
\makeatother

% http://tex.stackexchange.com/questions/97310/
\AtBeginDocument{\catcode`\/=\active \def/{\slash\hspace{0pt}}}

\begin{document}

\def\aaa{
\begin{minipage}{5cm}
\lipsum*[75]%
\href{http://tex.stackexchange.com/questions/160031/}{aaa/bbb/ccc/ddd/eee/fff/ggg/hhh/iii/jjj/kkk/lll}
\end{minipage}
}
\aaa

\end{document}

相关内容