![如何制作以二进制矩阵码为背景的标题?](https://linux22.com/image/336186/%E5%A6%82%E4%BD%95%E5%88%B6%E4%BD%9C%E4%BB%A5%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%9F%A9%E9%98%B5%E7%A0%81%E4%B8%BA%E8%83%8C%E6%99%AF%E7%9A%84%E6%A0%87%E9%A2%98%EF%BC%9F.png)
我尝试使用 tikz 为每一页生成一个带有二进制矩阵代码的标题。例如:
目前我的工作代码
\RequirePackage[svgnames]{xcolor}
\RequirePackage{tikz}
\RequirePackage{kpfonts}
\RequirePackage[explicit]{titlesec}
\newcommand*\chapterlabel{}
\titleformat{\chapter}
{\gdef\chapterlabel{}
\normalfont\sffamily\Huge\bfseries\scshape}
{\gdef\chapterlabel{\thechapter\ }}{0pt}
{\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-3cm] at (current page.north west)
{
\begin{tikzpicture}[remember picture, overlay]
\draw[fill=Black] (0,0) rectangle (\paperwidth,3cm);
\foreach \x in {0.0,2.0, ..., 25.0}{\foreach \y in {1, ..., 4.0} \node[draw=none,color=green] at (\x,\y) {\tiny A};};
\foreach \x in {1.0,3.0, ..., 25.0}{\foreach \y in {1, ..., 4.0} \node[draw=none,color=cyan] at (\x,\y) {\tiny T};};
\node[anchor=east,xshift=.9\paperwidth,rectangle,rounded corners=20pt,inner sep=11pt,fill=MidnightBlue]
{\color{white}\partlabel#1};
\end{tikzpicture}
};
\end{tikzpicture} } \titlespacing*{\chapter}{0pt}{50pt}{-60pt}
编辑:最后我找到了一种显示 1 和 0 矩阵的正确方法。我需要找到如何随机化要打印的数字,以及当 0 为白色时,1 为绿色。我更新了代码,而不是图片
答案1
以下是使用该功能的建议random
:
\documentclass[svgnames]{report}
\usepackage{tikz}
\colorlet{Random0}{white}
\colorlet{Random1}{green}
\usepackage{kpfonts}
\usepackage[explicit]{titlesec}
\newcommand*\chapterlabel{}
\titleformat{\chapter}
{\gdef\chapterlabel{}
\normalfont\sffamily\Huge\bfseries\scshape}
{\gdef\chapterlabel{\thechapter\ }}{0pt}
{\begin{tikzpicture}[remember picture,overlay,shift={(current page.north west)},yshift=-3cm]
\path[fill=Black] (0,0) rectangle(\paperwidth,3cm);
\foreach \x in {0,1, ..., 70}{
\foreach \y in {0, ...,7}
\pgfmathsetmacro\Random{random(0,1)}
\node[draw=none,color=Random\Random,anchor=south west,font=\tiny,xshift=-.05cm]
at (\x*.3cm,\y*.33cm)
{\Random};};
\node[anchor=east,xshift=.9\paperwidth,rectangle,
rounded corners=20pt,inner sep=11pt,
fill=MidnightBlue]
{\color{white}\chapterlabel#1};
\end{tikzpicture}
}
\titlespacing*{\chapter}{0pt}{50pt}{-60pt}
\begin{document}
\chapter{First chapter}
\end{document}
答案2
为了好玩,这里是 ConTeXt 中的一个解决方案。一些备注:
- 我使用的
OCR-A
字体与电影中使用的字体相匹配。 - 我使用三种色调的绿色。颜色在色彩空间中定义
HSV
,三种颜色只是具有不同的饱和度值。 - 为了方便使用,我使用进行排版。也
TABLE
可以使用 简单。\halign
- 对于ConTeXt用户来说,此代码还展示了如何使用
interfaces.definecommand
函数在lua端定义宏。
\definecolor[green] [h=120,s=1,v=0.75]
\definecolor[darkgreen] [h=120,s=1,v=0.5]
\definecolor[brightgreen][h=120,s=1,v=1]
\startsetups matrix
\setupTABLE[style={\definedfont[name:ocraextended]}, background=color, backgroundcolor=black]
\setupTABLE[frame=off, offset=none]
\stopsetups
\setupbodyfont[dejavu]
\startluacode
local colors = { "green", "darkgreen", "brightgreen" }
local showNumber = function()
local color = math.random(3)
local number = math.random(2) - 1
context.style({color=colors[color]}, number)
end
local printMatrix = function(rows,cols)
context.bTABLE{setups="matrix"}
for i = 1,cols do
context.bTR()
for j = 1,rows do
context.bTD()
showNumber()
context.eTD()
end
context.eTR()
end
context.eTABLE()
end
interfaces.definecommand {
name = "printMatrix",
arguments = {
{ "option", "number" },
{ "option", "number" },
},
macro = printMatrix,
}
\stopluacode
\starttext
\startTEXpage[offset=1mm]
\printMatrix[40][40]
\stopTEXpage
\stoptext
这使