trackChanges = false;
outputChanges = false;
use_default_options = true;
+ maintain_unincluded_children = false;
secnumdepth = 3;
tocdepth = 3;
language = default_language;
readModules(lex);
} else if (token == "\\begin_removed_modules") {
readRemovedModules(lex);
+ } else if (token == "\\begin_includeonly") {
+ readIncludeonly(lex);
+ } else if (token == "\\maintain_unincluded_children") {
+ lex >> maintain_unincluded_children;
} else if (token == "\\options") {
lex.eatLine();
options = lex.getString();
os << *it << '\n';
os << "\\end_modules" << '\n';
}
-
+
+ // includeonly
+ if (!includedChildren_.empty()) {
+ os << "\\begin_includeonly" << '\n';
+ list<string>::const_iterator it = includedChildren_.begin();
+ list<string>::const_iterator en = includedChildren_.end();
+ for (; it != en; it++)
+ os << *it << '\n';
+ os << "\\end_includeonly" << '\n';
+ }
+ os << "\\maintain_unincluded_children "
+ << convert<string>(maintain_unincluded_children) << '\n';
+
// local layout information
if (!local_layout.empty()) {
// remove '\n' from the end
bool BufferParams::writeLaTeX(odocstream & os, LaTeXFeatures & features,
- TexRow & texrow) const
+ TexRow & texrow, FileName const & filepath) const
{
os << "\\documentclass";
// handle inputenc etc.
writeEncodingPreamble(os, features, texrow);
+ // includeonly
+ if (!features.runparams().includeall && !includedChildren_.empty()) {
+ os << "\\includeonly{";
+ list<string>::const_iterator it = includedChildren_.begin();
+ bool first = true;
+ for (; it != includedChildren_.end() ; ++it) {
+ string incfile = *it;
+ FileName inc = makeAbsPath(incfile, filepath.absFilename());
+ string mangled = DocFileName(changeExtension(inc.absFilename(), ".tex")).
+ mangledFilename();
+ if (!features.runparams().nice)
+ incfile = mangled;
+ // \includeonly doesn't want an extension
+ incfile = changeExtension(incfile, string());
+ incfile = support::latex_path(incfile);
+ if (!incfile.empty()) {
+ if (!first)
+ os << ",";
+ os << from_utf8(incfile);
+ }
+ first = false;
+ }
+ os << "}\n";
+ }
+
if (!listings_params.empty() || features.isRequired("listings")) {
os << "\\usepackage{listings}\n";
texrow.newline();
// 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.
- // use hyperref explicitely when it is required
+ // use hyperref explicitly if it is required
if (features.isRequired("hyperref")) {
- odocstringstream oss;
- pdfoptions().writeLaTeX(oss, documentClass().provides("hyperref"));
- lyxpreamble += oss.str();
+ // pass what we have to stream here, since we need
+ // to access the stream itself in PDFOptions.
+ os << lyxpreamble;
+
+ int lines =
+ int(count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
+
+ OutputParams tmp_params = features.runparams();
+ lines += pdfoptions().writeLaTeX(tmp_params, os,
+ documentClass().provides("hyperref"));
+ texrow.newlines(lines);
+ // set back for the rest
+ lyxpreamble.clear();
}
-
+
// Will be surrounded by \makeatletter and \makeatother when not empty
docstring atlyxpreamble;
int const nlines =
int(count(lyxpreamble.begin(), lyxpreamble.end(), '\n'));
- for (int j = 0; j != nlines; ++j) {
- texrow.newline();
- }
+ texrow.newlines(nlines);
os << lyxpreamble;
}
+void BufferParams::readIncludeonly(Lexer & lex)
+{
+ if (!lex.eatLine()) {
+ lyxerr << "Error (BufferParams::readIncludeonly):"
+ "Unexpected end of input." << endl;
+ return;
+ }
+ while (true) {
+ string child = lex.getString();
+ if (child == "\\end_includeonly")
+ break;
+ includedChildren_.push_back(child);
+ lex.eatLine();
+ }
+}
+
+
string BufferParams::paperSizeName(PapersizePurpose purpose) const
{
char real_papersize = papersize;
}
// ROMAN FONTS
- // Computer Modern (must be explicitely selectable -- there might be classes
+ // Computer Modern (must be explicitly selectable -- there might be classes
// that define a different default font!
if (rm == "cmr") {
os << "\\renewcommand{\\rmdefault}{cmr}\n";