在我的文档中,符号/
处于活动状态。这导致链接出现问题。它们包含斜线的扩展,而不是斜线。
通缉:
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}