这周我写了这个词:
\documentclass{book}
\usepackage{xcolor}
\definecolor{Monvert}{RGB}{229,36,36}
\definecolorseries{MONVERT}{rgb}{last}{Monvert}{black}
\resetcolorseries[15]{MONVERT}
\begin{document}
\chapter{Test}
\Huge
\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{s}\textcolor{MONVERT!!+}{y}\textcolor{MONVERT!!+}{c}\textcolor{MONVERT!!+}{h}\textcolor{MONVER
T!!+}{o}\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{a}\textcolor{MONVERT!!+}{t}\textcolor{MONVERT!!+}{h}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{l}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{g}\textcolor{MONVERT!!+}{y}
\end{document}
我的问题是:如果我想以同样的方式自定义章节和部分,我该怎么做?任何见解或解决方案都将不胜感激
答案1
初步版本,无\section
任何部分。如果章节标题包含宏而不是不可扩展的材料,则很有可能会失败。
\documentclass{book}
\usepackage{xcolor}
\definecolor{Monvert}{RGB}{229,36,36}
\definecolorseries{MONVERT}{rgb}{last}{Monvert}{black}
\resetcolorseries[50]{MONVERT}
\usepackage{xpatch}
\usepackage{pgffor}
\usepackage{xstring}
\usepackage{xparse}
\NewDocumentCommand{\shadetitle}{+m}{%
\StrLen{#1}[\titlelength]
\foreach \x in {1,...,\titlelength} {%
\textcolor{MONVERT!!+}{\StrChar{#1}{\x}}%
}%
}
\makeatletter
\xpatchcmd{\@makechapterhead}{\Huge \bfseries #1\par\nobreak}{\Huge \bfseries \shadetitle{#1}\par\nobreak}{}{}
\makeatother
\begin{document}
\chapter{Test it with a very long title}
\Huge
\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{s}\textcolor{MONVERT!!+}{y}\textcolor{MONVERT!!+}{c}\textcolor{MONVERT!!+}{h}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{a}\textcolor{MONVERT!!+}{t}\textcolor{MONVERT!!+}{h}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{l}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{g}\textcolor{MONVERT!!+}{y}
\end{document}
编辑一些改进版本
\documentclass{book}
\usepackage{xcolor}
\definecolor{Monvert}{RGB}{229,36,36}
\definecolorseries{MONVERT}{rgb}{last}{Monvert}{black}
\resetcolorseries[100]{MONVERT}
\usepackage{xpatch}
\usepackage{pgffor}
\usepackage{xstring}
\usepackage{xparse}
\usepackage{blindtext}
\NewDocumentCommand{\shadetitle}{+m}{%
\StrLen{#1}[\titlelength]%
\foreach \x in {1,...,\titlelength} {%
\textcolor{MONVERT!!+}{\StrChar{#1}{\x}}%
}%
}
\makeatletter
%\xpatchcmd{\@ssect}{\hskip #1\relax #5}{#4{\hskip #1\relax \shadetitle{#5}}}{\typeout{Patch success}}{\typeout{Patch failure}}
% Does not work so far :-(
%\xpatchcmd{\@ssect}{\@svsechd{#4{\hskip #1\relax #5}}}{\@svsechd{#4{\hskip #1\relax \shadetitle{#5}}}}{\typeout{Patching ssect}}{}
% Patching the section header command
\xpatchcmd{\@sect}{\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
}}{%
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec \shadetitle{#8}}%
}}{}{}
\xpatchcmd{\@sect}{\interlinepenalty \@M #8\@@par}{ \interlinepenalty \@M \shadetitle{#8}\@@par}{}{}
\xpatchcmd{\@makechapterhead}{\Huge \bfseries #1\par\nobreak}{\Huge \bfseries \shadetitle{#1}\par\nobreak}{}{}
\xpatchcmd{\@makeschapterhead}{\Huge \bfseries #1\par\nobreak}{\Huge \bfseries \shadetitle{#1}\par\nobreak}{}{}
\xpatchcmd{\@makechapterhead}{\huge\bfseries \@chapapp\space \thechapter}{\huge\bfseries \shadetitle{\@chapapp}\space \shadetitle{\thechapter}}{}{}
\makeatother
\begin{document}
\chapter{Test it with a very title}
\section{And a shorter title}
\Huge
\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{s}\textcolor{MONVERT!!+}{y}\textcolor{MONVERT!!+}{c}\textcolor{MONVERT!!+}{h}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{P}\textcolor{MONVERT!!+}{a}\textcolor{MONVERT!!+}{t}\textcolor{MONVERT!!+}{h}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{l}\textcolor{MONVERT!!+}{o}\textcolor{MONVERT!!+}{g}\textcolor{MONVERT!!+}{y}
\chapter*{Some other chapter}
\section*{Some other section}
\end{document}
我很清楚,这只是一个 hack。当然,肯定有更好的方法。最有可能的是,最好将标记着色,而不是尝试识别输入中的每个字符。