带有特殊布局/几何形状的框架页面,第一页具有一般布局/几何形状

带有特殊布局/几何形状的框架页面,第一页具有一般布局/几何形状

我尝试创建一个具有两种页面框架样式的双列文档。

目标是拥有如下所示的结构(忽略文本):在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

我尝试定义两种页面样式:第一种的几何形状是左边距为 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标准情况可能更有意义。在这里,您可以选择强制分页或容忍格式错误的部分段落,因为更改只能在段落之间进行。
  • 因此,如果您组织内容以便自然地出现分页符(例如分节符或类似的东西),可能会获得最佳效果。下面的示例演示了此选项。
  • 如果您在自然中断时实现此操作,则也有方法可以自动更改页面布局。例如,某些解决方案使用 进行更改geometryfancyhdr但如果您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 的限制,而不是实际的外观。]

相关内容