LaTeX论文修改时,序提交一版具有annotation标记的marked版本论文

论文修改时,序提交一版具有annotation标记的marked版本论文,如何方便的在LaTeX上修改

我是在原版上修改,把修改的部分写在\textcolor{black}{所修改的文字}里面,生成最终修改版本。

生成有标记版本时,将所有\textcolor{black}替换成\textcolor{red}

这样修改的部分就能全部标记成红色。

增加个功能就是双击到latex公式,做个类似/* 点击元素向父窗口发送行号(可选) */ document.addEventListener('click', (ev) => { const line = ev.target.closest('[data-source-line]')?.dataset.sourceLine; if (line) { parent.postMessage({ type: 'preview-click', line: Number(line) }, '*'); } }); 发送 parent.postMessage({ type: 'latex-update', latex: "获取的latex公式" }, '*'); preview-template.html中latex公式都类似$x=\frac {-b\pm \sqrt {{b}^{2}-4ac}} {2a}$ 使用双$$包裹的内容都是公式 下面是需要修改的代码<!doctype html> <html> <head> <meta charset="utf-8" /> <title>实预览</title> <meta name="viewport" content="width=device-width,initial-scale=1" /> <!-- 动态外部样式占位,将由父窗口注入 --> <link id="ext-css" rel="stylesheet" href="" /> <!-- 错误信息占位 --> <style> body{margin:0;padding:0;font-family:sans-serif;background:#fff;color:#333;} #error-mask{ position:fixed;inset:0;background:rgba(255,0,0,.05); display:flex;justify-content:center;align-items:center; } #error-box{ max-width:90%;max-height:90%;overflow:auto; padding:1rem 1.5rem;border:1px solid #e74c3c;border-radius:4px; background:#fdf2f2;color:#c0392b;font-family:Consolas,monospace; white-space:pre-wrap; } /* 点击高亮 */ [data-source-highlight]{ outline:2px dashed #ff6b00; outline-offset:2px; } /* LaTeX公式样式 */ .latex-formula { display: inline-block; margin: 0 0.2em; } </style> <script> MathJax = { tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] }, svg: { fontCache: 'global' } }; </script> <script src="/mathjax/es5/tex-chtml.js" async></script> <!-- 内联样式 / 脚本由父窗口 postMessage 注入 --> </head> <body> <!-- 真实渲染内容 --> <div id="app"></div> <p style="color: red;">实际应用中应使用动态规划或矩阵快速幂等优化方法。$x=\frac {-b\pm \sqrt {{b}^{2}-4ac}} {2a}$</p> <script> /* 负责接收父窗口发来的 HTML/CSS/JS 与错误信息 */ window.addEventListener('message', (e) => { const { type, payload } = e.data; if (type === 'update') { const { html, css, js, cssUrl, error } = payload; // 显示或隐藏错误 const oldBox = document.getElementById('error-mask'); if (oldBox) oldBox.remove(); if (error) { const mask = document.createElement('div'); mask.id = 'error-mask'; mask.innerHTML = `<div id="error-box">${error}</div>`; document.body.appendChild(mask); return; } // 注入 CSS let styleEl = document.getElementById('inline-style'); if (!styleEl) { styleEl = document.createElement('style'); styleEl.id = 'inline-style'; document.head.appendChild(styleEl); } styleEl.textContent = css; // 外部 CSS const extLink = document.getElementById('ext-css'); extLink.href = cssUrl || ''; // 注入 HTML / JS document.getElementById('app').innerHTML = html; try { // 处理LaTeX公式 processLatex(); // 用 Function 包裹,让报错可以捕获行列 new Function(js)(); // 再次处理LaTeX公式(JS可能添加了新的公式) processLatex(); // 触发MathJax重新渲染 if (window.MathJax) { MathJax.typesetPromise && MathJax.typesetPromise(); } } catch (e) { const mask = document.createElement('div'); mask.id = 'error-mask'; mask.innerHTML = `<div id="error-box">${e}</div>`; document.body.appendChild(mask); } } if (type === 'highlight' && e.data.line) { const el = document.querySelector(`[data-source-line="${e.data.line}"]`); if (el) { el.scrollIntoView({ behavior: 'smooth', block: 'center' }); el.setAttribute('data-source-highlight', ''); setTimeout(() => el.removeAttribute('data-source-highlight'), 1500); } } }); /* 处理LaTeX公式 */ function processLatex() { // 找到所有带有data-latex属性的元素 const latexElements = document.querySelectorAll('[data-latex]'); latexElements.forEach(el => { // 如果已经处理过,跳过 if (el.classList.contains('latex-processed')) return; // 获取LaTeX代码 const latexCode = el.getAttribute('data-latex'); // 创建MathJax可识别的元素 const mathElement = document.createElement('span'); mathElement.classList.add('latex-formula'); mathElement.textContent = `$$${latexCode}$$`; // 保留原始行号数据(如果有) const line = el.getAttribute('data-source-line'); if (line) { mathElement.setAttribute('data-source-line', line); } // 替换原始元素 el.parentNode.replaceChild(mathElement, el); // 标记为已处理 mathElement.classList.add('latex-processed'); }); } /* 点击元素向父窗口发送行号(可选) */ document.addEventListener('click', (ev) => { const line = ev.target.closest('[data-source-line]')?.dataset.sourceLine; if (line) { parent.postMessage({ type: 'preview-click', line: Number(line) }, '*'); } }); </script> </body> </html>
08-24
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.1:compile (default-compile) on project dcloud-common: Compilation failure [ERROR] Failure executing javac, but could not parse the error: [ERROR] [ERROR] [ERROR] An annotation processor threw an uncaught exception. [ERROR] Consult the following stack trace for details. [ERROR] java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' [ERROR] at lombok.javac.JavacImportList.getFullyQualifiedNameForSimpleNameNoAliasing(JavacImportList.java:53) [ERROR] at lombok.core.TypeResolver.typeRefToFullyQualifiedName(TypeResolver.java:60) [ERROR] at lombok.javac.HandlerLibrary.handleAnnotation(HandlerLibrary.java:247) [ERROR] at lombok.javac.JavacTransformer$AnnotationVisitor.visitAnnotationOnType(JavacTransformer.java:79) [ERROR] at lombok.javac.JavacNode.traverse(JavacNode.java:132) [ERROR] at lombok.javac.JavacAST.traverseChildren(JavacAST.java:223) [ERROR] at lombok.javac.JavacNode.traverse(JavacNode.java:95) [ERROR] at lombok.javac.JavacAST.traverseChildren(JavacAST.java:223) [ERROR] at lombok.javac.JavacNode.traverse(JavacNode.java:90) [ERROR] at lombok.javac.JavacAST.traverse(JavacAST.java:219) [ERROR] at lombok.javac.JavacTransformer.transform(JavacTransformer.java:63) [ERROR] at lombok.javac.apt.LombokProcessor.process(LombokProcessor.java:324) [ERROR] at lombok.core.AnnotationProcessor$JavacDescriptor.process(AnnotationProcessor.java:187) [ERROR] at lombok.core.AnnotationProcessor.process(AnnotationProcessor.java:241) [ERROR] at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.process(AnnotationProcessor.java:90) [ERROR] at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.main.Main.compile(Unknown Source) [ERROR] at jdk.compiler/com.sun.tools.javac.Main.compile(Unknown Source) [ERROR] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) [ERROR] at java.base/java.lang.reflect.Method.invoke(Unknown Source) [ERROR] at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:484) [ERROR] at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:155) [ERROR] at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:575) [ERROR] at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:116) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) [ERROR] at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) [ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) [ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) [ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) [ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) [ERROR] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source) [ERROR] at java.base/java.lang.reflect.Method.invoke(Unknown Source) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314) [ERROR] [ERROR] [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException Build step 'Execute shell' marked build as failure Finished: FAILURE
最新发布
09-15
Identification of tumour-cell-enriched spots and cluster-specific DEGs To distinguish tumour-cell-enriched spots from normal stromal tissues, we integrated information from several sources, on the basis of our previous studies48,49,50. This process involved the following steps. (1) Histopathological review. Our experienced pathologists performed a detailed histopathological examination and annotation of each spot (see ‘Spot-level histopathological annotation’). (2) Inferred CNVs. Tumour-cell-enriched spots typically exhibit extensive CNVs, marked by increased or decreased levels of aneuploidy, which are important characteristics used to distinguish them from normal stromal areas (see ‘Inferring spatial CNVs’). (3) Transcriptional profiles. Tumour-cell-enriched spots often exhibit unique expression profiles, such as the expression of tumour-lineage-specific markers. We identified cluster-specific DEGs using the ‘FindAllMarkers’ function with a two-sided Wilcoxon rank-sum test. Criteria for cluster-specific DEG selection included expression in at least 25% of spots in the more abundant group, a fold change greater than 1.2 and an adjusted P value (by false discovery rate; FDR) lower than 0.05. We then compared cluster-specific DEGs with known PDAC tumour lineage markers to defined tumour-cell-enriched clusters. Our multidisciplinary team reviewed all of the above information. After this comprehensive analysis, we successfully identified a total of 67,990 tumour-cell enriched spots. 文献里提到的这个方法具体代码是什么?最后鉴定到了什么?
08-31
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值