From f674c9ab786dcd945716219678d2bff48d2919b3 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:06:20 +0100 Subject: [PATCH 01/11] use same cmd for build and preview also for magic comments --- src/buildmanager.cpp | 53 ++++++++++++++++++------ src/buildmanager.h | 5 +++ src/configdialog.cpp | 5 ++- src/configdialog.ui | 94 +++++++++++++++++++++++++------------------ src/configmanager.cpp | 5 ++- src/texstudio.cpp | 11 ++--- 6 files changed, 114 insertions(+), 59 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 7de67abc57..a14f71efe2 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1342,6 +1342,7 @@ void BuildManager::registerOptions(ConfigManagerInterface &cmi) cmi.registerOption("Tools/Max Expanding Nesting Deep", &maxExpandingNestingDeep, 10); Q_ASSERT(sizeof(dvi2pngMode) == sizeof(int)); cmi.registerOption("Tools/Dvi2Png Mode", reinterpret_cast(&dvi2pngMode), 3); + cmi.registerOption("Tools/AutoPreviewCmd", &autoPreviewCmd, true); cmi.registerOption("Files/Save Files Before Compiling", reinterpret_cast(&saveFilesBeforeCompiling), static_cast(SFBC_ONLY_NAMED)); cmi.registerOption("Preview/Remove Beamer Class", &previewRemoveBeamer, true); cmi.registerOption("Preview/Precompile Preamble", &previewPrecompilePreamble, true); @@ -1771,6 +1772,32 @@ void addLaTeXInputPaths(ProcessX *p, const QStringList &paths) p->setOverrideEnvironment(env); } +/*! + * \brief find a Preview Mode which uses the Build Compiler (Default or by Magic Comment) + * it was reported (#3851) that external storage was filled up when running a preview with a different compiler than the Build Compiler + * from the Build setup. To prevent this check option autoPreviewCmd. This is also usefull when you switch between documents which can't + * be compiled with the same compiler and a manuell switch would also be necessary for previews. + */ +BuildManager::Dvi2PngMode BuildManager::guessDvi2PngMode() { + bool user; + QString compiler; + emit commandLineRequested("compile", &compiler, &user); + Dvi2PngMode dvi2pngModeDerived = dvi2pngMode; + if (autoPreviewCmd && !user) { + if (isCommandDirectlyDefined(compiler)) { + if (compiler==CMD_PDFLATEX) + dvi2pngModeDerived = DPM_EMBEDDED_PDF; + else if (compiler==CMD_LUALATEX) + dvi2pngModeDerived = DPM_LUA_EMBEDDED_PDF; + else if (compiler==CMD_XELATEX) + dvi2pngModeDerived = DPM_XE_EMBEDDED_PDF; + else if (compiler==CMD_LATEX) + dvi2pngModeDerived = DPM_DVIPNG; + } + } + return dvi2pngModeDerived; +} + //there are 3 ways to generate a preview png: //1. latex is called => dvipng is called after latex finished and converts the dvi //2. latex is called and dvipng --follow is called at the same time, and will manage the wait time on its own @@ -1779,6 +1806,7 @@ void addLaTeXInputPaths(ProcessX *p, const QStringList &paths) void BuildManager::preview(const QString &preamble, const PreviewSource &source, const QString &masterFile, QTextCodec *outputCodec) { QString tempPath = QDir::tempPath() + QDir::separator() + "." + QDir::separator(); + Dvi2PngMode dvi2pngModeDerived = guessDvi2PngMode(); //process preamble QString preamble_mod = preamble; @@ -1832,11 +1860,11 @@ void BuildManager::preview(const QString &preamble, const PreviewSource &source, preambleFormatFile = fi.completeBaseName(); previewFileNames.append(fi.absoluteFilePath()); ProcessX *p = nullptr; - if (dvi2pngMode == DPM_EMBEDDED_PDF) { + if (dvi2pngModeDerived == DPM_EMBEDDED_PDF) { p = newProcessInternal(QString("%1 -interaction=nonstopmode -ini \"&pdflatex %2 \\dump\"").arg(getCommandInfo(CMD_PDFLATEX).getProgramName(),preambleFormatFile), QFileInfo(tf->fileName())); //no delete! goes automatically - } else if (dvi2pngMode == DPM_LUA_EMBEDDED_PDF) { + } else if (dvi2pngModeDerived == DPM_LUA_EMBEDDED_PDF) { p = newProcessInternal(QString("%1 -interaction=nonstopmode -ini \"&lualatex %2 \\dump\"").arg(getCommandInfo(CMD_LUALATEX).getProgramName(),preambleFormatFile), QFileInfo(tf->fileName())); //no delete! goes automatically - } else if (dvi2pngMode == DPM_XE_EMBEDDED_PDF) { + } else if (dvi2pngModeDerived == DPM_XE_EMBEDDED_PDF) { p = newProcessInternal(QString("%1 -interaction=nonstopmode -ini \"&xelatex %2 \\dump\"").arg(getCommandInfo(CMD_XELATEX).getProgramName(),preambleFormatFile), QFileInfo(tf->fileName())); //no delete! goes automatically } else { p = newProcessInternal(QString("%1 -interaction=nonstopmode -ini \"&latex %2 \\dump\"").arg(getCommandInfo(CMD_LATEX).getProgramName(),preambleFormatFile), QFileInfo(tf->fileName())); //no delete! goes automatically @@ -1894,11 +1922,11 @@ void BuildManager::preview(const QString &preamble, const PreviewSource &source, tf->close(); delete tf; // tex file needs to be freed ProcessX *p1 = nullptr; - if (dvi2pngMode == DPM_EMBEDDED_PDF) { + if (dvi2pngModeDerived == DPM_EMBEDDED_PDF) { // start conversion // tex -> pdf p1 = firstProcessOfDirectExpansion(CMD_PDFLATEX, QFileInfo(ffn)); //no delete! goes automatically - } else if (dvi2pngMode == DPM_LUA_EMBEDDED_PDF) { + } else if (dvi2pngModeDerived == DPM_LUA_EMBEDDED_PDF) { // start conversion // tex -> pdf QString command = getCommandInfo(CMD_LUALATEX).commandLine; @@ -1907,7 +1935,7 @@ void BuildManager::preview(const QString &preamble, const PreviewSource &source, command = command.insert(pgm.length(), " -fmt=" + preambleFormatFile); } p1 = firstProcessOfDirectExpansion(command, QFileInfo(ffn)); //no delete! goes automatically - } else if (dvi2pngMode == DPM_XE_EMBEDDED_PDF) { + } else if (dvi2pngModeDerived == DPM_XE_EMBEDDED_PDF) { // start conversion // tex -> pdf QString command = getCommandInfo(CMD_XELATEX).commandLine; @@ -1927,7 +1955,7 @@ void BuildManager::preview(const QString &preamble, const PreviewSource &source, p1->startCommand(); QTimer::singleShot(previewCompileTimeOut, p1, SLOT(kill())); - if (dvi2pngMode == DPM_DVIPNG_FOLLOW) { + if (dvi2pngModeDerived == DPM_DVIPNG_FOLLOW) { p1->waitForStarted(); // dvi -> png //follow mode is a tricky features which allows dvipng to run while tex isn't finished @@ -2097,7 +2125,8 @@ void BuildManager::latexPreviewCompleted(int status) if(status>0){ return; // compilation has failed } - if (dvi2pngMode == DPM_DVIPNG) { + Dvi2PngMode dvi2pngModeDerived = guessDvi2PngMode(); + if (dvi2pngModeDerived == DPM_DVIPNG) { ProcessX *p1 = qobject_cast (sender()); if (!p1) return; // dvi -> png @@ -2108,7 +2137,7 @@ void BuildManager::latexPreviewCompleted(int status) connect(p2, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(conversionPreviewCompleted(int))); p2->startCommand(); } - if (dvi2pngMode == DPM_DVIPS_GHOSTSCRIPT) { + if (dvi2pngModeDerived == DPM_DVIPS_GHOSTSCRIPT) { ProcessX *p1 = qobject_cast (sender()); if (!p1) return; // dvi -> ps @@ -2119,7 +2148,7 @@ void BuildManager::latexPreviewCompleted(int status) connect(p2, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(dvi2psPreviewCompleted(int))); p2->startCommand(); } - if (dvi2pngMode == DPM_EMBEDDED_PDF) { + if (dvi2pngModeDerived == DPM_EMBEDDED_PDF) { ProcessX *p1 = qobject_cast (sender()); if (!p1) return; QString processedFile = p1->getFile(); @@ -2133,7 +2162,7 @@ void BuildManager::latexPreviewCompleted(int status) emit previewAvailable(fn, previewFileNameToSource[processedFile]); } } - if (dvi2pngMode == DPM_LUA_EMBEDDED_PDF) { + if (dvi2pngModeDerived == DPM_LUA_EMBEDDED_PDF) { ProcessX *p1 = qobject_cast (sender()); if (!p1) return; QString processedFile = p1->getFile(); @@ -2147,7 +2176,7 @@ void BuildManager::latexPreviewCompleted(int status) emit previewAvailable(fn, previewFileNameToSource[processedFile]); } } - if (dvi2pngMode == DPM_XE_EMBEDDED_PDF) { + if (dvi2pngModeDerived == DPM_XE_EMBEDDED_PDF) { ProcessX *p1 = qobject_cast (sender()); if (!p1) return; QString processedFile = p1->getFile(); diff --git a/src/buildmanager.h b/src/buildmanager.h index 073c837839..5e5a2d9327 100644 --- a/src/buildmanager.h +++ b/src/buildmanager.h @@ -181,7 +181,12 @@ public slots: QStringList deprecatedUserToolCommands, deprecatedUserToolNames; QStringList userToolOrder, userToolDisplayNames; enum Dvi2PngMode { DPM_DVIPNG, DPM_DVIPNG_FOLLOW, DPM_DVIPS_GHOSTSCRIPT, DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF}; + // following Dvi2PngModes add tight page modifications for to the document preamble preview + const QList modifyHeader = {DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF}; + Dvi2PngMode dvi2pngMode; + BuildManager::Dvi2PngMode guessDvi2PngMode(); + bool autoPreviewCmd; enum SaveFilesBeforeCompiling {SFBC_ALWAYS, SFBC_ONLY_CURRENT_OR_NAMED, SFBC_ONLY_NAMED}; SaveFilesBeforeCompiling saveFilesBeforeCompiling; bool previewRemoveBeamer, previewPrecompilePreamble; diff --git a/src/configdialog.cpp b/src/configdialog.cpp index bce822d57b..4e0535110e 100644 --- a/src/configdialog.cpp +++ b/src/configdialog.cpp @@ -443,7 +443,7 @@ ConfigDialog::ConfigDialog(QWidget *parent): QDialog(parent,Qt::Dialog|Qt::Windo connect(UpdateChecker::instance(), SIGNAL(checkCompleted()), this, SLOT(refreshLastUpdateTime())); refreshLastUpdateTime(); - //pageditor + //pageEditor populateComboBoxFont(false); connect(ui.checkBoxShowOnlyMonospacedFonts, SIGNAL(toggled(bool)), this, SLOT(populateComboBoxFont(bool))); @@ -489,7 +489,8 @@ ConfigDialog::ConfigDialog(QWidget *parent): QDialog(parent,Qt::Dialog|Qt::Windo .arg("OpenOffice", "LibreOffice")); ui.labelGetDic->setOpenExternalLinks(true); - //pagequick + + //pageQuick connect(ui.pushButtonGrammarWordlists, SIGNAL(clicked()), this, SLOT(browseGrammarWordListsDir())); connect(ui.pushButtonGrammarLTPath, SIGNAL(clicked()), this, SLOT(browseGrammarLTPath())); connect(ui.pushButtonGrammarLTJava, SIGNAL(clicked()), this, SLOT(browseGrammarLTJavaPath())); diff --git a/src/configdialog.ui b/src/configdialog.ui index 7aff62703d..f6cd72786c 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -4046,7 +4046,23 @@ them here. - + + + + Preferre Preview with Build Compiler + + + The option applys when the build compiler is pdflatex, lualatex, xelatex, or latex. + + + true + + + false + + + + Display Mode: @@ -4056,7 +4072,7 @@ them here. - + When the mode is changed, the preview on formulas is displayed accordingly (but for Inline it's still a tooltip). @@ -4097,6 +4113,38 @@ them here. + + + + + + Scaling: + + + + + + + + + + + + + % + + + 20 + + + 10000 + + + 10 + + + + Update the preview on text change @@ -4106,7 +4154,7 @@ them here. - + @@ -4120,7 +4168,7 @@ them here. - + Auto Update Delay: @@ -4130,7 +4178,7 @@ them here. - + ms @@ -4146,7 +4194,7 @@ them here. - + Replace beamer class by article @@ -4159,7 +4207,7 @@ them here. - + Precompile Preamble @@ -4172,38 +4220,6 @@ them here. - - - - - - - Scaling: - - - - - - - - - - - - - % - - - 20 - - - 10000 - - - 10 - - - diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 548fa1b64b..268e93271b 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1466,6 +1466,7 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) } //preview confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->dvi2pngMode); + confDlg->ui.checkBoxAutoPreviewCmd->setChecked(buildManager->autoPreviewCmd); //Autosave if (autosaveEveryMinutes == 0) confDlg->ui.comboBoxAutoSave->setCurrentIndex(0); @@ -1764,9 +1765,11 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) //preview previewMode = static_cast(confDlg->ui.comboBoxPreviewMode->currentIndex()); buildManager->dvi2pngMode = static_cast(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); + buildManager->autoPreviewCmd = confDlg->ui.checkBoxAutoPreviewCmd->isChecked(); #ifdef NO_POPPLER_PREVIEW - if (buildManager->dvi2pngMode == BuildManager::DPM_EMBEDDED_PDF || buildManager->dvi2pngMode == BuildManager::DPM_LUA_EMBEDDED_PDF || buildManager->dvi2pngMode == BuildManager::DPM_XE_EMBEDDED_PDF) { + if (buildManager.modifyHeader.contains(dvi2pngMode)) { buildManager->dvi2pngMode = BuildManager::DPM_DVIPNG; //fallback when poppler is not included + buildManager->autoPreviewCmd = false; } #endif diff --git a/src/texstudio.cpp b/src/texstudio.cpp index 3d4aa05319..2bd9084a34 100644 --- a/src/texstudio.cpp +++ b/src/texstudio.cpp @@ -8991,13 +8991,14 @@ void Texstudio::showPreview(const QString &text) QStringList header; for (int l = 0; l < m_endingLine; l++) header << edView->editor->document()->line(l).text(); - if (buildManager.dvi2pngMode == BuildManager::DPM_EMBEDDED_PDF || buildManager.dvi2pngMode == BuildManager::DPM_LUA_EMBEDDED_PDF || buildManager.dvi2pngMode == BuildManager::DPM_XE_EMBEDDED_PDF) { + BuildManager::Dvi2PngMode dvi2pngModeDerived = buildManager.guessDvi2PngMode(); + if (buildManager.modifyHeader.contains(dvi2pngModeDerived)) { header << "\\usepackage[active,tightpage]{preview}" << "\\usepackage{varwidth}" << "\\AtBeginDocument{\\begin{preview}\\begin{varwidth}{\\linewidth}}" << "\\AtEndDocument{\\end{varwidth}\\end{preview}}"; } - header << "\\pagestyle{empty}";// << "\\begin{document}"; + header << "\\pagestyle{empty}"; buildManager.preview(header.join("\n"), PreviewSource(text, -1, -1, true), documents.getCompileFileName(), edView->editor->document()->codec()); } @@ -9091,14 +9092,14 @@ QStringList Texstudio::makePreviewHeader(const LatexDocument *rootDoc) header << newLine; } } - if ((buildManager.dvi2pngMode == BuildManager::DPM_EMBEDDED_PDF || buildManager.dvi2pngMode == BuildManager::DPM_LUA_EMBEDDED_PDF || buildManager.dvi2pngMode == BuildManager::DPM_XE_EMBEDDED_PDF) - && configManager.previewMode != ConfigManager::PM_EMBEDDED) { + BuildManager::Dvi2PngMode dvi2pngModeDerived = buildManager.guessDvi2PngMode(); + if (buildManager.modifyHeader.contains(dvi2pngModeDerived) && configManager.previewMode != ConfigManager::PM_EMBEDDED) { header << "\\usepackage[active,tightpage]{preview}" << "\\usepackage{varwidth}" << "\\AtBeginDocument{\\begin{preview}\\begin{varwidth}{\\linewidth}}" << "\\AtEndDocument{\\end{varwidth}\\end{preview}}"; } - header << "\\pagestyle{empty}";// << "\\begin{document}"; + header << "\\pagestyle{empty}"; return header; } From d448a87d3453f2184d17527cc42e75b99bb73cf7 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Wed, 5 Feb 2025 19:32:02 +0100 Subject: [PATCH 02/11] fix linux auto tests --- src/configmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 268e93271b..3902bd62f8 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1767,7 +1767,7 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) buildManager->dvi2pngMode = static_cast(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); buildManager->autoPreviewCmd = confDlg->ui.checkBoxAutoPreviewCmd->isChecked(); #ifdef NO_POPPLER_PREVIEW - if (buildManager.modifyHeader.contains(dvi2pngMode)) { + if (buildManager->modifyHeader.contains(buildManager->dvi2pngMode)) { buildManager->dvi2pngMode = BuildManager::DPM_DVIPNG; //fallback when poppler is not included buildManager->autoPreviewCmd = false; } From 6d3b93c754ea509d4fc80bcc43eb27ab28486b98 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Wed, 5 Feb 2025 21:48:02 +0100 Subject: [PATCH 03/11] Update configdialog.ui --- src/buildmanager.cpp | 4 ++-- src/configdialog.ui | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index a14f71efe2..1b6ba6bb60 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1775,8 +1775,8 @@ void addLaTeXInputPaths(ProcessX *p, const QStringList &paths) /*! * \brief find a Preview Mode which uses the Build Compiler (Default or by Magic Comment) * it was reported (#3851) that external storage was filled up when running a preview with a different compiler than the Build Compiler - * from the Build setup. To prevent this check option autoPreviewCmd. This is also usefull when you switch between documents which can't - * be compiled with the same compiler and a manuell switch would also be necessary for previews. + * from the Build setup. To prevent this check option autoPreviewCmd. This is also useful when you switch between documents which can't + * be compiled with the same compiler and a manual switch would also be necessary for previews. */ BuildManager::Dvi2PngMode BuildManager::guessDvi2PngMode() { bool user; diff --git a/src/configdialog.ui b/src/configdialog.ui index f6cd72786c..baab6a3815 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -4049,10 +4049,10 @@ them here. - Preferre Preview with Build Compiler + Prefer Preview with Build Compiler - The option applys when the build compiler is pdflatex, lualatex, xelatex, or latex. + The option applies when the build compiler is pdflatex, lualatex, xelatex, or latex. true From 2bc878c70b8abf73bb093bb7b48fc6f85dc0bd04 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Sat, 8 Feb 2025 03:13:57 +0100 Subject: [PATCH 04/11] replace checkbox by list item --- src/buildmanager.cpp | 41 ++++++++++++++++++++++------------------- src/buildmanager.h | 5 ++--- src/configdialog.ui | 25 +++++++------------------ src/configmanager.cpp | 3 --- 4 files changed, 31 insertions(+), 43 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 1b6ba6bb60..8e927e776f 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1341,8 +1341,7 @@ void BuildManager::registerOptions(ConfigManagerInterface &cmi) cmi.registerOption("Tools/Quick Mode", &deprecatedQuickmode, -1); cmi.registerOption("Tools/Max Expanding Nesting Deep", &maxExpandingNestingDeep, 10); Q_ASSERT(sizeof(dvi2pngMode) == sizeof(int)); - cmi.registerOption("Tools/Dvi2Png Mode", reinterpret_cast(&dvi2pngMode), 3); - cmi.registerOption("Tools/AutoPreviewCmd", &autoPreviewCmd, true); + cmi.registerOption("Tools/Dvi2Png Mode", reinterpret_cast(&dvi2pngMode), 6); cmi.registerOption("Files/Save Files Before Compiling", reinterpret_cast(&saveFilesBeforeCompiling), static_cast(SFBC_ONLY_NAMED)); cmi.registerOption("Preview/Remove Beamer Class", &previewRemoveBeamer, true); cmi.registerOption("Preview/Precompile Preamble", &previewPrecompilePreamble, true); @@ -1774,27 +1773,31 @@ void addLaTeXInputPaths(ProcessX *p, const QStringList &paths) /*! * \brief find a Preview Mode which uses the Build Compiler (Default or by Magic Comment) - * it was reported (#3851) that external storage was filled up when running a preview with a different compiler than the Build Compiler - * from the Build setup. To prevent this check option autoPreviewCmd. This is also useful when you switch between documents which can't - * be compiled with the same compiler and a manual switch would also be necessary for previews. + * It was reported (#3851) that external storage was filled up when running a preview with a different compiler than the Build Compiler from the + * Build setup. To prevent this use "Default Compiler as set up in Build config" (DPM_BUILD_COMPILER) from combobox. This is also useful when you + * switch between documents which can't be compiled with the same compiler and a manual switch would also be necessary for previews. */ BuildManager::Dvi2PngMode BuildManager::guessDvi2PngMode() { - bool user; - QString compiler; - emit commandLineRequested("compile", &compiler, &user); - Dvi2PngMode dvi2pngModeDerived = dvi2pngMode; - if (autoPreviewCmd && !user) { - if (isCommandDirectlyDefined(compiler)) { - if (compiler==CMD_PDFLATEX) - dvi2pngModeDerived = DPM_EMBEDDED_PDF; - else if (compiler==CMD_LUALATEX) - dvi2pngModeDerived = DPM_LUA_EMBEDDED_PDF; - else if (compiler==CMD_XELATEX) - dvi2pngModeDerived = DPM_XE_EMBEDDED_PDF; - else if (compiler==CMD_LATEX) - dvi2pngModeDerived = DPM_DVIPNG; + Dvi2PngMode dvi2pngModeDerived = DPM_DVIPNG; + if (dvi2pngMode==DPM_BUILD_COMPILER) { + bool user; + QString compiler; + emit commandLineRequested("compile", &compiler, &user); + if (!user) { + if (isCommandDirectlyDefined(compiler)) { + if (compiler==CMD_PDFLATEX) + dvi2pngModeDerived = DPM_EMBEDDED_PDF; + else if (compiler==CMD_LUALATEX) + dvi2pngModeDerived = DPM_LUA_EMBEDDED_PDF; + else if (compiler==CMD_XELATEX) + dvi2pngModeDerived = DPM_XE_EMBEDDED_PDF; + else if (compiler==CMD_LATEX) + dvi2pngModeDerived = DPM_DVIPNG; + } } } + else dvi2pngModeDerived = dvi2pngMode; + return dvi2pngModeDerived; } diff --git a/src/buildmanager.h b/src/buildmanager.h index 5e5a2d9327..d5e9c71ea9 100644 --- a/src/buildmanager.h +++ b/src/buildmanager.h @@ -180,13 +180,12 @@ public slots: int deprecatedQuickmode; QStringList deprecatedUserToolCommands, deprecatedUserToolNames; QStringList userToolOrder, userToolDisplayNames; - enum Dvi2PngMode { DPM_DVIPNG, DPM_DVIPNG_FOLLOW, DPM_DVIPS_GHOSTSCRIPT, DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF}; - // following Dvi2PngModes add tight page modifications for to the document preamble preview + enum Dvi2PngMode { DPM_DVIPNG, DPM_DVIPNG_FOLLOW, DPM_DVIPS_GHOSTSCRIPT, DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF, DPM_BUILD_COMPILER}; + // following Dvi2PngModes add tight page modifications to the document preamble for preview const QList modifyHeader = {DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF}; Dvi2PngMode dvi2pngMode; BuildManager::Dvi2PngMode guessDvi2PngMode(); - bool autoPreviewCmd; enum SaveFilesBeforeCompiling {SFBC_ALWAYS, SFBC_ONLY_CURRENT_OR_NAMED, SFBC_ONLY_NAMED}; SaveFilesBeforeCompiling saveFilesBeforeCompiling; bool previewRemoveBeamer, previewPrecompilePreamble; diff --git a/src/configdialog.ui b/src/configdialog.ui index baab6a3815..6b67750cb0 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -4002,14 +4002,14 @@ them here. Preview - + Command: - + false @@ -4044,22 +4044,11 @@ them here. Preview with xelatex - - - - - - Prefer Preview with Build Compiler - - - The option applies when the build compiler is pdflatex, lualatex, xelatex, or latex. - - - true - - - false - + + + Default Compiler as set up in Build configuration + + diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 3902bd62f8..b7d0a4d09f 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1466,7 +1466,6 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) } //preview confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->dvi2pngMode); - confDlg->ui.checkBoxAutoPreviewCmd->setChecked(buildManager->autoPreviewCmd); //Autosave if (autosaveEveryMinutes == 0) confDlg->ui.comboBoxAutoSave->setCurrentIndex(0); @@ -1765,11 +1764,9 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) //preview previewMode = static_cast(confDlg->ui.comboBoxPreviewMode->currentIndex()); buildManager->dvi2pngMode = static_cast(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); - buildManager->autoPreviewCmd = confDlg->ui.checkBoxAutoPreviewCmd->isChecked(); #ifdef NO_POPPLER_PREVIEW if (buildManager->modifyHeader.contains(buildManager->dvi2pngMode)) { buildManager->dvi2pngMode = BuildManager::DPM_DVIPNG; //fallback when poppler is not included - buildManager->autoPreviewCmd = false; } #endif From 638f36bb64726226db4a31ff9d2fbad2d6d16ce0 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Sat, 8 Feb 2025 06:41:57 +0100 Subject: [PATCH 05/11] move new combobox entry to top of list --- src/buildmanager.cpp | 10 ++++++++++ src/buildmanager.h | 3 +++ src/configdialog.ui | 10 +++++----- src/configmanager.cpp | 4 ++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 8e927e776f..7c6fada7a8 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1801,6 +1801,16 @@ BuildManager::Dvi2PngMode BuildManager::guessDvi2PngMode() { return dvi2pngModeDerived; } +int BuildManager::index(BuildManager::Dvi2PngMode dvi2pngMode) { + if (dvi2pngMode==DPM_BUILD_COMPILER) return 0; + return static_cast (dvi2pngMode) + 1; +} + +BuildManager::Dvi2PngMode BuildManager::dvi2PngMode(int index) { + if (index==0) return DPM_BUILD_COMPILER; + return static_cast (index - 1); +} + //there are 3 ways to generate a preview png: //1. latex is called => dvipng is called after latex finished and converts the dvi //2. latex is called and dvipng --follow is called at the same time, and will manage the wait time on its own diff --git a/src/buildmanager.h b/src/buildmanager.h index d5e9c71ea9..6c44c72262 100644 --- a/src/buildmanager.h +++ b/src/buildmanager.h @@ -186,6 +186,9 @@ public slots: Dvi2PngMode dvi2pngMode; BuildManager::Dvi2PngMode guessDvi2PngMode(); + BuildManager::Dvi2PngMode dvi2PngMode(int index); + int index(BuildManager::Dvi2PngMode dvi2pngMode); + enum SaveFilesBeforeCompiling {SFBC_ALWAYS, SFBC_ONLY_CURRENT_OR_NAMED, SFBC_ONLY_NAMED}; SaveFilesBeforeCompiling saveFilesBeforeCompiling; bool previewRemoveBeamer, previewPrecompilePreamble; diff --git a/src/configdialog.ui b/src/configdialog.ui index 6b67750cb0..0baf59f136 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -4014,6 +4014,11 @@ them here. false + + + Default Compiler as set up in Build configuration + + Preview with dvipng @@ -4044,11 +4049,6 @@ them here. Preview with xelatex - - - Default Compiler as set up in Build configuration - - diff --git a/src/configmanager.cpp b/src/configmanager.cpp index b7d0a4d09f..574ac1bb8c 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1465,7 +1465,7 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) else item->setCheckState(Qt::Unchecked); } //preview - confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->dvi2pngMode); + confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->index(buildManager->dvi2pngMode)); //Autosave if (autosaveEveryMinutes == 0) confDlg->ui.comboBoxAutoSave->setCurrentIndex(0); @@ -1763,7 +1763,7 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) completerConfig->setFiles(newFiles); //preview previewMode = static_cast(confDlg->ui.comboBoxPreviewMode->currentIndex()); - buildManager->dvi2pngMode = static_cast(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); + buildManager->dvi2pngMode = buildManager->dvi2PngMode(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); #ifdef NO_POPPLER_PREVIEW if (buildManager->modifyHeader.contains(buildManager->dvi2pngMode)) { buildManager->dvi2pngMode = BuildManager::DPM_DVIPNG; //fallback when poppler is not included From ac8a3ac3ebd9a4afe2d222dd7a649eb3606fb352 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Sat, 8 Feb 2025 16:09:18 +0100 Subject: [PATCH 06/11] name the default --- src/buildmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 7c6fada7a8..fab889776e 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1341,7 +1341,7 @@ void BuildManager::registerOptions(ConfigManagerInterface &cmi) cmi.registerOption("Tools/Quick Mode", &deprecatedQuickmode, -1); cmi.registerOption("Tools/Max Expanding Nesting Deep", &maxExpandingNestingDeep, 10); Q_ASSERT(sizeof(dvi2pngMode) == sizeof(int)); - cmi.registerOption("Tools/Dvi2Png Mode", reinterpret_cast(&dvi2pngMode), 6); + cmi.registerOption("Tools/Dvi2Png Mode", reinterpret_cast(&dvi2pngMode), static_cast(DPM_BUILD_COMPILER)); cmi.registerOption("Files/Save Files Before Compiling", reinterpret_cast(&saveFilesBeforeCompiling), static_cast(SFBC_ONLY_NAMED)); cmi.registerOption("Preview/Remove Beamer Class", &previewRemoveBeamer, true); cmi.registerOption("Preview/Precompile Preamble", &previewPrecompilePreamble, true); From 11331b974b8330e8bd8c3a2de7919c220a616788 Mon Sep 17 00:00:00 2001 From: octaeder <102688820+octaeder@users.noreply.github.com> Date: Sat, 8 Feb 2025 17:56:23 +0100 Subject: [PATCH 07/11] fix/enhance code in case of no poppler --- src/buildmanager.cpp | 2 +- src/configdialog.cpp | 8 -------- src/configmanager.cpp | 7 +++++++ 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index fab889776e..31a3d2857c 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1453,7 +1453,7 @@ void BuildManager::readSettings(QSettings &settings) int md = dvi2pngMode; #ifdef NO_POPPLER_PREVIEW - if (md == DPM_EMBEDDED_PDF || md == DPM_LUA_EMBEDDED_PDF || md == DPM_XE_EMBEDDED_PDF) + if (modifyHeader.contains(static_cast(md))) md = -1; #endif if (md < 0) { diff --git a/src/configdialog.cpp b/src/configdialog.cpp index 4e0535110e..97f6efb753 100644 --- a/src/configdialog.cpp +++ b/src/configdialog.cpp @@ -592,14 +592,6 @@ ConfigDialog::ConfigDialog(QWidget *parent): QDialog(parent,Qt::Dialog|Qt::Windo ui.lineEditMetaFilter->setPlaceholderText(tr("(option filter)")); connect(ui.lineEditMetaFilter, SIGNAL(textChanged(QString)), SLOT(metaFilterChanged(QString))); - // poppler preview -#ifdef NO_POPPLER_PREVIEW - int l = ui.comboBoxDvi2PngMode->count(); - ui.comboBoxDvi2PngMode->removeItem(l - 1); - l = ui.comboBoxPreviewMode->count(); - ui.comboBoxPreviewMode->removeItem(l - 1); - // maybe add some possibility to disable some preview modes in poppler mode -#endif ui.labelScreenResolution->setText(labelSystemdpi); // set-up GUI scaling diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 574ac1bb8c..79356c89c0 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1466,6 +1466,13 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) } //preview confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->index(buildManager->dvi2pngMode)); +#ifdef NO_POPPLER_PREVIEW + int l = confDlg->ui.comboBoxDvi2PngMode->count(); + for (int index=l-1; index>=0; index--) { + if (buildManager->modifyHeader.contains(buildManager->dvi2PngMode(index))) + confDlg->ui.comboBoxDvi2PngMode->removeItem(index); + } +#endif //Autosave if (autosaveEveryMinutes == 0) confDlg->ui.comboBoxAutoSave->setCurrentIndex(0); From c2d66fee75c5f2d0636a59659185b43ec65415fb Mon Sep 17 00:00:00 2001 From: Jan Sundermeyer Date: Sun, 9 Feb 2025 17:35:38 +0100 Subject: [PATCH 08/11] code clean-up --- src/buildmanager.cpp | 10 ---------- src/buildmanager.h | 6 +----- src/configmanager.cpp | 17 +++++++++++++---- src/texstudio.cpp | 4 ++-- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 31a3d2857c..7ba9af599e 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1801,16 +1801,6 @@ BuildManager::Dvi2PngMode BuildManager::guessDvi2PngMode() { return dvi2pngModeDerived; } -int BuildManager::index(BuildManager::Dvi2PngMode dvi2pngMode) { - if (dvi2pngMode==DPM_BUILD_COMPILER) return 0; - return static_cast (dvi2pngMode) + 1; -} - -BuildManager::Dvi2PngMode BuildManager::dvi2PngMode(int index) { - if (index==0) return DPM_BUILD_COMPILER; - return static_cast (index - 1); -} - //there are 3 ways to generate a preview png: //1. latex is called => dvipng is called after latex finished and converts the dvi //2. latex is called and dvipng --follow is called at the same time, and will manage the wait time on its own diff --git a/src/buildmanager.h b/src/buildmanager.h index 6c44c72262..c743440411 100644 --- a/src/buildmanager.h +++ b/src/buildmanager.h @@ -181,13 +181,9 @@ public slots: QStringList deprecatedUserToolCommands, deprecatedUserToolNames; QStringList userToolOrder, userToolDisplayNames; enum Dvi2PngMode { DPM_DVIPNG, DPM_DVIPNG_FOLLOW, DPM_DVIPS_GHOSTSCRIPT, DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF, DPM_BUILD_COMPILER}; - // following Dvi2PngModes add tight page modifications to the document preamble for preview - const QList modifyHeader = {DPM_EMBEDDED_PDF, DPM_LUA_EMBEDDED_PDF, DPM_XE_EMBEDDED_PDF}; Dvi2PngMode dvi2pngMode; - BuildManager::Dvi2PngMode guessDvi2PngMode(); - BuildManager::Dvi2PngMode dvi2PngMode(int index); - int index(BuildManager::Dvi2PngMode dvi2pngMode); + BuildManager::Dvi2PngMode guessDvi2PngMode(); enum SaveFilesBeforeCompiling {SFBC_ALWAYS, SFBC_ONLY_CURRENT_OR_NAMED, SFBC_ONLY_NAMED}; SaveFilesBeforeCompiling saveFilesBeforeCompiling; diff --git a/src/configmanager.cpp b/src/configmanager.cpp index 79356c89c0..eb0c89d9fa 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1465,11 +1465,15 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) else item->setCheckState(Qt::Unchecked); } //preview - confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(buildManager->index(buildManager->dvi2pngMode)); + int m_dvi2pngModeIndex = 0; + if (buildManager->dvi2pngMode!=BuildManager::DPM_BUILD_COMPILER){ + m_dvi2pngModeIndex = static_cast (buildManager->dvi2pngMode) + 1; + } + confDlg->ui.comboBoxDvi2PngMode->setCurrentIndex(m_dvi2pngModeIndex); #ifdef NO_POPPLER_PREVIEW int l = confDlg->ui.comboBoxDvi2PngMode->count(); for (int index=l-1; index>=0; index--) { - if (buildManager->modifyHeader.contains(buildManager->dvi2PngMode(index))) + if (buildManager->dvi2PngMode(index)>=BuildManager::DPM_EMBEDDED_PDF) confDlg->ui.comboBoxDvi2PngMode->removeItem(index); } #endif @@ -1770,9 +1774,14 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) completerConfig->setFiles(newFiles); //preview previewMode = static_cast(confDlg->ui.comboBoxPreviewMode->currentIndex()); - buildManager->dvi2pngMode = buildManager->dvi2PngMode(confDlg->ui.comboBoxDvi2PngMode->currentIndex()); + int m_dvi2pngModeIndex=confDlg->ui.comboBoxDvi2PngMode->currentIndex(); + if (m_dvi2pngModeIndex==0){ + buildManager->dvi2pngMode = BuildManager::DPM_BUILD_COMPILER; + }else{ + buildManager->dvi2pngMode = static_cast (m_dvi2pngModeIndex - 1); + } #ifdef NO_POPPLER_PREVIEW - if (buildManager->modifyHeader.contains(buildManager->dvi2pngMode)) { + if (buildManager->dvi2pngMode>=BuildManager::DPM_EMBEDDED_PDF){ buildManager->dvi2pngMode = BuildManager::DPM_DVIPNG; //fallback when poppler is not included } #endif diff --git a/src/texstudio.cpp b/src/texstudio.cpp index 2bd9084a34..c116c0c0d2 100644 --- a/src/texstudio.cpp +++ b/src/texstudio.cpp @@ -8992,7 +8992,7 @@ void Texstudio::showPreview(const QString &text) for (int l = 0; l < m_endingLine; l++) header << edView->editor->document()->line(l).text(); BuildManager::Dvi2PngMode dvi2pngModeDerived = buildManager.guessDvi2PngMode(); - if (buildManager.modifyHeader.contains(dvi2pngModeDerived)) { + if (dvi2pngModeDerived>=BuildManager::DPM_EMBEDDED_PDF) { header << "\\usepackage[active,tightpage]{preview}" << "\\usepackage{varwidth}" << "\\AtBeginDocument{\\begin{preview}\\begin{varwidth}{\\linewidth}}" @@ -9093,7 +9093,7 @@ QStringList Texstudio::makePreviewHeader(const LatexDocument *rootDoc) } } BuildManager::Dvi2PngMode dvi2pngModeDerived = buildManager.guessDvi2PngMode(); - if (buildManager.modifyHeader.contains(dvi2pngModeDerived) && configManager.previewMode != ConfigManager::PM_EMBEDDED) { + if (dvi2pngModeDerived>=BuildManager::DPM_EMBEDDED_PDF && configManager.previewMode != ConfigManager::PM_EMBEDDED) { header << "\\usepackage[active,tightpage]{preview}" << "\\usepackage{varwidth}" << "\\AtBeginDocument{\\begin{preview}\\begin{varwidth}{\\linewidth}}" From 4bde2ff454ed11f25193f64cb82bbb688feb6fe8 Mon Sep 17 00:00:00 2001 From: Jan Sundermeyer Date: Sun, 9 Feb 2025 17:39:22 +0100 Subject: [PATCH 09/11] fix --- src/buildmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buildmanager.cpp b/src/buildmanager.cpp index 7ba9af599e..4cc8a3ae17 100644 --- a/src/buildmanager.cpp +++ b/src/buildmanager.cpp @@ -1453,7 +1453,7 @@ void BuildManager::readSettings(QSettings &settings) int md = dvi2pngMode; #ifdef NO_POPPLER_PREVIEW - if (modifyHeader.contains(static_cast(md))) + if (static_cast(md)>=DPM_EMBEDDED_PDF) md = -1; #endif if (md < 0) { From d8a3a5ea0311329ebff9b19d8592082f86aa35ea Mon Sep 17 00:00:00 2001 From: Jan Sundermeyer Date: Sun, 9 Feb 2025 17:41:56 +0100 Subject: [PATCH 10/11] simplify option name --- src/configdialog.ui | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/configdialog.ui b/src/configdialog.ui index 0baf59f136..836c39143b 100644 --- a/src/configdialog.ui +++ b/src/configdialog.ui @@ -111,7 +111,7 @@ - 8 + 12 @@ -143,7 +143,7 @@ 0 0 - 1132 + 825 731 @@ -744,7 +744,7 @@ 0 0 - 1132 + 872 629 @@ -1590,7 +1590,7 @@ Then you can select a new shortcut by one of the following ways: 0 0 - 1132 + 953 568 @@ -2048,7 +2048,7 @@ Then you can select a new shortcut by one of the following ways: 0 - -1395 + 0 1132 1853 @@ -4016,7 +4016,7 @@ them here. - Default Compiler as set up in Build configuration + Preview with default compiler @@ -4258,7 +4258,7 @@ them here. 0 0 - 1132 + 556 645 @@ -4761,8 +4761,8 @@ Note: Changing this setting will only affect documents that are opened afterward 0 0 - 1146 - 458 + 413 + 204 From e179686b4d92fd9d17fbe8c5a7d06de34c845ecc Mon Sep 17 00:00:00 2001 From: Jan Sundermeyer Date: Sun, 9 Feb 2025 17:57:43 +0100 Subject: [PATCH 11/11] fix no_poppler variant --- src/configmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configmanager.cpp b/src/configmanager.cpp index eb0c89d9fa..fdc66116b3 100644 --- a/src/configmanager.cpp +++ b/src/configmanager.cpp @@ -1473,7 +1473,7 @@ bool ConfigManager::execConfigDialog(QWidget *parentToDialog) #ifdef NO_POPPLER_PREVIEW int l = confDlg->ui.comboBoxDvi2PngMode->count(); for (int index=l-1; index>=0; index--) { - if (buildManager->dvi2PngMode(index)>=BuildManager::DPM_EMBEDDED_PDF) + if (static_cast (index)>=BuildManager::DPM_EMBEDDED_PDF || index==0) confDlg->ui.comboBoxDvi2PngMode->removeItem(index); } #endif