From 99a75c52f5a0e287de0a428cffe213df2b9a33e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=8B=E4=BA=8E=E5=88=9D=E8=A7=81?= <752204717@qq.com> Date: Wed, 22 Apr 2026 14:09:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- getUrl.html | 171 +++++++++++++++++++++++++++++++++++++++++++++++ js/article.js | 152 ++++++++++++++++++++++++++++++++++++++++- js/article_v1.js | 2 +- js/article_v2.js | 7 ++ 4 files changed, 329 insertions(+), 3 deletions(-) create mode 100644 getUrl.html diff --git a/getUrl.html b/getUrl.html new file mode 100644 index 0000000..ec985ee --- /dev/null +++ b/getUrl.html @@ -0,0 +1,171 @@ + + + + + + TMR 文章处理工具 + + + + + +

期刊文章快速跳转工具

+

请输入期刊官网文章链接:

+ + + +
+

检测到自动化排版文章,请选择跳转目标:

+
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/js/article.js b/js/article.js index f8b406a..1d3d6f1 100644 --- a/js/article.js +++ b/js/article.js @@ -9,6 +9,9 @@ wmath[data-wrap="inline"] { width: auto !important; } +mycite{ + color:rgb(0, 130, 170) !important; +} .outiline-item-h1,.outiline-item-h1 *{ font-weight: bold; } @@ -7691,8 +7694,6 @@ function article_con() { // initArticleNavList(a_ID) console.log('result at line 7575:', result) - - $('.wenzhang .wen_rong .left').css({ 'background-color': '#f4fafd', @@ -8969,7 +8970,154 @@ text-align:left;color:#333;" >${item.table.note ? item.table.note : '' $('.wen_rong .content-box .conthtmn').append('

References

' + refs + '
'); } initArticleHtml(arr, result.data.refers, html_type) + // 2. 渲染完成后立即重新计算并纠正顺序 + updateCitationDisplayWithMyTable('.wen_rong .content-box .conthtmn', result.data.refers, { + writeInnerHTML: true, + hideEmptyCite: true + }); + } +/** + * 根据容器内 mycite/autocite 的文档顺序,按 data-id 首次出现编号并写回角标。 + + */ +function updateCitationDisplayWithMyTable(root, refers, opt) { + opt = opt || {}; + var el = typeof root === 'string' ? document.querySelector(root) : root; + if (!el) return { idToNum: {}, order: [] }; + + // 1) 合法参考文献集合 + var validRef = Object.create(null); + (refers || []).forEach(function (r) { + if (r && r.p_refer_id != null) validRef[String(r.p_refer_id)] = true; + }); + + function parseIds(raw) { + return String(raw || '') + .split(',') + .map(function (s) { return s.trim(); }) + .filter(Boolean); + } + + function formatNums(nums) { + var a = nums.filter(function (n, i, arr) { return arr.indexOf(n) === i; }) + .sort(function (x, y) { return x - y; }); + var out = [], i = 0; + while (i < a.length) { + var j = i; + while (j < a.length - 1 && a[j + 1] === a[j] + 1) j++; + if (j - i >= 2) out.push(a[i] + '–' + a[j]); + else for (var k = i; k <= j; k++) out.push(String(a[k])); + i = j + 1; + } + return out.join(', '); + } + + // 2) 建一个“表格索引”:tableId -> 真实表格节点 + // 这里把常见承载节点都尝试一遍,你可按官网实际 class 再加 + var tableMap = Object.create(null); + var tableCandidates = el.querySelectorAll( + 'table, .myeditabledivTable, .wordTableHtml, [data-table-id], [data-amt-id], [main-id]' + ); + tableCandidates.forEach(function (node) { + var ids = [ + node.getAttribute('data-table-id'), + node.getAttribute('data-amt-id'), + node.getAttribute('data-id'), + node.getAttribute('main-id') + ].filter(Boolean).map(String); + ids.forEach(function (id) { + if (!tableMap[id]) tableMap[id] = node; + }); + }); + + // 3) 全局编号状态 + var idToNum = Object.create(null); + var order = []; + var nextNum = 1; + + function assignId(id) { + id = String(id); + if (!validRef[id]) return null; // 不存在就不显示 + if (idToNum[id] == null) { + idToNum[id] = nextNum++; + order.push(id); + } + return idToNum[id]; + } + + function paintCiteNode(node, ids) { + var nums = []; + ids.forEach(function (id) { + var n = assignId(id); + if (n != null) nums.push(n); + }); + nums = nums.filter(function (v, i, a) { return a.indexOf(v) === i; }) + .sort(function (a, b) { return a - b; }); + + if (!nums.length) { + node.removeAttribute('data-cite-label'); + if (opt.writeInnerHTML) node.innerHTML = ''; + if (opt.hideEmptyCite !== false) node.style.display = 'none'; + return; + } + + var label = formatNums(nums); + node.setAttribute('data-cite-label', label); + if (opt.writeInnerHTML) node.innerHTML = '[' + label + ']'; + } + + // 4) 扫描一个子树内 mycite/autocite + function scanCitesInSubtree(node) { + node.querySelectorAll('mycite, autocite').forEach(function (cite) { + paintCiteNode(cite, parseIds(cite.getAttribute('data-id'))); + }); + } + + // 5) 主遍历:遇到 mytable 时“提前注入”对应表格引用 + var consumedTableNode = new WeakSet(); + + function walk(node) { + if (!node || node.nodeType !== 1) return; + var tag = node.tagName.toLowerCase(); + + // 5.1 引用标签 + if (tag === 'mycite' || tag === 'autocite') { + paintCiteNode(node, parseIds(node.getAttribute('data-id'))); + return; + } + + // 5.2 mytable 占位:在这里扫描对应表格 + if (tag === 'mytable') { + var tid = String(node.getAttribute('data-id') || '').trim(); + var tableNode = tid ? tableMap[tid] : null; + if (!tableNode) { + // 兜底:按属性再找一次 + tableNode = el.querySelector( + '[data-table-id="' + tid + '"], [data-amt-id="' + tid + '"], [data-id="' + tid + '"], [main-id="' + tid + '"]' + ); + } + if (tableNode && !consumedTableNode.has(tableNode)) { + scanCitesInSubtree(tableNode); // 在 mytable 位置提前计入 + consumedTableNode.add(tableNode); // 后续真实表格处不再重复 + } + return; + } + + // 5.3 若走到真实表格节点,且已在 mytable 处消费过,则跳过 + if (consumedTableNode.has(node)) return; + + // 5.4 正常递归 + for (var ch = node.firstElementChild; ch; ch = ch.nextElementSibling) { + walk(ch); + } + } + + walk(el); + + return { idToNum: idToNum, order: order }; + } + function initArticleHtml(htmlData, refs, type) { document.querySelectorAll('wmath').forEach(el => { const latex = el.getAttribute('data-latex'); diff --git a/js/article_v1.js b/js/article_v1.js index 3d0beaa..16080a8 100644 --- a/js/article_v1.js +++ b/js/article_v1.js @@ -226,7 +226,7 @@ justify-content: space-between; } .zuo_zhe_info.show { - max-height: 300px; /* 根据实际内容调整 */ + max-height: 1000px; /* 根据实际内容调整 */ opacity: 1; margin-top:10px; diff --git a/js/article_v2.js b/js/article_v2.js index bd7ebb5..5217dd3 100644 --- a/js/article_v2.js +++ b/js/article_v2.js @@ -95,6 +95,12 @@ margin-left: calc((100% - 190px - 65px)/2) !important; .thumbnailTableBox { overflow-x: auto; } +.zuo_zhe_info.show { + max-height: 1000px; /* 根据实际内容调整 */ + opacity: 1; + margin-top:10px; + + } ` document.head.appendChild(style); @@ -1864,6 +1870,7 @@ async function initContentHtml(content, arr, refers, html_type, ArticleData) { await initArticleHtml(arr, refers, html_type, { OriginalDataStr: OriginalDataStr, pdfStr: pdfStr, trackStr: trackStr, mhooStr: mhooStr }) + await initRelatedArticles(ArticleData.a_ID) await initTopics(ArticleData.a_ID)