#include "Spacing.h"
#include "TexRow.h"
#include "VSpace.h"
+#include "PDFOptions.h"
#include "frontends/alert.h"
#include "insets/InsetListingsParams.h"
#include "support/convert.h"
#include "support/filetools.h"
#include "support/Translator.h"
+#include "support/lstrings.h"
#include <boost/array.hpp>
using lyx::support::bformat;
using lyx::support::rtrim;
using lyx::support::tokenPos;
+using lyx::support::prefixIs;
static char const * const string_paragraph_separation[] = {
* and for detached paragraphs in "indented" documents.
*/
VSpace defskip;
+ PDFOptions pdfoptions;
};
}
+PDFOptions & BufferParams::pdfoptions()
+{
+ return pimpl_->pdfoptions;
+}
+
+
+PDFOptions const & BufferParams::pdfoptions() const
+{
+ return pimpl_->pdfoptions;
+}
+
+
VSpace const & BufferParams::getDefSkip() const
{
return pimpl_->defskip;
spacing().set(spacetranslator().find(nspacing), tmp_val);
} else if (token == "\\float_placement") {
lex >> float_placement;
+
+ } else if (prefixIs(token, "\\pdf_") || token == "\\use_hyperref") {
+ string toktmp = pdfoptions().readToken(lex, token);
+ if (!toktmp.empty()) {
+ lyxerr << "PDFOptions::readToken(): Unknown token: " <<
+ toktmp << endl;
+ return toktmp;
+ }
} else {
lyxerr << "BufferParams::readToken(): Unknown token: " <<
token << endl;
os << "\\paperfontsize " << fontsize << '\n';
spacing().writeFile(os);
+ pdfoptions().writeFile(os);
os << "\\papersize " << string_papersize[papersize]
<< "\n\\use_geometry " << convert<string>(use_geometry)
// The optional packages;
docstring lyxpreamble(from_ascii(features.getPackages()));
+ // We try to load babel late, in case it interferes
+ // with other packages. But some packages also need babel to be loaded
+ // before, e.g. jurabib has to be called after babel.
+ // So load babel after the optional packages but before the user-defined
+ // preamble. This allows the users to redefine babel commands, e.g. to
+ // translate the word "Index" to the German "Stichwortverzeichnis".
+ // For more infos why this place was chosen, see
+ // http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg128425.html
+ // if you encounter problem, you can shift babel to its old place behind
+ // the user-defined preamble
+ if (use_babel && !features.isRequired("jurabib")) {
+ // FIXME UNICODE
+ lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n';
+ lyxpreamble += from_utf8(features.getBabelOptions());
+ }
+
+ // PDF support.
+ // * Hyperref manual: "Make sure it comes last of your loaded
+ // packages, to give it a fighting chance of not being over-written,
+ // since its job is to redefine many LATEX commands."
+ // * Email from Heiko Oberdiek: "It is usually better to load babel
+ // before hyperref. Then hyperref has a chance to detect babel.
+ // * Has to be loaded before the "LyX specific LaTeX commands" to
+ // avoid errors with algorithm floats.
+ odocstringstream oss;
+ pdfoptions().writeLaTeX(oss);
+ lyxpreamble += oss.str();
+
// this might be useful...
lyxpreamble += "\n\\makeatletter\n";
if (!bullets_def.empty())
lyxpreamble += bullets_def + "}\n\n";
- // We try to load babel late, in case it interferes
- // with other packages.
- // Jurabib has to be called after babel, though.
- if (use_babel && !features.isRequired("jurabib")) {
- // FIXME UNICODE
- lyxpreamble += from_utf8(babelCall(language_options.str())) + '\n';
- lyxpreamble += from_utf8(features.getBabelOptions());
- }
-
lyxpreamble += "\\makeatother\n\n";
int const nlines =
}
-TextClass_ptr BufferParams::getTextClass_ptr() const {
+TextClassPtr BufferParams::getTextClassPtr() const {
return textClass_;
}
-void BufferParams::setTextClass(TextClass_ptr tc) {
+void BufferParams::setTextClass(TextClassPtr tc) {
textClass_ = tc;
}