## 设计一张书法作品纸----保姆级教程 我要设计的是这样的一张书法A4作品纸: {{:undefined:shufazuopin1.jpg?400|}} ### 1 设置页面尺寸 可以设置页面大小,设置页边距,我设置都是0cm。 ```latex \documentclass[a4paper]{ctexart} % A4纸,默认还可写中文 \usepackage{tikz} %用于画图的,这个很关键。 \usepackage[top=0cm, bottom=0cm, left=0cm, right=0cm]{geometry} ``` ### 2 找标准坐标点。 这个图比较简单,只用找到页面的中线就好,也就是中心的 X 坐标。用A4纸的21cm*29.7cm ,如果直接21cm除以 2 好像不行。 我用的方法是,笨方法,对着屏幕用尺子量的 ```latex %pt转化成 cm 单位,求中线的时候好像要-0.75 \pgfmathparse{\textwidth / 28.5} %把 pt 转化成 cm 单位 \let\mywd\pgfmathresult %纸张的宽度 \pgfmathparse{\textheight/ 28.5} \let\myht\pgfmathresult %纸张的高度 \pgfmathparse{\textwidth / 28.5/2-0.75} \let\mymid\pgfmathresult %中心点的 X 坐标位置 ``` ### 3 定义颜色: 需要两个颜色,一个是左右长方块的颜色,一个方格的颜色: ```latex \definecolor{coloredge}{RGB}{211, 209, 171} % 边缘颜色 \definecolor{colorgezi}{RGB}{200, 199, 163} %画格子的线条颜色 ``` ### 4 两个背景图: 我是用屏幕截图后,转化成 jpg 文件的。 一个是方格背景图bggezi.jpg,一个是黑色装饰边bgmid.jpg。保存到当前目录下的子目录 images 目录下。 ```latex % 指定图片的路径 \def\bggezi{images/bggezi.jpg} \def\bgmid{images/bgmid.jpg} ``` ### 5 中间的绿色: 基本原理是,把那张背景图片bggezi排列在页面中间的长方形中。 要注意坐标的规律: X是从左往右,逐渐增大;Y 是从上往下逐渐减小,所以页面左上角是(0,0),右下角是(mywd, -myht) 为了覆盖整个页面,Y 的起始和结束位置有些冗余没关系。而且,和每张背景图不一样,每一次循环Y 的高度可以调节,不要大于图片本身的高度就好。 ```latex \newcommand{\gezi}{1.5} % 设置格子的大小,单位 cm \pgfmathparse{\gezi * 5} \let\imgwd\pgfmathresult %定义背景图填充的宽度 % 重复铺满背景中间的图片 \foreach \y in {-1,0, 1, ..., 15} { % 根据需要调整数字 \node[anchor=north west] at (\mymid - \imgwd, -\y*2) { \includegraphics[width=\imgwd cm]{\bggezi} }; \node[anchor=north west] at (\mymid, -\y*2) { \includegraphics[width=\imgwd cm]{\bggezi} }; } ``` 此时的效果如下了: {{:jsb:latex:step1.jpg?400|}} ### 6 画格子 这一步最简单了,代码如下: ```latex %中间画格子 \pgfmathparse{-\myht +1} \let\btstart\pgfmathresult %设置格子和页面底部的距离 1cm,那 Y 坐标就是-\myht + 1 \pgfmathparse{\mymid -\gezi*4.5} \let\leftstart\pgfmathresult %设置格子左侧的 起始坐标中心线减去4 个半格子长度。 X = \mymid -1.5*4.5 \foreach \x in {0, 1, ..., 8} { % 9 个横向方格 \foreach \y in {0, 1, ..., 14} { % 15 个纵向方格 \draw[colorgezi, line width=1pt] (\leftstart+\x*\gezi, \btstart + \y*\gezi) rectangle ++(\gezi, \gezi); } } ``` 现在效果如下: {{:jsb:latex:step2.jpg?400|}} ### 7 画两侧方块 这一步也很简单,左右画方块有些冗余没关系,确保页面上都被覆盖。 ```latex \pgfmathparse{\mymid -\gezi*4.5 -0.5} \let\leftrect\pgfmathresult %定义左侧方块的最右 X坐标 \pgfmathparse{\mymid +\gezi*4.5+0.5} \let\rightrect\pgfmathresult %定义右侧方块最左 X 坐标。 \fill[coloredge] (\leftrect, 1) rectangle (\mymid-15, -\myht); \fill[coloredge] (\rightrect, 1) rectangle (\mymid+15, ``` 效果如图: {{:jsb:latex:step3.jpg?400|}} } ### 8 增加长条装饰 这一步稍微遇到了些困难,因为起始位置好像不太准,不过问题不大,所见即所得,多调试几次,手工调整就好了 ```latex %左右装饰图片,此处的尺寸好像不太明白,根据效果手工调整。 \newcommand{\geziwd}{0.3} %装饰图片的宽度 \foreach \y in {-1,0, 1, ..., 10} { % 根据需要调整数字 \node[anchor=north east] at (\leftrect+\geziwd, -\y*3) { \includegraphics[width=\geziwd cm]{\bgmid} }; %north east 表示图片的坐标右上对齐 \node[anchor=north west] at (\rightrect-\geziwd, -\y*3) { \includegraphics[width=\geziwd cm]{\bgmid} }; %north west 表示图片的坐标左上对齐 } ``` 效果图: {{:undefined:shufazuopin1.jpg?400|}} ### 总结和其他 1. 应该还可以再简化代码,特别是用`\node`填充图片,我也不是很熟悉,只是问了 AI,然后修改的。 1. 有个优化想法:可以第一步,把整个背景设置成浅绿色,然后再把中间的绿色方格画好就可以覆盖了,不用再画左右的方块了!这样的话,效率高了很多,也不容易出错。 1. 这个作品纸,只有左右对称,不需要 Y 轴的中线,如果上下对称,可以寻找 Y 的中线,类似设置 mymid一样。 1. 线条颜色和背景颜色,不那么容易设置。mac 电脑没法看到图片的 RGB 颜色,我用 python 写了段代码,直接读取图片颜色的 RGB 值。如果你有其他办法,也可以代替。 1. 代码和图片下载: {{ :jsb:latex:zuopinzhi.zip |}}