我想更改文档中特定环境的颜色。例如,无论我在 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}