mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
PDFoptions: improve the functionality in case the hyperrref is
already loaded by the textclass. Some corner cases still missing (see fixme and link below). http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg134643.html git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@22660 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
387b6de668
commit
2eb75da023
@ -1254,15 +1254,9 @@ bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
|
||||
// * Has to be loaded before the "LyX specific LaTeX commands" to
|
||||
// avoid errors with algorithm floats.
|
||||
// use hyperref explicitely when it is required
|
||||
/** FIXME: If the textclass provides hyperref, the GUI is
|
||||
non-functional. To fix this, we would need requires("hyperref")
|
||||
below, pass getTextClass().provides("hyperref") to
|
||||
pdfoptions().writeLaTeX(oss) and load the options via
|
||||
\hypersetup instead of tha package's optional argument.
|
||||
**/
|
||||
if (features.mustProvide("hyperref")) {
|
||||
if (features.isRequired("hyperref")) {
|
||||
odocstringstream oss;
|
||||
pdfoptions().writeLaTeX(oss);
|
||||
pdfoptions().writeLaTeX(oss, getTextClass().provides("hyperref"));
|
||||
lyxpreamble += oss.str();
|
||||
}
|
||||
|
||||
|
@ -87,11 +87,10 @@ void PDFOptions::writeFile(ostream & os) const
|
||||
}
|
||||
|
||||
|
||||
void PDFOptions::writeLaTeX(odocstream & os) const
|
||||
void PDFOptions::writeLaTeX(odocstream & os, bool hyperref_already_provided) const
|
||||
{
|
||||
string opt;
|
||||
|
||||
opt = "\\usepackage[";
|
||||
// since LyX uses unicode, also set the PDF strings to unicode strings with the
|
||||
// hyperref option "unicode"
|
||||
opt += "unicode=true, ";
|
||||
@ -123,8 +122,7 @@ void PDFOptions::writeLaTeX(odocstream & os) const
|
||||
if (!pagemode.empty())
|
||||
opt += "pdfpagemode=" + pagemode + ',';
|
||||
|
||||
opt = rtrim(opt,",");
|
||||
opt += "]\n {hyperref}\n";
|
||||
|
||||
|
||||
// load the pdftitle etc. as hypersetup, otherwise you'll get
|
||||
// LaTeX-errors when using non-latin characters
|
||||
@ -142,8 +140,25 @@ void PDFOptions::writeLaTeX(odocstream & os) const
|
||||
hyperset += quoted_options_get();
|
||||
}
|
||||
hyperset = rtrim(hyperset,",");
|
||||
|
||||
|
||||
// use in \\usepackage parameter as not all options can be handled inside \\hypersetup
|
||||
if (!hyperref_already_provided) {
|
||||
opt = rtrim(opt,",");
|
||||
opt = "\\usepackage[" + opt + "]\n {hyperref}\n";
|
||||
|
||||
if (!hyperset.empty())
|
||||
opt += "\\hypersetup{" + hyperset + "}\n ";
|
||||
} else
|
||||
// only in case hyperref is already loaded by the current text class
|
||||
// try to put it into hyperset
|
||||
//
|
||||
// FIXME: this still does not fix the cases where hyperref is loaded
|
||||
// and the option is active only when part of usepackage parameter
|
||||
// (e.g. pdfusetitle).
|
||||
{
|
||||
opt = "\\hypersetup{" + opt + hyperset + "}\n ";
|
||||
}
|
||||
|
||||
// FIXME UNICODE
|
||||
os << from_utf8(opt);
|
||||
|
@ -30,7 +30,7 @@ public:
|
||||
/// output to lyx header
|
||||
void writeFile(std::ostream &) const;
|
||||
/// output to tex header
|
||||
void writeLaTeX(odocstream &) const;
|
||||
void writeLaTeX(odocstream &, bool hyperref_already_provided) const;
|
||||
/// read tokens from lyx header
|
||||
std::string readToken(Lexer &lex, std::string const & token);
|
||||
/// set implicit settings for hyperref
|
||||
|
Loading…
Reference in New Issue
Block a user