
我正在嘗試創建一個書法寫作範本。我希望它看起來像下面的圖片,但沒有邊距,也沒有標題(A4 紙)。我想要三種類型的線條:
- 水平線每隔1公分交替,深黑色。
- 水平線每隔 0.5 公分交替,淺灰色。它們基本上位於 1 厘米黑色線之間。
每 1 公分交替出現 55 度角線,紅色。如果該角度是一個變量,那就太好了,這樣我以後可以根據需要更改它。
這是我到目前為止能夠做的,但是由於我是基於直角坐標系繪製線條,所以我不知道如何將傾斜線的角度調整為 55 度。我基本上只需要解決這個問題;否則,我對我的結果感到滿意。
\documentclass[letterpaper]{article} %不包含「草稿」以渲染圖片 \usepackage{tikz} \usetikzlibrary{計算} \usepackage{逐字} \開始{文件} \pagestyle{空} \begin{tikzpicture}[記住圖片,疊加] \foreach \i in {1,2,3,...,30}{ \draw[black] ($(目前頁.西北)+(0,-\i)$) -- ($(目前頁.東北)+(0,-\i)$);} \foreach \i in {0.5,1.5,2.5,...,60}{ \draw[lightgray] ($(當前頁.西北)+(0,-\i)$) -- ($(當前頁.東北)+(0,-\i)$);} \foreach \i in {1,2,3,...,60}{ \draw[red] ($(目前頁.西南)+(0,-\i)$) -- ($(目前頁.東北)+(0,-\i)$);} \foreach \i in {0,1,2,3,...,60}{ \draw[red] ($(目前頁.西南)+(0,+\i)$) -- ($(目前頁.東北)+(0,+\i)$);} \結束{tikz圖片} \結束{文件}
這是我的輸出。
答案1
您可以使用極座標,例如(55:100cm)
。在下面的程式碼中,我根據所選角度和兩條連續斜線之間的\myAngle
距離計算要繪製的斜線的精確數量。\myDist
我的程式碼還計算這些行所需的最大長度。
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\newcommand*{\myDist}{1cm} % distance between consecutive oblique lines
\newcommand*{\myAngle}{55} % angle of said lines wrt horizontal, in degrees
% Distance between consecutive oblique lines, projected on the horizontal axis
\pgfmathsetlengthmacro{\horizIntervWidth}{\myDist/sin(\myAngle)}
% Length of the longest oblique lines we'll need. I add 10pt to be 100% safe
% with respect to rounding errors (the lines will be clipped anyway).
\pgfmathsetlengthmacro{\maxLength}{10pt + \paperheight/sin(\myAngle)}
% Number of oblique lines to draw
\pgfmathtruncatemacro{\maxIndex}{
round((\paperheight/tan(\myAngle) + \paperwidth)/\horizIntervWidth)}
\begin{document}
\begin{tikzpicture}[remember picture, overlay]
% Just to be sure we don't paint outside the page. :-)
\clip (current page.south west) rectangle (current page.north east);
\foreach \i in {1,2,...,30} {
\draw[black] ($(current page.north west)+(0,-\i)$) --
($(current page.north east)+(0,-\i)$);
}
\foreach \i in {0.5,1.5,...,60} {
\draw[lightgray] ($(current page.north west)+(0,-\i)$) --
($(current page.north east)+(0,-\i)$);
}
\foreach \i in {1,2,...,\maxIndex} {
\draw[red] ([xshift=-\i*\horizIntervWidth]current page.south east) --
+(\myAngle:\maxLength);
}
\end{tikzpicture}
\end{document}
答案2
這確實不是回答您的特定問題,但可以適應您與許多其他內建選項的draw=none
使用。Vertical Line Style
Vertical Line Style Alternate
筆記:
- 線條分為三種不同類型:水平線、垂直線和水平傾斜線。
- 傾斜角度可透過 進行設定
\SlantAngle
。 - 每種線條樣式都有一個套
\tikzset
用於每 n 條線條的備用樣式,並且每種線條樣式都有兩種與之關聯的線條樣式:主樣式和備用線條樣式。 - 邊框是可選的,可以透過設定、
\MarginTop
和\MarginBottom
來停用。\MarginLeft
\MarginRight
0.0cm
代碼:
%% Calligraphy Guide Lines
%% Peter Grill
%%
%% ---------------------- Note: May need to run this twice ---------------------
%%
%% --------------------------------------------------- Select Lines
%% ---------------------------------------------------------------- Horizontal Lines
\def\VerticalSkip{1.0cm}% 0.10cm through 2cm
\def\UseAltStyleEveryNthHorizontalLine{2}%
%% ---------------------------------------------------------------- Vertical Slant Lines
\def\HorizontalSlantSkip{1.0cm}%
\def\SlantAngle{55}% Degrees >30, < 60
\def\UseAltStyleEveryNthSlantLine{4}%
%% ---------------------------------------------------------------- Vertical Lines
\def\HorizontalSkip{2.66625cm}%
\def\UseAltStyleEveryNthVerticalLine{5}%
%% ---------------------------------------------------------------- Select Margins
\def\MarginTop{0.25cm}
\def\MarginBottom{0.25cm}
\def\MarginLeft{0.25cm}
\def\MarginRight{0.25cm}
%% ---------------------------------------------------------------- Select Paper
\def\Paper{a4paper}% letter | a4paper | a5paper, ....
\def\Orientation{portrait}%% portrait | landscape
%% -----------------------
\documentclass[\Paper, \Orientation]{article}% Version 1.1
\usepackage{tikz}
\usepackage{xstring}
\pagestyle{empty}
%% Select the line style. I prefer using the second one here and using the output underneath
%% the actual paper as guide lines. The first is better if you want to actually write on
%% top of the guide lines
%%
%% Few other options that can be applied here (last applied options override earlier ones).
%% solid
%% dotted, densely dotted, loosely dotted,
%% dashed, densely dashed, loosely dashed,
%% dash dot dot, densely dash dot dot, loosely dash dot dot,
%% loosely dashed,
%%
%% Custom line styles can be defined also be specifying the on/off patter:
%% dash pattern=on 2pt off 3pt on 4pt off 4pt
%%
%% To disable ANY lines use the draw=none as the last style.
%\tikzset{Line Style/.style={line width=1pt, densely dotted, gray, draw opacity=0.1}}
\tikzset{Line Style/.style={
line width=0.2pt,
solid,
gray,
draw opacity=0.5
}}
\tikzset{Horizontal Line Style/.style={
Line Style,
solid,
}}
\tikzset{Horizontal Line Style Alternate/.style={
Line Style,
line width=0.2pt,
dashed,
draw opacity=1.0,
}}
\tikzset{Slant Line Style/.style={
Line Style
}}
\tikzset{Slant Line Style Alternate/.style={
Line Style,
line width=0.2pt,
solid,
draw opacity=1.0,
red
}}
\tikzset{Vertical Line Style/.style={Line Style, line width=0.1pt}}
\tikzset{Vertical Line Style Alternate/.style={Line Style, line width=0.1pt}}
\tikzset{Border Line Style/.style={Line Style, thin}}
\newlength{\DeltaY}
\newlength{\TempLength}
\pgfmathtruncatemacro{\MaxHorizontalLines}{\paperheight/\VerticalSkip}
\pgfmathsetmacro{\TanSlantAngle}{tan(\SlantAngle)}
\pgfmathsetlength{\DeltaY}{\HorizontalSlantSkip*\TanSlantAngle}
\pgfmathtruncatemacro{\MaxSlantLinesX}{\paperwidth/\HorizontalSlantSkip}
\pgfmathtruncatemacro{\MaxSlantLinesY}{\paperheight/\DeltaY}
\pgfmathtruncatemacro{\MaxVerticalLines}{\paperwidth/\HorizontalSkip}
\newcommand*{\SetLineStyle}[4]{%
%% #1 = style name to set
%% #2 = default line style
%% #3 = line number
%% #4 = which lines get the alternate line style
\pgfmathtruncatemacro{\Remainder}{mod(#3,#4)}%
\ifnum\Remainder=0\relax
\tikzset{#1/.style={#2 Alternate}}%
\else
\tikzset{#1/.style={#2}}%
\fi
}%
\begin{document}%
\begin{tikzpicture}[
remember picture,
overlay,
shift=(current page.south west),% So that (0,0) is south west of paper
]
%% Clip to create the border
\clip (\MarginLeft,\MarginBottom) rectangle
(\paperwidth-\MarginRight,\paperheight-\MarginTop);
\foreach \y in {1,...,\MaxHorizontalLines} {% Horizontal guide lines
\SetLineStyle
{This Horizontal Line Style}{Horizontal Line Style}
{\y}{\UseAltStyleEveryNthHorizontalLine}
\begin{scope}[yshift=-\MarginTop]
\draw[This Horizontal Line Style]
(0pt,\paperheight-\y*\VerticalSkip) -- (\paperwidth,\paperheight-\y*\VerticalSkip)
;
\end{scope}
}
\foreach \x in {1,...,\MaxVerticalLines} {% Vertical guide lines
\SetLineStyle
{This Vertical Line Style}{Vertical Line Style}
{\x}{\UseAltStyleEveryNthVerticalLine}
\begin{scope}[xshift=\MarginLeft]
\draw[This Vertical Line Style]
(\x*\HorizontalSkip,0pt) -- (\x*\HorizontalSkip,\paperheight)
;
\end{scope}
}
\pgfmathsetlength{\TempLength}{\paperwidth*\TanSlantAngle}
\foreach \x in {0,...,\MaxSlantLinesX} {% Slant Lines starting along bottom of page
\SetLineStyle
{This Slant Line Style}{Slant Line Style}
{\x}{\UseAltStyleEveryNthSlantLine}
\draw[This Slant Line Style]
(\x*\HorizontalSlantSkip,0pt) -- ++(\paperwidth,\TempLength)
;
}
\foreach \y in {1,...,\MaxSlantLinesY} {% Slant Lines starting along left of page
\SetLineStyle
{This Slant Line Style}{Slant Line Style}
{\y}{\UseAltStyleEveryNthSlantLine}
\draw[This Slant Line Style]
(0pt,\y*\DeltaY) -- ++(\paperwidth,\TempLength)
;
}
%% Draw border
\draw [Border Line Style]
(\MarginLeft,\MarginBottom) rectangle
(\paperwidth-\MarginRight,\paperheight-\MarginTop);
\end{tikzpicture}%
\end{document}
答案3
另一種解決方案沒有calc
.
\documentclass[a4paper]{article} %do not include "draft" in order to render pictures
\usepackage{tikz}
%\usetikzlibrary{calc}
\usepackage{verbatim}
\begin{document}
\pagestyle{empty}
\begin{tikzpicture}[remember picture,overlay]
\foreach \i in {1,2,3,...,30}{
\draw[black] ([yshift=-\i cm]current page.north west) -- ++(0:\paperwidth);}
\foreach \i in {0.5,1.5,2.5,...,60}{
\draw[lightgray] ([yshift=-\i cm]current page.north west) -- ++(0:\paperwidth);}
\foreach \i in {1,2,3,...,60}{
\draw[red] ([xshift=\i cm]current page.north west) -- ++(235:2*\paperheight);}
\end{tikzpicture}
\end{document}
答案4
這是一個努力梅塔普斯特包裹在luamplib
.您可以使用 來編譯它lualatex
。
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
beginfig(1);
numeric r, u, v;
r = 55; % angle of lines (to horizontal)
u = 1cm; % horizontal spacing
v = 5mm; % vertical spacing
color base, mid, slant;
base = 1/4 white;
mid = 3/4 white;
slant = 3/4[red, white];
drawoptions(withpen pencircle scaled 1/4);
for x = -60 upto 60:
draw (left--right) scaled 80cm rotated r shifted (x * u, 0) withcolor slant;
endfor
for y = -30 upto 30:
draw (left--right) scaled 20cm shifted (0, y * 5mm) withcolor if odd y: mid else: base fi;
endfor
clip currentpicture to unitsquare shifted -(1/2, 1/2) xscaled 200mm yscaled 280mm;
endfig;
\end{mplibcode}
\end{document}
這會產生一個像這樣的頁面: