我通常用 LaTeX 来记录学校的笔记,我发现这样更容易集中注意力于段落之间颜色发生变化的文本,而这用老式的笔和纸很容易做到。
但是,在 LaTeX 上,有没有一种方法可以让编译器在渲染我的 pdf 时自动执行此操作并改变随机段落的颜色?
答案1
xcolor
如果您使用 pdfTeX 或 LuaTeX(不是 XeTeX)作为引擎,则不需要外部包(除了)。
\documentclass{article}
\usepackage{everyhook,xcolor}
\newcommand{\randomcolor}{%
\definecolor{randomcolor}{RGB}
{
\pdfuniformdeviate 256,
\pdfuniformdeviate 256,
\pdfuniformdeviate 256
}%
\color{randomcolor}%
}
\PushPostHook{par}{\randomcolor}
\begin{document}
\section{First}
One
Two
Three
\section{Second}
Four
Five
Six
\end{document}
原语后面\pdfuniformdeviate
必须跟一个整数,并扩展为 0(含)和给定数字(不含)之间的均匀分布的随机整数。
使用everyhook
比直接玩更安全\everypar
。
答案2
解决方案构想
在每个段落的开头,生成三个0到255之间的随机数,使用它们作为RGB参数来生成颜色,并在段落的开头应用该颜色。
代码
\documentclass{article}
\usepackage{insdljs}
\usepackage{rangen}
\usepackage{xcolor}
\usepackage{lipsum}
\def\randomlycolorparagraph{%
% Get random color paramaters
\RandomZ{\R}{0}{255}%\R
\RandomZ{\G}{0}{255}%\G
\RandomZ{\B}{0}{255}%\B
% Generate random color
\definecolor{randomcolor}{RGB}{\R,\G,\B}
% Use color
\color{randomcolor}}
\def\randomlycoloreveryparagraph{\everypar={\randomlycolorparagraph}}
\AtBeginDocument{\randomlycoloreveryparagraph}
\begin{document}
\lipsum[1-40]
\end{document}
解决方案详细信息
该解决方案使用兰根包,特别是生成三个介于 0 到 255 之间的随机数的命令。然后,这三个数字在命令\RandomZ
中用作 RGB 值
\definecolor
彩色包裹。
以上所有内容都捆绑在一个宏中,该宏使用命令应用于段落的开头\everypar
。
我更进一步,将 和 连接起来
\everypar
。\AtBeginDocument
因此,随机颜色效果从文档的开头开始。如果您希望随机效果从某个中间点开始,请将命令放在
\randomlycoloreveryparagraph
您想要的位置随机的效果开始。
输出
您的输出可能看起来不同。颜色应该是随机的。
尖端
如果您希望 RGB 值在特定范围内,请在命令中调整范围值\RandomZ
。