
Estou utilizando a frenchlinks
opção para hyperref, que devido aos cuidados solícitos do XeLaTeX + Linux Libertine, dágenuínolinks em letras maiúsculas na página. O problema é que, quando recorto e colo o PDF gerado, retiro letras maiúsculas Unicode, mas prefiro ASCII.
Alguém pode sugerir como modificar este MWE? (Cometi um erro na configuração?)
Observe que, para o MWE atualizado, tentei corrigir \href
usando a resposta aceita de Corrigindo argumentos dentro de uma macro (sem dados).
MWE atualizado
\documentclass[article, a4paper, 12pt, oneside]{memoir}
\usepackage{xunicode}
\usepackage[MnSymbol]{mathspec}
%\defaultfontfeatures{Mapping=tex-text}
\setmainfont[Mapping= tex-text,
SmallCapsFont={Linux Libertine O},
SmallCapsFeatures= {Color=FFFFFF, RawFeature={+smcp,+hlig,+dlig}},
BoldFont={Linux Biolinum O Bold},
% BoldFeatures={Color = FFFFFF,SmallCapsFont={Linux Libertine Capitals O Bold},%
% SmallCapsFeatures = { Color=FFFFFF, RawFeature={+smcp,+hlig,+dlig}} },
ItalicFont={Linux Libertine O Italic},
ItalicFeatures={Color = FFFFFF, %
SmallCapsFont={Linux Libertine Capitals O Italic}, %
SmallCapsFeatures = {Color=FFFFFF}},
BoldItalicFont={Linux Biolinum O},
BoldItalicFeatures={ Color = FFFFFF, %
SmallCapsFont={Linux Libertine Capitals O Bold Italic}, %
SmallCapsFeatures = { Color=FFFFFF,RawFeature={+smcp,+hlig,+dlig}}} ]{Linux Libertine O}
\usepackage[linktoc=all,frenchlinks,pdfborderstyle={/S/U/W .5},citebordercolor={1 1 1},linkbordercolor={1 1 1},urlbordercolor={1 1 1}]{hyperref}
\usepackage{xstring}
\usepackage{accsupp}
\usepackage{etoolbox}
\catcode`\#=12
\newcommand{\newhref}{%
\normalexpandarg%
\patchcmd{\href}{#2}{%
\BeginAccSupp{method=pdfstring,ActualText={#2}}%
#2%
\EndAccSupp{}%
}{}{}%
}
\catcode`\#=6
\begin{document}
Sexy tex: \newhref{http://tex.stackexchange.com}{sxe}.
\end{document}
MWE original
\documentclass[article, a4paper, 12pt, oneside]{memoir}
\usepackage{xunicode}
\usepackage[MnSymbol]{mathspec}
%\defaultfontfeatures{Mapping=tex-text}
\setmainfont[Mapping= tex-text,
SmallCapsFont={Linux Libertine O},
SmallCapsFeatures= {Color=FFFFFF, RawFeature={+smcp,+hlig,+dlig}},
BoldFont={Linux Biolinum O Bold},
% BoldFeatures={Color = FFFFFF,SmallCapsFont={Linux Libertine Capitals O Bold},%
% SmallCapsFeatures = { Color=FFFFFF, RawFeature={+smcp,+hlig,+dlig}} },
ItalicFont={Linux Libertine O Italic},
ItalicFeatures={Color = FFFFFF, %
SmallCapsFont={Linux Libertine Capitals O Italic}, %
SmallCapsFeatures = {Color=FFFFFF}},
BoldItalicFont={Linux Biolinum O},
BoldItalicFeatures={ Color = FFFFFF, %
SmallCapsFont={Linux Libertine Capitals O Bold Italic}, %
SmallCapsFeatures = { Color=FFFFFF,RawFeature={+smcp,+hlig,+dlig}}} ]{Linux Libertine O}
\usepackage[linktoc=all,frenchlinks,pdfborderstyle={/S/U/W .5},citebordercolor={1 1 1},linkbordercolor={1 1 1},urlbordercolor={1 1 1}]{hyperref}
\usepackage{xstring} % added as suggested in 1st given answer
\usepackage{accsupp}
\let\hrefold\href
\newcommand*{\hrefnew}[2]{%
\normalexpandarg%
\BeginAccSupp{method=plain,unicode,ActualText={#2}}%
\hrefold{#1}{#2}%
\EndAccSupp{}%
}
\begin{document}
Sexy tex: \href{http://tex.stackexchange.com}{sxe}.
\end{document}
Responder1
A macro
\hrefnew
é definida com o novo recurso/ActualText
, mas o corpo está usando o não modificado\href
.A macro
\href
está usando o indefinido\normalexpandarg
que vem do pacotexstring
que não está carregado.Se o método
plain
com opçãounicode
for usado, o argumento deverá ser umaUTF-16BE
string válida. Nesse caso eu deixariahyperref
fazer a conversão correta usando o métodopdfstringdef
:\BeginAccSupp{method=pdfstringdef,ActualText={#2}}
\href
não é um bom candidato para redefinição, devido ao tratamento especial do primeiro argumento que é lido com códigos de gato alterados. Portanto, um candidato melhor é o interno \href@
:
\makeatletter
\let\href@old\href@
\renewcommand*{\href@}[2]{%
\href@old{#1}{%
\BeginAccSupp{%
method=pdfstringdef,%
ActualText={#2},%
}%
#2%
\EndAccSupp{}%
}%
}
\makeatletter