commit f0fae27030f8624009296e6968e1221346fc1f83
Author: Juergen Spitzmueller <[email protected]>
Date: Fri Mar 28 16:17:37 2025 +0100
tex2lyx support for crossref ranges
---
development/FORMAT | 2 +-
src/tex2lyx/test/test-insets-basic.lyx.lyx | 7 +++
src/tex2lyx/test/test-insets.lyx.lyx | 7 +++
src/tex2lyx/test/test-minted.lyx.lyx | 5 ++
src/tex2lyx/test/test-refstyle-theorems.lyx.lyx | 27 +++++++++
src/tex2lyx/test/test.lyx.lyx | 2 +
src/tex2lyx/text.cpp | 80 ++++++++++++++++++++-----
7 files changed, 115 insertions(+), 15 deletions(-)
diff --git a/development/FORMAT b/development/FORMAT
index 51ed4483aa..e905d1b983 100644
--- a/development/FORMAT
+++ b/development/FORMAT
@@ -17,7 +17,7 @@ changes happened in particular if possible. A good example
would be
1. \cpageref or \Cpageref with cleveref
2. \zcpageref with zref
- New supported LaTeX commands:
- 1. \vrefrange, \vpagerange (varioref) with LatexCommand vref
+ 1. \vrefrange, \vpagerefrange (varioref) with LatexCommand vref
and LatexCommand vpageref and a list of two labels.
2. \<type>rangeref (refstyle) with two labels and tuple=range
3. \crefrange, \CRefrange (cleveref) with dito conditions
diff --git a/src/tex2lyx/test/test-insets-basic.lyx.lyx
b/src/tex2lyx/test/test-insets-basic.lyx.lyx
index acacba58ad..bbf8f1f04b 100644
--- a/src/tex2lyx/test/test-insets-basic.lyx.lyx
+++ b/src/tex2lyx/test/test-insets-basic.lyx.lyx
@@ -222,6 +222,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -250,6 +251,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -266,6 +268,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -282,6 +285,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -298,6 +302,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -314,6 +319,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -330,6 +336,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
diff --git a/src/tex2lyx/test/test-insets.lyx.lyx
b/src/tex2lyx/test/test-insets.lyx.lyx
index 82717a6a57..48ac82a55a 100644
--- a/src/tex2lyx/test/test-insets.lyx.lyx
+++ b/src/tex2lyx/test/test-insets.lyx.lyx
@@ -202,6 +202,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -230,6 +231,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -246,6 +248,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -262,6 +265,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -278,6 +282,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -294,6 +299,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -310,6 +316,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
diff --git a/src/tex2lyx/test/test-minted.lyx.lyx
b/src/tex2lyx/test/test-minted.lyx.lyx
index 380455f3f7..117c7ad97a 100644
--- a/src/tex2lyx/test/test-minted.lyx.lyx
+++ b/src/tex2lyx/test/test-minted.lyx.lyx
@@ -134,6 +134,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -304,6 +305,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -375,6 +377,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -440,6 +443,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -497,6 +501,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
diff --git a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
index 41eef01818..9096cfff69 100644
--- a/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
+++ b/src/tex2lyx/test/test-refstyle-theorems.lyx.lyx
@@ -110,6 +110,7 @@ reference "part:part"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -135,6 +136,7 @@ reference "chap:chapter"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -160,6 +162,7 @@ reference "sec:Section"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -185,6 +188,7 @@ reference "subsec:subsection"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -210,6 +214,7 @@ reference "subsec:Subsubsection"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -235,6 +240,7 @@ reference "par:paragraph"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -260,6 +266,7 @@ reference "par:subparagraph"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -319,6 +326,7 @@ reference "fig:figure"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -378,6 +386,7 @@ reference "tab:table"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -437,6 +446,7 @@ reference "alg:algorithm"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -473,6 +483,7 @@ reference "fn:foot"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -510,6 +521,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -535,6 +547,7 @@ reference "enu:item"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -559,6 +572,7 @@ reference "eq:A=00003DB"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -584,6 +598,7 @@ reference "lem:lemma"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -609,6 +624,7 @@ reference "thm:theorem"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -634,6 +650,7 @@ reference "cor:corollary"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -659,6 +676,7 @@ reference "prop:proposition"
plural "false"
caps "false"
noprefix "false"
+tuple "list"
\end_inset
@@ -685,6 +703,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -711,6 +730,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -737,6 +757,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -763,6 +784,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -789,6 +811,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -815,6 +838,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -841,6 +865,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -867,6 +892,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -893,6 +919,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
diff --git a/src/tex2lyx/test/test.lyx.lyx b/src/tex2lyx/test/test.lyx.lyx
index 14d1b67992..a03f4f2ea9 100644
--- a/src/tex2lyx/test/test.lyx.lyx
+++ b/src/tex2lyx/test/test.lyx.lyx
@@ -439,6 +439,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
@@ -450,6 +451,7 @@ plural "false"
caps "false"
noprefix "false"
nolink "false"
+tuple "list"
\end_inset
diff --git a/src/tex2lyx/text.cpp b/src/tex2lyx/text.cpp
index 72ec552425..7e18b42382 100644
--- a/src/tex2lyx/text.cpp
+++ b/src/tex2lyx/text.cpp
@@ -151,28 +151,36 @@ char const * const known_babel_shorthands[] = { "\"",
"|", "-", "~", "=", "/",
char const * const known_ref_commands[] = { "ref", "pageref", "vref",
"vpageref", "prettyref", "nameref", "eqref", "cref", "Cref", "namecref",
- "nameCref", "namecrefs", "nameCrefs", 0 };
+ "nameCref", "namecrefs", "nameCrefs", "cpageref", "labelcref",
+ "labelcpageref", "vrefrange", "vpagerefrange", "crefrange", "Crefrange", 0 };
char const * const known_coded_ref_commands[] = { "ref", "pageref", "vref",
"vpageref", "formatted", "nameref", "eqref", "formatted", "formatted",
"nameref",
- "nameref", "nameref", "nameref", 0 };
+ "nameref", "nameref", "nameref", "cpageref", "ref", "pageref",
+ "vref", "vpageref", "formatted", "formatted", 0 };
char const * const known_starref_commands[] = { "ref", "pageref", "vref",
- "vpageref", "nameref", "eqref", "cref", "Cref", 0 };
+ "vpageref", "nameref", "eqref", "cref", "Cref", "cpageref", 0 };
char const * const known_refstyle_commands[] = { "algref", "chapref", "corref",
"eqref", "enuref", "figref", "fnref", "lemref", "parref", "partref",
"propref",
- "secref", "subsecref", "tabref", "thmref", 0 };
+ "secref", "subsecref", "tabref", "thmref",
+"algrangeref", "chaprangeref", "corrangeref",
+ "eqrangeref", "enurangeref", "figrangeref", "fnrangeref", "lemrangeref",
"parrangeref", "partrangeref", "proprangeref",
+ "secrangeref", "subsecrangeref", "tabrangeref", "thmrangeref", 0 };
char const * const known_refstyle_prefixes[] = { "alg", "chap", "cor",
"eq", "enu", "fig", "fn", "lem", "par", "part", "prop",
- "sec", "subsec", "tab", "thm", 0 };
+ "sec", "subsec", "tab", "thm",
+ "alg", "chap", "cor",
+ "eq", "enu", "fig", "fn", "lem", "par", "part", "prop",
+ "sec", "subsec", "tab", "thm", 0 };
-char const * const known_zref_commands[] = { "zcref", "zvref",
- "zvpageref", 0 };
+char const * const known_zref_commands[] = { "zcref", "zcpageref", "zvref",
+ "zvpageref", "zvrefrange", "zvpagerefrange", 0 };
-char const * const known_coded_zref_commands[] = { "formatted", "vref",
- "vpageref", 0 };
+char const * const known_coded_zref_commands[] = { "formatted", "cpageref",
"vref",
+ "vpageref", "vref", "vpageref", 0 };
/**
@@ -4578,11 +4586,22 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
// remove the grouping
if (contains(arg, ' '))
arg = ltrim(rtrim(arg, "}"), "{");
+ if (contains(t.cs(), "range")) {
+ string arg2 = p.getArg('{', '}');
+ if (contains(arg2, ' '))
+ arg2 = ltrim(rtrim(arg2, "}"), "{");
+ if (!arg2.empty())
+ arg += "," + arg2;
+ }
os << convert_literate_command_inset_arg(arg)
<< "\"\n";
os << "plural \"" << plural << "\"\n";
os << "caps \"" << cap << "\"\n";
os << "noprefix \"false\"\n";
+ if (contains(t.cs(), "range"))
+ os << "tuple \"range\"\n";
+ else
+ os << "tuple \"list\"\n";
end_inset(os);
preamble.registerAutomaticallyLoadedPackage("refstyle");
continue;
@@ -4605,8 +4624,14 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
context.check_layout(os);
begin_command_inset(os, "ref",
known_coded_ref_commands[where -
known_ref_commands]);
+ string arg = p.getArg('{', '}');
+ if (contains(t.cs(), "range")) {
+ string arg2 = p.getArg('{', '}');
+ if (!arg2.empty())
+ arg += "," + arg2;
+ }
os << "reference \""
- <<
convert_literate_command_inset_arg(p.verbatim_item())
+ << convert_literate_command_inset_arg(arg)
<< "\"\n";
if (plural)
os << "plural \"true\"\n";
@@ -4621,8 +4646,13 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
os << "nolink \"true\"\n";
else
os << "nolink \"false\"\n";
+ if (contains(t.cs(), "range"))
+ os << "tuple \"range\"\n";
+ else
+ os << "tuple \"list\"\n";
end_inset(os);
- if (t.cs() == "vref" || t.cs() == "vpageref")
+ if (t.cs() == "vref" || t.cs() == "vpageref"
+ || t.cs() == "vrefrange" || t.cs() ==
"vpagerefrange")
preamble.registerAutomaticallyLoadedPackage("varioref");
else if (t.cs() == "prettyref")
preamble.registerAutomaticallyLoadedPackage("prettyref");
@@ -4640,6 +4670,9 @@ void parse_text(Parser & p, ostream & os, unsigned flags,
bool outer,
&& preamble.crossrefPackage() == "zref") {
bool starred = false;
bool caps = false;
+ bool range = false;
+ bool noname = false;
+ bool page = false;
if (p.next_token().asInput() == "*") {
starred = true;
p.get_token();
@@ -4650,6 +4683,12 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
for (auto const & opt : opts) {
if (opt == "S")
caps = true;
+ if (opt == "range")
+ range = true;
+ if (opt == "noname" && t.cs() == "zcref")
+ noname = true;
+ if (opt == "page" && t.cs() == "zcref")
+ page = true;
else {
if (!first)
options += ",";
@@ -4658,10 +4697,19 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
}
}
context.check_layout(os);
- begin_command_inset(os, "ref",
- known_coded_zref_commands[where -
known_zref_commands]);
+ string lyxname = known_coded_zref_commands[where -
known_zref_commands];
+ if (noname)
+ lyxname = (page) ? "pageref" : "ref";
+ begin_command_inset(os, "ref", lyxname);
+ string arg = p.getArg('{', '}');
+ if (contains(t.cs(), "range")) {
+ range = true;
+ string arg2 = p.getArg('{', '}');
+ if (!arg2.empty())
+ arg += "," + arg2;
+ }
os << "reference \""
- <<
convert_literate_command_inset_arg(p.verbatim_item())
+ << convert_literate_command_inset_arg(arg)
<< "\"\n";
os << "plural \"false\"\n";
if (caps)
@@ -4673,6 +4721,10 @@ void parse_text(Parser & p, ostream & os, unsigned
flags, bool outer,
os << "nolink \"true\"\n";
else
os << "nolink \"false\"\n";
+ if (range)
+ os << "tuple \"range\"\n";
+ else
+ os << "tuple \"list\"\n";
end_inset(os);
if (t.cs() == "zvref" || t.cs() == "zvpageref")
preamble.registerAutomaticallyLoadedPackage("zref-vario");
--
lyx-cvs mailing list
[email protected]
https://lists.lyx.org/mailman/listinfo/lyx-cvs