如何更改整个文档某些特定环境的颜色

如何更改整个文档某些特定环境的颜色

我想更改文档中特定环境的颜色。例如,无论我在 tex 文件中发现逐字环境或方程式环境出现在哪里。使用一些全局设置,我想将其更改为某些特定的颜色效果,并且这些效果应仅限于该文档。

例如,所有逐字文本的背景都应为黄色。所有数学模式的文本颜色都应为红色。

对每个文本执行此操作或修改环境是可能的,但我感兴趣的是在序言中设置一次。

答案1

没有通用的解决方案。这取决于环境。有些有专用的钩子,其他的则必须重新定义。对于 verbatim,您可以例如更改\verbatim@font。对于 math,您可以使用everymath- 但正如您在示例中看到的,它可能会产生副作用,因为 math 有时会在意想不到的地方使用,例如 url。

\documentclass{article}
\usepackage{xcolor, url}
\makeatletter
\renewcommand\verbatim@font{\color{red}\normalfont\ttfamily}
\makeatletter

\everymath{\color{green}}
\begin{document}
blub

\begin{verbatim}
abx
\end{verbatim}

blub


$x=y$

bla

\(sum=c\)

\url{www.abc}
\end{document}

答案2

对于逐字材料,我想展示另外两种解决方案:

第一个是包fancyvrb,您可以在其中设置活动字符(commandchars)的选项,并以这种方式Verbatim让环境内部执行宏,并且您可以使用 定义自定义的逐字环境\DefineVerbatimEnvironment

第二个不仅适用于逐字环境,而且适用于通用环境:包etoolbox为环境提供钩子,请参见下面的示例\BeforeBeginEnvironment\AfterEndEnvironment。我为此使用了 fancyvrb 的 Verbatim 环境:

\documentclass{article}

\usepackage[english]{babel} % needed for "blindtext"
\usepackage[pangram]{blindtext}

\usepackage{xcolor}

\usepackage{fancyvrb}
\DefineVerbatimEnvironment{ColorVerbatim}{Verbatim}%
  {formatcom=\color{purple},commandchars=\\\{\}}

\usepackage{etoolbox}
\BeforeBeginEnvironment{Verbatim}{\begingroup\color{green}}%
\AfterEndEnvironment{Verbatim}{\endgroup}%

\begin{document}

\blindtext[1]

\begin{Verbatim}
Verbatim text with by hook predefined colour:
This blindtext is no pangram.
\end{Verbatim}

\begin{Verbatim}[commandchars=\\\{\}]
Verbatim text with individual colour settings:
{\color{red}\blindtext[1]}
\textcolor{blue}{\blindtext[1]}
\end{Verbatim}

\begin{ColorVerbatim}
Custom verbatim environment with predefined colour:
\blindtext[1]

... and with individual colour settings:
\textcolor{orange}{\blindtext[1]}
{\color{teal}\blindtext[1]}
\end{ColorVerbatim}

\blindtext[1]

\end{document}

示例的输出

相关内容