mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-11 11:08:41 +00:00
Fix bug #6170 (Latex Compiler error when lyx file is located in a path which contains a "#")
This removes \input@path handling. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_2_0_X@39568 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
550f683049
commit
ef710e618f
@ -1239,7 +1239,6 @@ bool Buffer::write(ostream & ofs) const
|
||||
|
||||
|
||||
bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
string const & original_path,
|
||||
OutputParams const & runparams_in,
|
||||
bool output_preamble, bool output_body) const
|
||||
{
|
||||
@ -1272,8 +1271,7 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
otexstream os(ofs, d->texrow);
|
||||
try {
|
||||
os.texrow().reset();
|
||||
writeLaTeXSource(os, original_path,
|
||||
runparams, output_preamble, output_body);
|
||||
writeLaTeXSource(os, runparams, output_preamble, output_body);
|
||||
}
|
||||
catch (EncodingException & e) {
|
||||
odocstringstream ods;
|
||||
@ -1316,7 +1314,6 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
|
||||
|
||||
void Buffer::writeLaTeXSource(otexstream & os,
|
||||
string const & original_path,
|
||||
OutputParams const & runparams_in,
|
||||
bool const output_preamble, bool const output_body) const
|
||||
{
|
||||
@ -1352,57 +1349,12 @@ void Buffer::writeLaTeXSource(otexstream & os,
|
||||
// macros will be put in the prefix anyway.
|
||||
updateMacroInstances(OutputUpdate);
|
||||
|
||||
// There are a few differences between nice LaTeX and usual files:
|
||||
// usual is \batchmode and has a
|
||||
// special input@path to allow the including of figures
|
||||
// with either \input or \includegraphics (what figinsets do).
|
||||
// input@path is set when the actual parameter
|
||||
// original_path is set. This is done for usual tex-file, but not
|
||||
// for nice-latex-file. (Matthias 250696)
|
||||
// Note that input@path is only needed for something the user does
|
||||
// in the preamble, included .tex files or ERT, files included by
|
||||
// LyX work without it.
|
||||
// With respect to nice LaTeX, usual files have \batchmode
|
||||
if (output_preamble) {
|
||||
if (!runparams.nice) {
|
||||
// code for usual, NOT nice-latex-file
|
||||
os << "\\batchmode\n"; // changed from \nonstopmode
|
||||
}
|
||||
if (!original_path.empty()) {
|
||||
// FIXME UNICODE
|
||||
// We don't know the encoding of inputpath
|
||||
docstring const inputpath = from_utf8(support::latex_path(original_path));
|
||||
docstring uncodable_glyphs;
|
||||
Encoding const * const enc = runparams.encoding;
|
||||
if (enc) {
|
||||
for (size_t n = 0; n < inputpath.size(); ++n) {
|
||||
docstring const glyph =
|
||||
docstring(1, inputpath[n]);
|
||||
if (enc->latexChar(inputpath[n], true) != glyph) {
|
||||
LYXERR0("Uncodable character '"
|
||||
<< glyph
|
||||
<< "' in input path!");
|
||||
uncodable_glyphs += glyph;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// warn user if we found uncodable glyphs.
|
||||
if (!uncodable_glyphs.empty()) {
|
||||
frontend::Alert::warning(_("Uncodable character in file path"),
|
||||
support::bformat(_("The path of your document\n"
|
||||
"(%1$s)\n"
|
||||
"contains glyphs that are unknown in the\n"
|
||||
"current document encoding (namely %2$s).\n"
|
||||
"This will likely result in incomplete output.\n\n"
|
||||
"Choose an appropriate document encoding (such as utf8)\n"
|
||||
"or change the file path name."), inputpath, uncodable_glyphs));
|
||||
} else {
|
||||
os << "\\makeatletter\n"
|
||||
<< "\\def\\input@path{{"
|
||||
<< inputpath << "/}}\n"
|
||||
<< "\\makeatother\n";
|
||||
}
|
||||
}
|
||||
|
||||
// get parent macros (if this buffer has a parent) which will be
|
||||
// written at the document begin further down.
|
||||
@ -1646,7 +1598,6 @@ int Buffer::runChktex()
|
||||
// get LaTeX-Filename
|
||||
FileName const path(temppath());
|
||||
string const name = addName(path.absFileName(), latexName());
|
||||
string const org_path = filePath();
|
||||
|
||||
PathChanger p(path); // path to LaTeX file
|
||||
message(_("Running chktex..."));
|
||||
@ -1656,7 +1607,7 @@ int Buffer::runChktex()
|
||||
runparams.flavor = OutputParams::LATEX;
|
||||
runparams.nice = false;
|
||||
runparams.linelen = lyxrc.plaintext_linelen;
|
||||
makeLaTeXFile(FileName(name), org_path, runparams);
|
||||
makeLaTeXFile(FileName(name), runparams);
|
||||
|
||||
TeXErrors terr;
|
||||
Chktex chktex(lyxrc.chktex_command, onlyFileName(name), filePath());
|
||||
@ -3071,7 +3022,7 @@ void Buffer::getSourceCode(odocstream & os, string const format,
|
||||
else {
|
||||
// latex or literate
|
||||
otexstream ots(os, d->texrow);
|
||||
writeLaTeXSource(ots, string(), runparams, true, true);
|
||||
writeLaTeXSource(ots, runparams, true, true);
|
||||
}
|
||||
} else {
|
||||
runparams.par_begin = par_begin;
|
||||
@ -3469,7 +3420,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
|
||||
// LaTeX backend
|
||||
else if (backend_format == format) {
|
||||
runparams.nice = true;
|
||||
if (!makeLaTeXFile(FileName(filename), string(), runparams)) {
|
||||
if (!makeLaTeXFile(FileName(filename), runparams)) {
|
||||
if (d->cloned_buffer_) {
|
||||
d->cloned_buffer_->d->errorLists["Export"] =
|
||||
d->errorLists["Export"];
|
||||
@ -3483,7 +3434,7 @@ bool Buffer::doExport(string const & format, bool put_in_tempdir,
|
||||
return false;
|
||||
} else {
|
||||
runparams.nice = false;
|
||||
if (!makeLaTeXFile(FileName(filename), filePath(), runparams)) {
|
||||
if (!makeLaTeXFile(FileName(filename), runparams)) {
|
||||
if (d->cloned_buffer_) {
|
||||
d->cloned_buffer_->d->errorLists["Export"] =
|
||||
d->errorLists["Export"];
|
||||
|
@ -268,7 +268,6 @@ public:
|
||||
|
||||
/// Just a wrapper for writeLaTeXSource, first creating the ofstream.
|
||||
bool makeLaTeXFile(support::FileName const & filename,
|
||||
std::string const & original_path,
|
||||
OutputParams const &,
|
||||
bool output_preamble = true,
|
||||
bool output_body = true) const;
|
||||
@ -295,7 +294,6 @@ public:
|
||||
\endcode
|
||||
*/
|
||||
void writeLaTeXSource(otexstream & os,
|
||||
std::string const & original_path,
|
||||
OutputParams const &,
|
||||
bool output_preamble = true,
|
||||
bool output_body = true) const;
|
||||
|
@ -212,8 +212,7 @@ void BufferList::updateIncludedTeXfiles(string const & masterTmpDir,
|
||||
for (; it != end; ++it) {
|
||||
if (!(*it)->isDepClean(masterTmpDir)) {
|
||||
string writefile = addName(masterTmpDir, (*it)->latexName());
|
||||
(*it)->makeLaTeXFile(FileName(writefile), masterTmpDir,
|
||||
runparams, false);
|
||||
(*it)->makeLaTeXFile(FileName(writefile), runparams, false);
|
||||
(*it)->markDepClean(masterTmpDir);
|
||||
}
|
||||
}
|
||||
|
@ -710,7 +710,7 @@ void PreviewLoader::Impl::dumpPreamble(otexstream & os) const
|
||||
runparams.nice = true;
|
||||
runparams.moving_arg = true;
|
||||
runparams.free_spacing = true;
|
||||
buffer_.writeLaTeXSource(os, buffer_.filePath(), runparams, true, false);
|
||||
buffer_.writeLaTeXSource(os, runparams, true, false);
|
||||
|
||||
// FIXME! This is a HACK! The proper fix is to control the 'true'
|
||||
// passed to WriteStream below:
|
||||
|
@ -605,10 +605,6 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const
|
||||
formats.extension(inc_format)));
|
||||
|
||||
// FIXME: handle non existing files
|
||||
// FIXME: Second argument is irrelevant!
|
||||
// since only_body is true, makeLaTeXFile will not look at second
|
||||
// argument. Should we set it to string(), or should makeLaTeXFile
|
||||
// make use of it somehow? (JMarc 20031002)
|
||||
// The included file might be written in a different encoding
|
||||
// and language.
|
||||
Encoding const * const oldEnc = runparams.encoding;
|
||||
@ -621,8 +617,7 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const
|
||||
runparams.master_language = buffer().params().language;
|
||||
runparams.par_begin = 0;
|
||||
runparams.par_end = tmp->paragraphs().size();
|
||||
if (!tmp->makeLaTeXFile(tmpwritefile, masterFileName(buffer()).
|
||||
onlyPath().absFileName(), runparams, false)) {
|
||||
if (!tmp->makeLaTeXFile(tmpwritefile, runparams, false)) {
|
||||
docstring msg = bformat(_("Included file `%1$s' "
|
||||
"was not exported correctly.\nWarning: "
|
||||
"LaTeX export is probably incomplete."),
|
||||
@ -661,7 +656,8 @@ void InsetInclude::latex(otexstream & os, OutputParams const & runparams) const
|
||||
// In this case, it's not a LyX file, so we copy the file
|
||||
// to the temp dir, so that .aux files etc. are not created
|
||||
// in the original dir. Files included by this file will be
|
||||
// found via input@path, see ../Buffer.cpp.
|
||||
// found via the environment variable TEXINPUTS, which may be
|
||||
// set in preferences and by default includes the original dir.
|
||||
unsigned long const checksum_in = included_file.checksum();
|
||||
unsigned long const checksum_out = writefile.checksum();
|
||||
|
||||
|
@ -41,6 +41,9 @@ What's new
|
||||
|
||||
- Allow LaTeX import of \uline (bug 7640).
|
||||
|
||||
- Fix compilation error occurring when a LyX document resides in a directory
|
||||
whose name contains characters that are special to LaTeX (bug 6170).
|
||||
|
||||
|
||||
* USER INTERFACE
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user