参考链接
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}{}
。
采用命令为
\textcolor{
命令用于将指定的文本
设置为指定的颜色
。这个命令可以用来在文档中设置局部文本的颜色。
\color{
命令用于在当前块设置颜色,直到遇到其他颜色声明。它会改变当前块所有内容的颜色,直到被其他颜色命令覆盖或重置。这种全局设置颜色的方式可以用于更大范围的文本段落,表格,图片,及公式。
解读一下上面提到的代码
% *** 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。\usepackage{color}
:导入color
宏包,以便在文档中使用颜色相关的命令。也可以使用xcolor
宏包替代该行,因为xcolor
扩展了color
宏包并提供了更多功能。
\makeatletter
:这一命令声明@
符号为LaTeX命令中的字母,从而可以在命令名称中使用@
。
\newcommand*{\new}{\@ifnextchar\bgroup{\new@}{\color{blue}}}
:创建了一个名为\new
的新命令。代码的逻辑如下:
\@ifnextchar\bgroup
:检查下一个字符是否为左花括号({
),即判断\new
命令是否带有参数。
如果\new
命令带有参数,则执行\new@
命令。
如果\new
命令没有参数,则将其标记为myColor。
\newcommand*{\new@}[1]{{\textcolor{blue}{#1}}}
:这是一个内部命令\new@
,用于在\new
命令带有参数时将参数标记为myColor。
\textcolor{blue}{#1}
将参数#1
(即带有参数的\new
命令中的文本)标记为myColor。\makeatother
:恢复@
符号的一般含义。
\newcommand
中的*
:
在LaTeX中,*
在\newcommand
命令中的作用是禁止创建带参数的命令。
具体来说,在\newcommand
命令中使用星号*
,即 \newcommand*{\command}{definition}
,会创建一个不带参数的命令。这意味着你只能在文档中直接使用\command
而不能使用\command{...}
这种带参数的形式。
相比之下,如果没有使用星号*
,即 \newcommand{\command}{definition}
,则可以创建带参数的命令,例如\command{...}
。
使用星号*
可以提供一种简便的方式来定义不带参数的命令,避免了在定义时必须考虑参数的复杂性。在某些情况下,不带参数的命令更适合特定的应用需求。
\new@}[1]
中的[1]
:
在给定的命令定义 \newcommand*{\new@}[1]{{\textcolor{blue}{#1}}}
中,[1]
的作用是指示该命令定义具有一个参数。
具体来说,这个命令定义了一个带有一个参数的新命令 \new@
。当你在文档中使用 \new@{text}
时,参数 text
的值将被传递给 \new@
中的 #1
,然后在命令的定义中使用。
命令定义中的参数位置由 #1
指定,表示第一个参数。如果有多个参数,可以使用 #2
、#3
等类似的方式指定其他参数的位置。使用 [1]
表示该命令只接受一个参数,且位于第一个位置。
实际在使用时用的都是 \new{}
,基本没用过 \new
。
一旦使用 \new
则发现后面的颜色全都改变了。
如果想要限制 \new
的作用范围,可写为
{\new
revised text.
}
但这样一来就用 \revise{}
就行了。
比如下面这种情况
\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]
如果想定义一个带有多个参数的命令,可以按照以下方式进行编写:
\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
等来引用这些参数。
1、使用 change
宏包
参考 https://www.codeleading.com/article/17215966945/
2、使用 latexdiff
宏包
参考 https://zhuanlan.zhihu.com/p/540820964?utm_id=0