
Ich verwende die frenchlinks
Option für Hyperref, die dank sorgfältiger Pflege von XeLaTeX + Linux LibertineBona FideKapitälchen-Links auf der Seite. Das Problem ist, dass ich beim Ausschneiden und Einfügen aus der generierten PDF-Datei Unicode-Kapitälchen erhalte, obwohl ich ASCII bevorzugen würde.
Kann mir jemand sagen, wie ich dieses MWE ändern kann? (Habe ich beim Setup einen Fehler gemacht?)
Hinweis: Für das aktualisierte MWE habe ich versucht, den Patch \href
mit der akzeptierten Antwort von Patchen von Argumenten innerhalb eines Makros (kein Würfel).
MWE aktualisiert
\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}
Original-MWE
\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}
Antwort1
Das Makro
\hrefnew
ist mit der neuen Funktion definiert/ActualText
, der Hauptteil verwendet jedoch die unveränderte Version\href
.Das Makro
\href
verwendet das Undefinierte\normalexpandarg
, das aus einemxstring
nicht geladenen Paket stammt.Wenn die Methode
plain
mit Optionunicode
verwendet wird, muss das Argument ein gültigerUTF-16BE
String sein. In diesem Fall würde ichhyperref
die richtige Konvertierung mit der Methode durchführen lassenpdfstringdef
:\BeginAccSupp{method=pdfstringdef,ActualText={#2}}
\href
ist kein guter Kandidat für eine Neudefinition, da das erste Argument, das mit geänderten Catcodes gelesen wird, speziell behandelt wird. Ein besserer Kandidat ist daher das interne \href@
:
\makeatletter
\let\href@old\href@
\renewcommand*{\href@}[2]{%
\href@old{#1}{%
\BeginAccSupp{%
method=pdfstringdef,%
ActualText={#2},%
}%
#2%
\EndAccSupp{}%
}%
}
\makeatletter