我有以下设置在 a4paper 中生成横格纸背景(从 texblog 修改并从此站点回答)
我想使这个代码更加不受纸张大小的影响。
for 循环中的值“28”适用于这种纸张尺寸(A4),但对于其他纸张尺寸或方向(横向/纵向),需要进行调整。
我猜我可以将 \paperheight 放在 for 循环中的某个位置,但我不知道如何在 \draw 之后将该值(以英寸或厘米为单位)转换为(坐标单位)。
或者也许用page.north west
和进行算术运算page.south west
,如果可能的话。
是的,我知道,我可以手动修改它们(在 a3paper 中工作时在 for 循环中将值 28 更改为 38),但我对更自动化的解决方案感兴趣。
简而言之:我已在代码中对此进行了大量\usepackage{geometry}
注释,并希望做出一个\mygraphpaper
适用于所有注释的定义。
我想要实现的布局文档:没有左/右边距,x
顶部和底部边距相同
\documentclass{article}
\usepackage{tikz}
%\usepackage[landscape,a3paper]{geometry}
\usepackage[a4paper]{geometry}
%\usepackage[landscape,a5paper]{geometry}
%\usepackage[a5paper]{geometry}
%\usepackage[landscape,paperheight=8.17in,paperwidth=6.32in,top=1in,bottom=1in,right=1in,left=1in]{geometry}
\usetikzlibrary{calc}
\def\mygraphpaper{%
\begin{tikzpicture}
\foreach \i in {4,5,...,28}{
\draw[gray] ($(current page.north west)+(0,-\i)$) -- ($(current page.north east)+(0,-\i)$);}
\end{tikzpicture}%
}
\usepackage{background}
\backgroundsetup{
angle=0,
contents=\mygraphpaper,
color=black,
scale=1,
}
\begin{document}
\pagenumbering{gobble}
$\,$
\end{document}
答案1
对于两个参数,其中#1
代表第一条水平线到页面顶部的距离,以及#2
到页面底部的最小距离,您可以使用\mygraphpaper
如下定义
\newcommand*\mygraphpaper[2]{%
\begin{tikzpicture}[remember picture,overlay]
\foreach[parse=true] \i in {0,...,(\paperheight-(#1)-(#2))/1cm}{
\draw[gray] ([yshift={-\i cm-(#1)}]current page.north west) -- ++(right:\paperwidth);}
\end{tikzpicture}%
}
请注意,我已经使用了rememer picture
,overlay
以便特殊current page
节点能够被正确识别,并且我们不必处理background
决定放置该内容的任何位置。
但请注意,所everypage
使用的包everypage
已被弃用。
使用过去两年的 LaTeX 版本,您可以(应该)使用钩子shipout/background
,它充当picture
原点位于页面左上角的线。由于您只绘制水平线,因此您可以直接以这种方式绘制,而无需使用 PGF/TikZ
通过与之前相同的数学运算,我们可以得到所需的迭代次数\multiput
。
代码 (TikZ + background
/ everypage
)
\documentclass{article}
\usepackage{tikz}
%\usepackage[landscape,a3paper]{geometry}
\usepackage[a4paper]{geometry}
%\usepackage[landscape,a5paper]{geometry}
%\usepackage[a5paper]{geometry}
%\usepackage[landscape,paperheight=8.17in,paperwidth=6.32in,top=1in,bottom=1in,right=1in,left=1in]{geometry}
\usetikzlibrary{calc}
\newcommand*\mygraphpaper[2]{%
\begin{tikzpicture}[remember picture,overlay]
\foreach[parse=true] \i in {0,...,(\paperheight-(#1)-(#2))/1cm}{
\draw[gray] ([yshift={-\i cm-(#1)}]current page.north west) -- ++(right:\paperwidth);}
\end{tikzpicture}%
}
\usepackage{background}
\backgroundsetup{
angle=0,
contents=\mygraphpaper{3.5cm}{5cm},
color=black,
scale=1,
}
\begin{document}
\pagenumbering{gobble}
$\,$
\end{document}
代碼 ( shipout/background
+ picture
)
\documentclass{article}
%\usepackage[landscape,a3paper]{geometry}
\usepackage[a4paper]{geometry}
%\usepackage[landscape,a5paper]{geometry}
%\usepackage[a5paper]{geometry}
%\usepackage[landscape,paperheight=8.17in,paperwidth=6.32in,top=1in,bottom=1in,right=1in,left=1in]{geometry}
\usepackage{xcolor}
\newcommand*\mygraphpaper[2]{%
\color{gray}
\setlength\unitlength{1cm}
\linethickness{.4pt}
\multiput(0,-#1)(0,-1){\fpeval{1+trunc((\paperheight-#1cm-#2cm)/1cm,0)}}{%
\line(1,0){\paperwidth}
}
}
\AddToHook{shipout/background}{\mygraphpaper{3.5}{5}}
\begin{document}
\pagenumbering{gobble}
$\,$
\end{document}
答案2
您可以使用grid
TikZ 中的操作(负值(或零)xstep
将删除垂直线,因此您只得到水平规则):
\documentclass{article}
\usepackage{tikz}
%\usepackage[landscape,a3paper]{geometry}
\usepackage[a4paper]{geometry}
%\usepackage[landscape,a5paper]{geometry}
%\usepackage[a5paper]{geometry}
%\usepackage[landscape,paperheight=8.17in,paperwidth=6.32in,top=1in,bottom=1in,right=1in,left=1in]{geometry}
\usetikzlibrary{calc}
\def\mygraphpaper{%
\begin{tikzpicture}[remember picture]
\draw[ystep=1cm, xstep=-1cm, gray] ([yshift=-2cm]current page.north west) grid ([yshift=2cm]current page.south east);
\end{tikzpicture}%
}
\usepackage{background}
\backgroundsetup{
angle=0,
contents=\mygraphpaper,
color=black,
scale=1,
}
\begin{document}
\pagenumbering{gobble}
$\,$
\end{document}