Latex提交SCI论文修改稿时标注修改文字颜色

参考链接
Latex更改字体颜色以及快速生成 SCI 论文的 revised version 和 pure version

自己最终采用的方式为在导言区添加如下代码

% *** Revision Settings ***
\usepackage{soul,color,xcolor}      % 用于设置字体颜色
\definecolor{myColor}{rgb}{0.8039,0,0}   % 显示修订时用这行
% \definecolor{myColor}{rgb}{0,0,0}        % 隐藏修订时用这行
\makeatletter
\newcommand*{\new}{\@ifnextchar\bgroup{\new@}{\color{myColor}}}
\newcommand*{\new@}[1]{{\textcolor{myColor}{#1}}}
\makeatother

即可使用 \new\new{} 代替 \color{blue}\textcolor{blue}{}

1、修改文字颜色的一般方法

采用命令为

  • \textcolor{}{} 命令用于将指定的文本 设置为指定的颜色 。这个命令可以用来在文档中设置局部文本的颜色。

  • \color{} 命令用于在当前块设置颜色,直到遇到其他颜色声明。它会改变当前块所有内容的颜色,直到被其他颜色命令覆盖或重置。这种全局设置颜色的方式可以用于更大范围的文本段落,表格,图片,及公式。

2、在论文修改稿中设置文字颜色

解读一下上面提到的代码

% *** Revision Settings ***
\usepackage{soul,color,xcolor}      % 用于设置字体颜色
\definecolor{myColor}{rgb}{0.8039,0,0}   % 显示修订时用这行
% \definecolor{myColor}{rgb}{0,0,0}        % 隐藏修订时用这行
\makeatletter
\newcommand*{\new}{\@ifnextchar\bgroup{\new@}{\color{myColor}}}
\newcommand*{\new@}[1]{{\textcolor{myColor}{#1}}}
\makeatother

代码解读如下:

这段代码的作用是定义了一个名为\new的命令,其行为如下:

  • 如果使用\new命令时不带参数,则将其后的文本标记为myColor。
  • 如果使用\new命令时带有参数(用花括号括起来),则将参数内的文本标记为myColor。
  1. \usepackage{color}:导入color宏包,以便在文档中使用颜色相关的命令。也可以使用xcolor宏包替代该行,因为xcolor扩展了color宏包并提供了更多功能。

  2. \makeatletter:这一命令声明@符号为LaTeX命令中的字母,从而可以在命令名称中使用@

  3. \newcommand*{\new}{\@ifnextchar\bgroup{\new@}{\color{blue}}}:创建了一个名为\new的新命令。代码的逻辑如下:

    • \@ifnextchar\bgroup:检查下一个字符是否为左花括号({),即判断\new命令是否带有参数。

    • 如果\new命令带有参数,则执行\new@命令。

    • 如果\new命令没有参数,则将其标记为myColor。

  4. \newcommand*{\new@}[1]{{\textcolor{blue}{#1}}}:这是一个内部命令\new@,用于在\new命令带有参数时将参数标记为myColor。

    • \textcolor{blue}{#1}将参数#1(即带有参数的\new命令中的文本)标记为myColor。
  5. \makeatother:恢复@符号的一般含义。

  6. \newcommand中的*
    在LaTeX中,*\newcommand命令中的作用是禁止创建带参数的命令。
    具体来说,在\newcommand命令中使用星号*,即 \newcommand*{\command}{definition},会创建一个不带参数的命令。这意味着你只能在文档中直接使用\command而不能使用\command{...}这种带参数的形式。
    相比之下,如果没有使用星号*,即 \newcommand{\command}{definition},则可以创建带参数的命令,例如\command{...}
    使用星号*可以提供一种简便的方式来定义不带参数的命令,避免了在定义时必须考虑参数的复杂性。在某些情况下,不带参数的命令更适合特定的应用需求。

  7. \new@}[1]中的[1]
    在给定的命令定义 \newcommand*{\new@}[1]{{\textcolor{blue}{#1}}} 中,[1] 的作用是指示该命令定义具有一个参数。
    具体来说,这个命令定义了一个带有一个参数的新命令 \new@。当你在文档中使用 \new@{text} 时,参数 text 的值将被传递给 \new@ 中的 #1,然后在命令的定义中使用。
    命令定义中的参数位置由 #1 指定,表示第一个参数。如果有多个参数,可以使用 #2#3 等类似的方式指定其他参数的位置。使用 [1] 表示该命令只接受一个参数,且位于第一个位置。

3、使用时遇到的几个问题

3.1 在使用时 \new 基本没用

实际在使用时用的都是 \new{} ,基本没用过 \new
一旦使用 \new 则发现后面的颜色全都改变了。
如果想要限制 \new 的作用范围,可写为

{\new
revised text.
}

但这样一来就用 \revise{} 就行了。

3.2 在遇到 equation 环境时前后空行会有问题

比如下面这种情况

\lipsum[1][3-5]\new{
\begin{equation}
\mathrm{d}\left( \frac{u}{v} \right) =\frac{v\mathrm{d}u-u\mathrm{d}v}{v^2}\left( v\ne 0 \right) 
\end{equation}
}

\lipsum[1][3-5]

会发现第二段文字和公式之间多一个空行,这是由于\color这个命令导致的。
如果第二段文字不另起一段,紧接着公式,则没有问题。
最后采用的方案是在修订内容后向上缩一行。即改为

\lipsum[1][3-5]\new{
\begin{equation}
\mathrm{d}\left( \frac{u}{v} \right) =\frac{v\mathrm{d}u-u\mathrm{d}v}{v^2}\left( v\ne 0 \right) 
\end{equation}
}
\vspace{-\baselineskip}

\lipsum[1][3-5]

4、扩展

4.1 定义一个带有多个参数的命令

如果想定义一个带有多个参数的命令,可以按照以下方式进行编写:

\newcommand*{\commandName}[num]{code}

在命令定义中,num 是参数的数量,可以是 1、2、3 等等。然后,可以使用 #1#2#3 等形式来引用不同位置的参数。

例如,如果你想定义一个命令 \highlight,它接受两个参数,分别表示要突出显示的文本和突出显示的颜色,可以这样编写:

\newcommand*{\highlight}[2]{{\textcolor{#2}{#1}}}

在这个例子中,\highlight 接受两个参数,第一个参数表示要突出显示的文本,第二个参数表示突出显示的颜色。然后,使用 #1#2 分别引用这两个参数,并以指定的颜色输出突出显示的文本。

现在,你可以在文档中使用 \highlight{Hello}{red} 来将 “Hello” 以红色突出显示。

如果命令需要更多的参数,只需将 [num] 中的 num 更改为所需的参数数量即可,并相应地在命令定义中使用 #1#2#3 等来引用这些参数。

4.2 其他可能的解决方案

1、使用 change 宏包
参考 https://www.codeleading.com/article/17215966945/

2、使用 latexdiff 宏包
参考 https://zhuanlan.zhihu.com/p/540820964?utm_id=0

你可能感兴趣的:(LaTeX,LaTeX,论文写作)