我正在尝试设计一个可以存储多种配色方案的 tex 文件(我会一次性定义),我可以一次“激活”一个配色方案,以便快速为我的文档分配配色方案。这可能不太清楚,所以这里是我的代码:
\usepackage{xcolor}
\usepackage{sectsty}
%Current scheme
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{4477EE}
%_____________________________________________________________
%Existing schemes
\begin{comment}
%orange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
%blue
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
\end{comment}
%______________________________________________________________
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
在这里,您可以看到我的所有颜色都命名为“belux”和“underbelux”(这没有任何意义),这样当我想更改配色方案时,我不必手动更改 \xxxfont{\color{belux}} 说明中的颜色。为此,只需取消注释活动配色方案(在“活动方案”部分)。其他方案位于注释部分,以便于访问,并确保编译器不会编译所有方案。
目前的工作方式是,我必须将方案特定的“belux”颜色定义命令从“现有方案”部分复制并粘贴到“当前方案”部分。这并不是我想要的工作方式,因为从长远来看,我可能会创建许多其他方案。
我想改变这一点,以便每个方案都有一个定义的参数(一个数字或名称),我可以在本文档的开头“调用”该参数,并且当“调用”时,该参数将取消注释该特定方案的 \definecolor 命令,同时注释其余命令。
它的工作方式类似于 Java 切换指令:
switch (activescheme){
case orange :
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
case blue :
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
default :
do nothing
}
好吧,这不是正确的 Java,但它可能会让您了解我希望它具有的结构。我会更改 activescheme 参数的值,以便只解锁一种配色方案,而其他配色方案将被忽略。
我不熟悉\ifxxx
...\fi
结构,但我认为我必须为每个方案定义一个布尔值,因此在文件开头有许多布尔值定义。以下是我根据我目前对此结构的了解可以做的:
\usepackage{xcolor}
\usepackage{sectsty}
\newif\ifblue
\newif\iforange
\bluetrue
\orangefalse
%_____________________________________________________________
%Existing schemes
%orange
\iforange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
\fi
%blue
\ifblue
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
\fi
%______________________________________________________________
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
这将是难以管理的,我应该创建多个配色方案。
所以,我的问题是:有没有其他方法可以使用\ifxxx
...\fi
结构来让我创建我想要的结构,或者是否有其他结构可以做到这一点?
如果您能提供任何帮助都将不胜感激,很抱歉问题这么长;)
答案1
正如第 1 页所述comment
commentable
文档,您可以根据需要定义任意数量的环境,只需包含\includecomment{name of environment}
或\excludecomment{name of environment}
选择或取消选择文档中的相应行即可。
通过它们您可以声明任意颜色组合的环境
\begin{orange}
%orange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
\end{orange}
并将 或 不 与\includecomment{orange}
或一起使用\excludecomment{orange}
。
\documentclass{book}
\usepackage{xcolor}
\usepackage{sectsty}
\usepackage{comment}
%Current scheme
\definecolor{belux}{HTML}{FF3366}
\definecolor{underbelux}{HTML}{EE4477}
%_____________________________________________________________
%Existing schemes
%leave one uncommented
%\includecomment{orange}
\excludecomment{orange}
%leave one uncommented
%\includecomment{blue}
\excludecomment{blue}
\begin{orange}
%orange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
\end{orange}
\begin{blue}
%blue
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
\end{blue}
%______________________________________________________________
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
\begin{document}
\chapter{First chapter}
\section{First section}
\begin{itemize}
\coloritem{A}
\coloritem{B}
\end{itemize}
\end{document}
使用前面代码中的\include...
-命令的几种组合,我们得到:\exclude...
更新:
在深入研究了 CTAN 之后,我发现了一个名为布尔表达式它定义了一个switch
条件。我不知道这个包,也不知道是否有更好的选择。
在这种情况下,每个颜色集都可以与用 定义的整数相关联counter
。
\newcounter{myColorSelector}
\setcounter{myColorSelector}{5}
\switch[\value{myColorSelector}]
\case{=1}%orange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
\case{=2}%blue
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
\otherwise%default
\definecolor{belux}{HTML}{FF3366}
\definecolor{underbelux}{HTML}{EE4477}
\endswitch
完整代码
\documentclass{book}
\usepackage{xcolor}
\usepackage{sectsty}
\usepackage{boolexpr}
%_____________________________________________________________
%Existing schemes
\newcounter{myColorSelector} \setcounter{myColorSelector}{5}
\switch[\value{myColorSelector}]
\case{=1}%orange
\definecolor{belux}{RGB}{189,79,0}
\definecolor{underbelux}{RGB}{237,127,16}
\case{=2}%blue
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{3366FF}
\otherwise%default
\definecolor{belux}{HTML}{FF3366}
\definecolor{underbelux}{HTML}{EE4477}
\endswitch
%______________________________________________________________
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
\begin{document}
\chapter{First chapter}
\section{First section}
\begin{itemize}
\coloritem{A}
\coloritem{B}
\end{itemize}
\end{document}
答案2
我会使用键值接口来解决此问题,以完成大部分繁重的工作。此方法的优点是您可以在任何地方定义新方案,并且单个文档可以根据需要使用多个方案(尊重分组/范围)。
有多个keyval
包,代码可能比我下面展示的还要花哨,但这里有一个可以完成的简单示例。宏\definescheme
用于创建一个方案,用法如下:
\definescheme{<scheme-name>}{<belux-model>}{<belux-spec>}{<underbelux-model>}{<underbelux-spec>}
<scheme-name>
定义方案后,可以使用宏在文档中的任何位置选择\setscheme{<scheme-name>}
该方案。方案选择将从设置点应用到组末尾。
下面的简单示例说明了这一点。没有错误检查代码,任何使用键设置的值(例如,,\setscheme{orange=5}
其中5
是值)都会被默默丢弃。如果需要,可以扩展代码以将值用于某些特殊用途。
代码如下:
\documentclass{book}
\usepackage{xcolor}
\usepackage{sectsty}
\usepackage{keyval}
%key-handling interface
\makeatletter
\def\definescheme#1#2#3#4#5{%
\define@key{myschemes}{#1}[]{%
\definecolor{belux} {#2}{#3}%
\definecolor{underbelux}{#4}{#5}%
}%
}%
\makeatother
\def\setscheme#1{\setkeys{myschemes}{#1}}
%Default scheme
\definecolor{belux}{HTML}{3366FF}
\definecolor{underbelux}{HTML}{4477EE}
%_____________________________________________________________
%Existing schemes
\definescheme{orange}{RGB}{189,79,0}{RGB}{237,127,16}
\definescheme{blue}{HTML}{3366FF}{HTML}{3366FF}
\definescheme{red}{RGB}{255,0,0}{RGB}{237,0,0}
%______________________________________________________________
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
\begin{document}
\chapter{First chapter}
\section{First section}
\begin{itemize}
\coloritem{A} Test
{ % scheme setting can obey grouping if desired
\setscheme{orange}
\coloritem{B} Test
}
\coloritem{C} Test
\end{itemize}
\setscheme{red}
\section{Red section}
\subsection{Also red}
\setscheme{blue}
\subsubsection{Now blue}
\end{document}
以及相应的输出:
答案3
尽管它很简短,我还是把这个作为答案。有时最不复杂的事情就是最好的事情,也是最可扩展的事情。
我只需创建一组文件,每个方案一个。在每个文件中定义您想要的颜色。
然后只需在文件中包含一行
\输入{colorschemepurple.tex}
答案4
这就是宏的用途。;-)
\documentclass{report}
\usepackage[paperwidth=8cm,paperheight=13cm]{geometry}
\usepackage{xcolor}
\usepackage{sectsty}
\newcommand{\currentscheme}{%
\definecolor{belux}{HTML}{3366FF}%
\definecolor{underbelux}{HTML}{4477EE}%
}
\newcommand{\orangescheme}{%
\definecolor{belux}{RGB}{189,79,0}%
\definecolor{underbelux}{RGB}{237,127,16}%
}
\newcommand{\bluescheme}{%
\definecolor{belux}{HTML}{3366FF}%
\definecolor{underbelux}{HTML}{3366FF}%
}
%Color selection for each header
\chapterfont{\color{belux}}
\sectionfont{\color{belux}}
\subsectionfont{\color{belux}}
\subsubsectionfont{\color{underbelux}}
\newcommand{\coloritem}[1]{\item[\textcolor{belux}{[#1]}]}
\newcommand{\undercoloritem}[1]{\item[\textcolor{underbelux}{[#1]}]}
\currentscheme
\begin{document}
\chapter{Title}
\section{Title}
\subsection{Title}
\subsubsection{Title}
%%% just for testing
\orangescheme
\chapter{Title}
\section{Title}
\subsection{Title}
\subsubsection{Title}
\end{document}