Make paper search function accessible and customizable

This commit is contained in:
Juergen Spitzmueller 2020-08-27 08:45:41 +02:00
parent f86ec91afb
commit 8365eabd6f
17 changed files with 532 additions and 371 deletions

View File

@ -2511,7 +2511,6 @@ dist_scripts_DATA += \
scripts/legacy_lyxpreview2ppm.py \
scripts/listerrors \
scripts/lyxpak.py \
scripts/lyxpaperview \
scripts/lyxpaperview.py \
scripts/lyxpreview2bitmap.py \
scripts/lyxpreview_tools.py \

View File

@ -1310,13 +1310,12 @@ def checkOtherEntries():
rc_entry = [ r'\nomencl_command "makeindex -s nomencl.ist"' ])
checkProg('a python-pygments driver command', ['pygmentize'],
rc_entry = [ r'\pygmentize_command "%%"' ])
checkProg('external script for searching and showing citation sources',
['lyxpaperview', 'lyxpaperview.py'], rc_entry = [ r'\citation_search_view "%%"' ])
## FIXME: OCTAVE is not used anywhere
# path, OCTAVE = checkProg('Octave', ['octave'])
## FIXME: MAPLE is not used anywhere
# path, MAPLE = checkProg('Maple', ['maple'])
# Add the rest of the entries (no checkProg is required)
addToRC(r'''\citation_search_view "python -tt $$s/scripts/lyxpaperview.py"''')
addToRC(r'''\copier fig "python -tt $$s/scripts/fig_copy.py $$i $$o"
\copier pstex "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"
\copier pdftex "python -tt $$s/scripts/tex_copy.py $$i $$o $$l"

View File

@ -8742,12 +8742,14 @@ Verbatim
\end_layout
\begin_layout Verbatim
This is Verbatim.
\end_layout
\begin_layout Verbatim
\noindent
\align block
The following 2 lines are empty:
\end_layout
@ -8760,6 +8762,7 @@ The following 2 lines are empty:
\end_layout
\begin_layout Verbatim
Almost everything is allowed in Verbatim:"%&$§#~'`
\backslash
}][{|
@ -8783,6 +8786,7 @@ Verbatim
\end_layout
\begin_layout Verbatim*
This is Verbatim*.
\end_layout
@ -31647,184 +31651,6 @@ Additional Features
\end_layout
\begin_layout Subsection
\change_inserted 5863208 1598273424
Bibliography entries allowing external view of the cited material
\end_layout
\begin_layout Standard
\change_inserted 5863208 1598273449
\SpecialChar LyX
supports viewing the material the selected citation points to though
you need to satisfy some conditions so the
\family sans
Open
\begin_inset space ~
\end_inset
Citation
\begin_inset space ~
\end_inset
Content
\family default
in the context menu of the citation inset is active and working.
\end_layout
\begin_layout Standard
\change_inserted 5863208 1598270259
There are several ways how to make this feature available:
\end_layout
\begin_layout Itemize
\change_inserted 5863208 1598273631
Have citations entries including any of the following fields:
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273574
url
\change_unchanged
\end_layout
\end_inset
or
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273595
doi
\change_unchanged
\end_layout
\end_inset
for BibTeX,
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273611
eprint
\change_unchanged
\end_layout
\end_inset
for BibLaTeX (covering arXiv, JSTOR, PubMed, HDL, Google Books
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273631
eprinttype
\change_unchanged
\end_layout
\end_inset
).
This will launch web browser with the appropriate link.
\end_layout
\begin_layout Itemize
\change_inserted 5863208 1598273665
Having fields pointing to local files on your disk:
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273656
file
\change_unchanged
\end_layout
\end_inset
(filled by JabRef),
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273665
localfile
\change_unchanged
\end_layout
\end_inset
(filled by KBibTeX).
This will launch appropriate file viewer.
At the moment only absolute paths are accepted.
\change_unchanged
\end_layout
\begin_layout Itemize
\change_inserted 5863208 1598273865
Supplying your own script named either
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273683
lyxpaperview
\change_unchanged
\end_layout
\end_inset
or
\begin_inset Flex Code
status open
\begin_layout Plain Layout
\change_inserted 5863208 1598273697
lyxpaperview.py
\change_unchanged
\end_layout
\end_inset
, which takes year and first author name as an input.
It will be responsibility of this script to search for the appropriate
file on your disk and launch the viewer.
This script needs to be found among other executables so
\family sans
Tools\SpecialChar menuseparator
Reconfigure
\family default
can recognize it.
Example templates with identical names can be found within your installation.
\change_unchanged
\end_layout
\begin_layout Subsection
Citation Format
\begin_inset Index idx
@ -32350,6 +32176,192 @@ General text after
fields you can add pre- and postnotes that apply to the whole list.
\end_layout
\begin_layout Subsection
\change_inserted -712698321 1598509964
\begin_inset CommandInset label
LatexCommand label
name "subsec:Opening-cited-documents"
\end_inset
Opening cited documents from within \SpecialChar LyX
\end_layout
\begin_layout Standard
\change_inserted -712698321 1598509000
\SpecialChar LyX
supports opening documents selected citations point to via the
\family sans
Try
\begin_inset space ~
\end_inset
to
\begin_inset space ~
\end_inset
Open
\begin_inset space ~
\end_inset
Citation
\begin_inset space ~
\end_inset
Content\SpecialChar ldots
\family default
context menu if specific conditions are met:
\end_layout
\begin_layout Itemize
\change_inserted -712698321 1598509037
If citation entries include any of the fields
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
url
\end_layout
\end_inset
or
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
doi
\end_layout
\end_inset
for BibTeX,
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
eprint
\end_layout
\end_inset
for BibLaTeX (covering arXiv, JSTOR, PubMed, HDL, Google Books
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
eprinttype
\end_layout
\end_inset
), the action will launch a web browser with the appropriate link.
\end_layout
\begin_layout Itemize
\change_inserted -712698321 1598509157
If citation entries include any of the fields
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
file
\end_layout
\end_inset
(filled by JabRef) or
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598508820
localfile
\end_layout
\end_inset
(filled by KBibTeX) containing an URL that points to a file on your local
drive, the action will launch an appropriate file viewer.
At the moment only absolute paths are accepted.
\end_layout
\begin_layout Standard
\change_inserted -712698321 1598509196
Note that \SpecialChar LyX
does not check if the URLs are valid.
\end_layout
\begin_layout Standard
\change_inserted -712698321 1598509866
In addition to that, \SpecialChar LyX
also searches your disk for matching files if you
enable
\family sans
Search drive for cited files
\family default
in
\family sans
Tools\SpecialChar menuseparator
Preferences\SpecialChar ldots
\SpecialChar menuseparator
Edit\SpecialChar menuseparator
Control
\family default
.
It uses the tokens supplied at
\family sans
Pattern
\family default
in the same preferences section (by default: year and authors).
Any of the tokens in the pattern must occur in the title (at arbitrary
position).
The pattern syntax uses specific keywords.
These are basically Bib\SpecialChar TeX
keys embraced in
\begin_inset Flex Code
status collapsed
\begin_layout Plain Layout
\change_inserted -712698321 1598509565
%
\change_unchanged
\end_layout
\end_inset
, but there are also special keys, which are documented in the Customization
manual, sec.
\emph on
Cite format description
\emph default
.
\change_unchanged
\end_layout
\begin_layout Section
Index
\begin_inset Index idx
@ -49818,6 +49830,59 @@ Math Macros
Math
\emph default
manual.
\change_inserted -712698321 1598509726
\end_layout
\begin_layout Standard
\change_inserted -712698321 1598509987
The option
\family sans
Search drive for cited files
\family default
allows \SpecialChar LyX
to query your disk for cited documents when using the
\family sans
Try
\begin_inset space ~
\end_inset
to
\begin_inset space ~
\end_inset
Open
\begin_inset space ~
\end_inset
Citation
\begin_inset space ~
\end_inset
Content\SpecialChar ldots
\family default
context menu on a citation.
The
\family sans
Patterns
\family default
field determines the search pattern.
See sec.
\begin_inset space ~
\end_inset
\begin_inset CommandInset ref
LatexCommand ref
reference "subsec:Opening-cited-documents"
\end_inset
for details.
\change_unchanged
\end_layout
\begin_layout Subsubsection

View File

@ -1,26 +0,0 @@
#!/bin/bash
#This is just an example of an external script for finding corresponding file to the citation of the form Author + Year.
#You will need to accomodate it to your particular situation.
#
#Syntax: paperview Year Author
#Output: absolute path to the file(s)
#
#Dependencies:
#1) mlocate/updatedb or similar package installed and running.
#2) stored papers must contain first author name and year of publication in filename.
VIEWER=qpdfview
MAX_RESULTS=2
name="$2"
year="$1"
if [ -z "$name" ]; then exit; fi
FILE=`locate -i "$name" | grep -Ei '\.pdf$|\.ps$' | grep "$year" | head -n $MAX_RESULTS`
#Putting in background necessary so that LyX does not wait for viewer to end
$VIEWER ${FILE} &

View File

@ -130,7 +130,8 @@
# No convergence necessary.
# Incremented to format 33, by sanda
# Add \citation_search_view.
# Add \citation_search, \citation_search_pattern
# and \citation_search_view.
# No conversion necessary.

View File

@ -128,7 +128,7 @@ Menuset
CiteStyles
Separator
Item "Settings...|S" "inset-settings"
Item "Open Citation Content...|O" "inset-edit"
Item "Try to Open Citation Content...|O" "inset-edit"
End

View File

@ -996,7 +996,7 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
Buffer const & buf, CiteItem const & ci) const
Buffer const & buf, CiteItem const & ci, docstring const & format_in) const
{
bool const richtext = ci.richtext;
@ -1013,8 +1013,9 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfoList const & xrefs,
CiteEngineType const engine_type = buf.params().citeEngineType();
DocumentClass const & dc = buf.params().documentClass();
docstring const & format =
from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_)));
docstring const & format = format_in.empty()?
from_utf8(dc.getCiteFormat(engine_type, to_utf8(entry_type_)))
: format_in;
int counter = 0;
info_ = expandFormat(format, xrefs, counter, buf,
ci, false, false);
@ -1388,7 +1389,7 @@ docstring const BiblioInfo::getYear(docstring const & key, Buffer const & buf, b
docstring const BiblioInfo::getInfo(docstring const & key,
Buffer const & buf, CiteItem const & ci) const
Buffer const & buf, CiteItem const & ci, docstring const & format) const
{
BiblioInfo::const_iterator it = find(key);
if (it == end())
@ -1400,7 +1401,7 @@ docstring const BiblioInfo::getInfo(docstring const & key,
if (xrefit != end())
xrefptrs.push_back(&(xrefit->second));
}
return data.getInfo(xrefptrs, buf, ci);
return data.getInfo(xrefptrs, buf, ci, format);
}

View File

@ -75,7 +75,8 @@ public:
/// \return formatted BibTeX data suitable for framing.
/// \param vector of pointers to crossref/xdata information
docstring const & getInfo(BibTeXInfoList const & xrefs,
Buffer const & buf, CiteItem const & ci) const;
Buffer const & buf, CiteItem const & ci,
docstring const & format = docstring()) const;
/// \return formatted BibTeX data for a citation label
docstring const getLabel(BibTeXInfoList const xrefs,
Buffer const & buf, docstring const & format,
@ -227,7 +228,7 @@ public:
/// output any richtext tags marked in the citation format and escape < and >
/// elsewhere, and the general output context.
docstring const getInfo(docstring const & key, Buffer const & buf,
CiteItem const & ci) const;
CiteItem const & ci, docstring const & format = docstring()) const;
/// \return formatted BibTeX data for citation labels.
/// Citation labels can have more than one key.
docstring const getLabel(std::vector<docstring> keys, Buffer const & buf,

View File

@ -78,6 +78,8 @@ LexerKeyword lyxrcTags[] = {
{ "\\bind_file", LyXRC::RC_BINDFILE },
{ "\\check_lastfiles", LyXRC::RC_CHECKLASTFILES },
{ "\\chktex_command", LyXRC::RC_CHKTEX_COMMAND },
{ "\\citation_search", LyXRC::RC_CITATION_SEARCH },
{ "\\citation_search_pattern", LyXRC::RC_CITATION_SEARCH_PATTERN },
{ "\\citation_search_view", LyXRC::RC_CITATION_SEARCH_VIEW },
{ "\\close_buffer_with_last_view", LyXRC::RC_CLOSE_BUFFER_WITH_LAST_VIEW },
{ "\\completion_cursor_text", LyXRC::RC_COMPLETION_CURSOR_TEXT },
@ -680,8 +682,18 @@ LyXRC::ReturnValues LyXRC::read(Lexer & lexrc, bool check_format)
}
break;
case RC_CITATION_SEARCH:
lexrc >> citation_search;
break;
case RC_CITATION_SEARCH_PATTERN:
if (lexrc.next())
citation_search_pattern = lexrc.getString();
break;
case RC_CITATION_SEARCH_VIEW:
lexrc >> citation_search_view;
if (lexrc.next())
citation_search_view = lexrc.getString();
break;
case RC_CT_ADDITIONS_UNDERLINED:
@ -1607,11 +1619,32 @@ void LyXRC::write(ostream & os, bool ignore_system_lyxrc, string const & name) c
if (tag != RC_LAST)
break;
// fall through
case RC_CITATION_SEARCH:
if (ignore_system_lyxrc ||
citation_search != system_lyxrc.citation_search) {
os << "# Set to true to use script to search\n"
<< "# locl disk for citation targets.\n"
<< "\\citation_search "
<< convert<string>(citation_search)
<< '\n';
}
if (tag != RC_LAST)
break;
// fall through
case RC_CITATION_SEARCH_VIEW:
if (ignore_system_lyxrc ||
citation_search_view != system_lyxrc.citation_search_view) {
os << "\\citaton_search_view "
<< citation_search_view << '\n';
os << "\\citation_search_view \""
<< citation_search_view << "\"\n";
}
if (tag != RC_LAST)
break;
// fall through
case RC_CITATION_SEARCH_PATTERN:
if (ignore_system_lyxrc ||
citation_search_pattern != system_lyxrc.citation_search_pattern) {
os << "\\citation_search_pattern \""
<< citation_search_pattern << "\"\n";
}
if (tag != RC_LAST)
break;
@ -2788,6 +2821,8 @@ void actOnUpdatedPrefs(LyXRC const & lyxrc_orig, LyXRC const & lyxrc_new)
case LyXRC::RC_BIBTEX_ALTERNATIVES:
case LyXRC::RC_BIBTEX_COMMAND:
case LyXRC::RC_BINDFILE:
case LyXRC::RC_CITATION_SEARCH:
case LyXRC::RC_CITATION_SEARCH_PATTERN:
case LyXRC::RC_CITATION_SEARCH_VIEW:
case LyXRC::RC_CHECKLASTFILES:
case LyXRC::RC_COMPLETION_CURSOR_TEXT:

View File

@ -53,6 +53,8 @@ public:
RC_BINDFILE,
RC_CHECKLASTFILES,
RC_CHKTEX_COMMAND,
RC_CITATION_SEARCH,
RC_CITATION_SEARCH_PATTERN,
RC_CITATION_SEARCH_VIEW,
RC_COMPLETION_CURSOR_TEXT,
RC_COMPLETION_INLINE_DELAY,
@ -244,13 +246,15 @@ public:
/// default paper size for local xdvi/dvips/ghostview/whatever
/// command to run chktex incl. options
std::string chktex_command = "chktex -n1 -n3 -n6 -n9 -n22 -n25 -n30 -n38";
// Name of external script, which searches for file corresponding to a
// given citation. At this moment only script lyxpaperview[.py] is supported
// (search for pdf based on author+year), but we can generalize if requested.
// Citation context menu item "Open Citation Content" will be always enabled
// if the name of this script in nonempty (last resort when citation entry
// does not contain neccessary info.
/// Use external script to search for file corresponding to a
/// given citation.
bool citation_search = false;
/// Name of external script which searches for file corresponding to a
/// given citation. At this moment only script lyxpaperview.p is supported
/// (search for pdf or ps based on specific items)
std::string citation_search_view;
/// Items to search for in citation_search_view
std::string citation_search_pattern = "%year% %abbrvciteauthor%";
/// all available commands to run bibtex incl. options
CommandSet bibtex_alternatives;
/// command to run bibtex incl. options

View File

@ -2756,7 +2756,9 @@ PrefEdit::PrefEdit(GuiPreferences * form)
this, SIGNAL(changed()));
connect(cursorWidthSB, SIGNAL(valueChanged(int)),
this, SIGNAL(changed()));
connect(fullscreenLimitGB, SIGNAL(clicked()),
connect(citationSearchCB, SIGNAL(toggled(bool)),
this, SIGNAL(changed()));
connect(citationSearchLE, SIGNAL(textChanged(QString)),
this, SIGNAL(changed()));
connect(fullscreenWidthSB, SIGNAL(valueChanged(int)),
this, SIGNAL(changed()));
@ -2773,6 +2775,14 @@ PrefEdit::PrefEdit(GuiPreferences * form)
}
void PrefEdit::on_fullscreenLimitCB_toggled(bool const state)
{
fullscreenWidthSB->setEnabled(state);
fullscreenWidthLA->setEnabled(state);
changed();
}
void PrefEdit::applyRC(LyXRC & rc) const
{
rc.cursor_follows_scrollbar = cursorFollowsCB->isChecked();
@ -2787,13 +2797,15 @@ void PrefEdit::applyRC(LyXRC & rc) const
case 2: rc.macro_edit_style = LyXRC::MACRO_EDIT_LIST; break;
}
rc.cursor_width = cursorWidthSB->value();
rc.citation_search = citationSearchCB->isChecked();
rc.citation_search_pattern = fromqstr(citationSearchLE->text());
rc.full_screen_toolbars = toggleToolbarsCB->isChecked();
rc.full_screen_scrollbar = toggleScrollbarCB->isChecked();
rc.full_screen_statusbar = toggleStatusbarCB->isChecked();
rc.full_screen_tabbar = toggleTabbarCB->isChecked();
rc.full_screen_menubar = toggleMenubarCB->isChecked();
rc.full_screen_width = fullscreenWidthSB->value();
rc.full_screen_limit = fullscreenLimitGB->isChecked();
rc.full_screen_limit = fullscreenLimitCB->isChecked();
}
@ -2807,13 +2819,17 @@ void PrefEdit::updateRC(LyXRC const & rc)
groupEnvironmentsCB->setChecked(rc.group_layouts);
macroEditStyleCO->setCurrentIndex(rc.macro_edit_style);
cursorWidthSB->setValue(rc.cursor_width);
citationSearchCB->setChecked(rc.citation_search);
citationSearchLE->setText(toqstr(rc.citation_search_pattern));
toggleScrollbarCB->setChecked(rc.full_screen_scrollbar);
toggleStatusbarCB->setChecked(rc.full_screen_statusbar);
toggleToolbarsCB->setChecked(rc.full_screen_toolbars);
toggleTabbarCB->setChecked(rc.full_screen_tabbar);
toggleMenubarCB->setChecked(rc.full_screen_menubar);
fullscreenWidthSB->setValue(rc.full_screen_width);
fullscreenLimitGB->setChecked(rc.full_screen_limit);
fullscreenLimitCB->setChecked(rc.full_screen_limit);
fullscreenWidthSB->setEnabled(rc.full_screen_limit);
fullscreenWidthLA->setEnabled(rc.full_screen_limit);
}

View File

@ -452,6 +452,9 @@ public:
void applyRC(LyXRC & rc) const;
void updateRC(LyXRC const & rc);
public Q_SLOTS:
void on_fullscreenLimitCB_toggled(bool);
};

View File

@ -4624,9 +4624,15 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
dr.screenUpdate(Update::Force);
break;
case LFUN_CITATION_OPEN:
frontend::showTarget(argument);
case LFUN_CITATION_OPEN: {
string pdfv, psv;
if (theFormats().getFormat("pdf"))
pdfv = theFormats().getFormat("pdf")->viewer();
if (theFormats().getFormat("ps"))
psv = theFormats().getFormat("ps")->viewer();
frontend::showTarget(argument, pdfv, psv);
break;
}
default:
// The LFUN must be for one of BufferView, Buffer or Cursor;

View File

@ -298,15 +298,21 @@ void showDirectory(FileName const & directory)
LYXERR0("Unable to open QUrl even though dir exists!");
}
void showTarget(string const & target){
void showTarget(string const & target, string const & pdfv, string const & psv){
LYXERR(Debug::INSETS, "Showtarget:" << target << "\n");
if (prefixIs(target,"EXTERNAL ")) {
if (lyxrc.citation_search_view.empty())
if (prefixIs(target, "EXTERNAL ")) {
if (!lyxrc.citation_search)
return;
string tmp,tar;
string tmp, tar, opts;
tar = split(target, tmp, ' ');
if (!pdfv.empty())
opts = " -v " + pdfv;
if (!psv.empty())
opts += " -w " + psv;
if (!opts.empty())
opts += " ";
FuncRequest cmd = FuncRequest(LFUN_VC_COMMAND,"U . \"" +
lyxrc.citation_search_view + " " + tar + "\"");
lyxrc.citation_search_view + " " + opts + tar + "\"");
lyx::dispatch(cmd);
return;
}

View File

@ -101,9 +101,12 @@ void setSectionResizeMode(QHeaderView * view,
QHeaderView::ResizeMode mode);
/// Shows a directory in OSs file browser
void showDirectory(support::FileName const & directory);
/// handle request for showing citation content - shows pdf or
/// web page in target; external script can be used for pdf view
void showTarget(std::string const & target);
/// handle request for showing citation content - shows pdf/ps or
/// web page in target; external script can be used for pdf/ps view
/// \p pdfv takes a pad viewer, \p psv a ps viewer
void showTarget(std::string const & target,
std::string const & pdfv,
std::string const & psv);
} // namespace frontend

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>494</width>
<height>614</height>
<width>610</width>
<height>552</height>
</rect>
</property>
<property name="sizePolicy">
@ -19,8 +19,8 @@
<property name="windowTitle">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QGroupBox" name="scrollGB">
<property name="title">
<string>Editing</string>
@ -32,6 +32,19 @@
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="8" column="3">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="scrollBelowCB">
<property name="text">
@ -39,14 +52,7 @@
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="sortEnvironmentsCB">
<property name="text">
<string>Sort &amp;environments alphabetically</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="2">
<item row="1" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -59,14 +65,85 @@
</property>
</spacer>
</item>
<item row="0" column="0">
<item row="8" column="0" colspan="3">
<widget class="QComboBox" name="macroEditStyleCO">
<item>
<property name="text">
<string>Edit Math Macros inline with a box around</string>
</property>
</item>
<item>
<property name="text">
<string>Edit Math Macros inline with the name in the status bar</string>
</property>
</item>
<item>
<property name="text">
<string>Edit Math Macros with a parameter list (like in LyX &lt; 1.6)</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="copyCTMarkupCB">
<property name="toolTip">
<string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
</property>
<property name="text">
<string>&amp;Keep change tracking markup on copy and paste</string>
</property>
</widget>
</item>
<item row="5" column="0" rowspan="2" colspan="2">
<widget class="QCheckBox" name="sortEnvironmentsCB">
<property name="text">
<string>Sort &amp;environments alphabetically</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="cursorFollowsCB">
<property name="text">
<string>Cursor &amp;follows scrollbar</string>
</property>
</widget>
</item>
<item row="1" column="0">
<item row="9" column="0" colspan="3">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QCheckBox" name="citationSearchCB">
<property name="statusTip">
<string>If this is activated, LyX will search your disk for matching files when clicking on &quot;Try to Open Citation Content...&quot; in the citation context menu</string>
</property>
<property name="text">
<string>Search &amp;drive for cited files</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="citationSearchLA">
<property name="text">
<string>Patte&amp;rn:</string>
</property>
<property name="buddy">
<cstring>citationSearchLE</cstring>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="citationSearchLE">
<property name="toolTip">
<string>Define search pattern (see UserGuide for syntax)</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_3">
@ -99,26 +176,6 @@
</item>
</layout>
</item>
<item row="7" column="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="0" colspan="2">
<widget class="QCheckBox" name="groupEnvironmentsCB">
<property name="text">
<string>&amp;Group environments by their category</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="macLikeCursorMovementCB">
<property name="toolTip">
@ -129,39 +186,17 @@
</property>
</widget>
</item>
<item row="7" column="0" colspan="2">
<widget class="QComboBox" name="macroEditStyleCO">
<item>
<property name="text">
<string>Edit Math Macros inline with a box around</string>
</property>
</item>
<item>
<property name="text">
<string>Edit Math Macros inline with the name in the status bar</string>
</property>
</item>
<item>
<property name="text">
<string>Edit Math Macros with a parameter list (like in LyX &lt; 1.6)</string>
</property>
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="copyCTMarkupCB">
<property name="toolTip">
<string>If this is checked, deleted and added text in change tracking mode will not be resolved on copy/paste operations and when moving content from/to insets</string>
</property>
<item row="7" column="0">
<widget class="QCheckBox" name="groupEnvironmentsCB">
<property name="text">
<string>&amp;Keep change tracking markup on copy and paste</string>
<string>&amp;Group environments by their category</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<item row="1" column="0">
<widget class="QGroupBox" name="fullscreenGB">
<property name="title">
<string>Fullscreen</string>
@ -186,92 +221,101 @@
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="toggleScrollbarCB">
<property name="text">
<string>Hide scr&amp;ollbar</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="toggleTabbarCB">
<property name="text">
<string>Hide &amp;tabbar</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="0" column="1">
<widget class="QCheckBox" name="toggleMenubarCB">
<property name="text">
<string>Hide &amp;menubar</string>
</property>
</widget>
</item>
<item row="4" column="0">
<item row="0" column="2">
<widget class="QCheckBox" name="toggleScrollbarCB">
<property name="text">
<string>Hide scr&amp;ollbar</string>
</property>
</widget>
</item>
<item row="0" column="3" rowspan="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>146</width>
<height>38</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="toggleStatusbarCB">
<property name="text">
<string>Hide sta&amp;tusbar</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QGroupBox" name="fullscreenLimitGB">
<property name="title">
<string>&amp;Limit text width</string>
<item row="1" column="1">
<widget class="QCheckBox" name="toggleTabbarCB">
<property name="text">
<string>H&amp;ide tabbar</string>
</property>
<property name="flat">
<bool>true</bool>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Screen used (&amp;pixels):</string>
</property>
<property name="buddy">
<cstring>fullscreenWidthSB</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="fullscreenWidthSB">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>700</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>157</width>
<height>20</height>
</size>
</property>
</spacer>
<item row="2" column="0" colspan="4">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QCheckBox" name="fullscreenLimitCB">
<property name="text">
<string>&amp;Limit text width</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="fullscreenWidthLA">
<property name="text">
<string>Screen used (pi&amp;xels):</string>
</property>
<property name="buddy">
<cstring>fullscreenWidthSB</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="fullscreenWidthSB">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>700</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>157</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item>
<item row="2" column="0">
<spacer>
<property name="orientation">
<enum>Qt::Vertical</enum>
@ -293,7 +337,6 @@
<tabstop>scrollBelowCB</tabstop>
<tabstop>macLikeCursorMovementCB</tabstop>
<tabstop>sortEnvironmentsCB</tabstop>
<tabstop>groupEnvironmentsCB</tabstop>
<tabstop>macroEditStyleCO</tabstop>
</tabstops>
<includes>

View File

@ -206,13 +206,18 @@ void InsetCitation::openCitation()
docstring const & key = getParam("key");
vector<docstring> keys = getVectorFromString(key);
docstring year, author, doi, url, file;
docstring titledata, doi, url, file;
for (docstring const & kvar : keys) {
year = bi.getYear(kvar, buffer(), false);
author = bi.getAuthorOrEditorList(kvar, buffer());
CiteItem ci;
titledata = bi.getInfo(kvar, buffer(), ci,
from_ascii(lyxrc.citation_search_pattern));
// some cleanup: commas and " and ", as used in name lists,
// are not expected in file names
titledata = subst(titledata, ',', char());
titledata = subst(titledata, from_ascii(" and "), from_ascii(" "));
bi.getLocators(kvar, doi, url, file);
LYXERR(Debug::INSETS, "Locators: doi:" << doi << " url:"
<< url << " file:" << file << " author:" << author << " year:" << year);
<< url << " file:" << file << " title data:" << titledata);
docstring locator;
if (!file.empty()) {
locator = file;
@ -221,7 +226,7 @@ void InsetCitation::openCitation()
} else if (!url.empty()) {
locator = url;
} else {
locator = "EXTERNAL " + year + " " + author;
locator = "EXTERNAL " + titledata;
}
FuncRequest cmd = FuncRequest(LFUN_CITATION_OPEN, locator);
lyx::dispatch(cmd);