我尝试创建一个具有两种页面框架样式的双列文档。
我尝试定义两种页面样式:第一种的几何形状是左边距为 3.2 厘米,并且会有两个方框和一个用 tikz 绘制的大框架,就像目标中那样。我会使用\thispagestyle
命令来定义第一页的样式。
第二种页面样式将是通用的页面样式,即,第一种之后的每个页面样式都将是一个具有 1cm 页边距的大框架以及一个缩放的几何图形。
我的尝试没有成功,只是文本溢出了框架。
分数维:
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage[pagestyles,explicit]{titlesec}
\geometry{left=3.2cm,right=1.2cm,top=1.2cm,bottom=1.2cm,footskip=0.7cm,landscape,twocolumn}
\usetikzlibrary{calc}
\newpagestyle{firstpagestyle}[]{%
\begin{tikzpicture}[overlay,remember picture]
\draw[line width=3pt]($(current page.north west)+(3cm,-1cm)$) rectangle ($(current page.south east)+(-1cm,1cm)$);
\draw[]($(current page.north west)+(1cm,-1cm)$) rectangle ($(current page.south west)+(2cm,3cm)$);
\draw[]($(current page.south west)+(1cm,1cm)$) rectangle ($(current page.south west)+(2cm,2.5cm)$);
\end{tikzpicture}
}
\newpagestyle{generalpagestyle}[]{%
\begin{tikzpicture}[overlay,remember picture]
\draw[line width=3pt]($(current page.north west)+(1cm,-1cm)$) rectangle ($(current page.south east)+(-1cm,1cm)$);
\end{tikzpicture}
\newgeometry{left=1.2cm,right=1.2cm,top=1.2cm,bottom=1.2cm,footskip=0.7cm,twocolumn}
}
\begin{document}
%\thispagestyle{firstpagestyle}
\pagestyle{generalpagestyle}
\section{Example of section}
\subsection{Example of subsection}
\lipsum[1-5]
\end{document}
答案1
这分为两个部分:背景图片和页面布局。第一部分比较简单,第二部分比较难。
对于图片,我使用一次性钩子来插入包含第一个图片的框tikzpicture
,并使用标准钩子来插入包含第二个图片的框。使用框而不是tikzpicture
直接包含代码意味着我们只使用 LaTeX 的picture
环境来实际插入它。对于第二张图片,这比每次调用更有效率tikzpicture
,尤其是对于简单的框架。(如果您只想要一个框架,您可以不用它tikzpicture
并使用更简单的东西。但如果您只做一次并将其装箱,这并不是什么问题。)
页面布局的改变比较棘手。你可以用各种方法来处理它,但每种方法都有其局限性。
- 您可以
\newgeometry
在文档正文中使用。这将在使用处插入分页符。 - 您可以尝试自动执行此操作,但分页符是不可避免的。
- 您可以使用 调整页面布局
changepage
,在适当的位置插入合适的命令。在这种情况下,设置geometry
标准情况可能更有意义。在这里,您可以选择强制分页或容忍格式错误的部分段落,因为更改只能在段落之间进行。 - 因此,如果您组织内容以便自然地出现分页符(例如分节符或类似的东西),可能会获得最佳效果。下面的示例演示了此选项。
- 如果您在自然中断时实现此操作,则也有方法可以自动更改页面布局。例如,某些解决方案使用 进行更改
geometry
。fancyhdr
但如果您titlesec
以其他方式使用这些东西,这会破坏一切。 geometry
如果您可以在段落分隔符处安排它,则更改页面布局和/或很简单。
\documentclass[a4paper,10pt,twocolumn,landscape]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{geometry}
\usepackage{changepage}
\usepackage{kantlipsum}
\usetikzlibrary{calc}
\geometry{left=1.2cm,right=1.2cm,top=1.2cm,bottom=1.2cm,footskip=0.7cm}
\AtBeginDocument{%
\thispagestyle{empty}%
\AddToHookNext{shipout/background}{%
\put (0,-\paperheight) {\usebox \backgroundfirst}%
}%
\changetext{}{-2cm}{2cm}{2cm}{}%
\AddToHookNext{shipout/after}{%
\AddToHook{shipout/background}{%
\put (0,-\paperheight) {\usebox \backgroundgeneral}%
}%
}%
}
\NewDocumentCommand \pagelayoutgeneral {} {%
\clearpage
\changetext{}{2cm}{-2cm}{-2cm}{}%
}
\ExplSyntaxOff
\newsavebox{\backgroundfirst}
\sbox \backgroundfirst {%
\begin{tikzpicture}[baseline=(nw)]
\coordinate (nw) at (0,0);
\path (nw) ++(3cm,-1cm);
\draw[line width=3pt]($(current page.north west)+(3cm,-1cm)$) rectangle ($(current page.south east)+(-1cm,1cm)$);
\draw[]($(current page.north west)+(1cm,-1cm)$) rectangle ($(current page.south west)+(2cm,3cm)$);
\draw[]($(current page.south west)+(1cm,1cm)$) rectangle ($(current page.south west)+(2cm,2.5cm)$);
\end{tikzpicture}%
}
\newsavebox \backgroundgeneral
\sbox \backgroundgeneral {%
\begin{tikzpicture}[baseline=(nw)]
\coordinate (nw) at (0,0);
\path (nw) ++(1cm,-1cm);
\draw[line width=3pt]($(current page.north west)+(1cm,-1cm)$) rectangle ($(current page.south east)+(-1cm,1cm)$);
\end{tikzpicture}%
}
\begin{document}
\section{Example of section}
\subsection{Example of subsection}
\kant[1-6]
\pagelayoutgeneral
\kant[7-20]
\end{document}
changepage
声明更改“有时”在包含在包\afterpage{}
中afterpage
或作为页面样式的一部分包含在标题中时有效。但是我无法让它工作。
[最后一页的模糊是由于 Okular 的限制,而不是实际的外观。]