创建具有垂直内容跨度旋转标题的设计

创建具有垂直内容跨度旋转标题的设计

你正在和一个完全的 LaTeX 新手打交道,所以请你保持礼貌 ;) 我正在尝试排版一个特定的布局,但到目前为止我还没有得到想要的结果。我之前尝试过 MS Word,但最后我得出结论,它根本无法完成这项任务,终于找到了一个尝试 LaTeX 的好借口。我觉得在过去的几个小时里,我已经在 LaTeX 方面取得了很大进展,但不知道我现在是否能实现我想要的东西,因此在我花费大量额外的无用时间之前,在这里寻求建议。但我可能会从 xy 问题的角度来解决这个问题 :)

我想要的布局是创建一个“双列”块宏,其中狭窄的左列基本上包含一个旋转 90 度且具有背景颜色的标题,垂直跨越其右侧的内容,右列占据包含内容的其余页面宽度。这些块必须能够嵌套;即,我必须能够将这样的块作为子块放置在左列的内容中。嵌套必须能够进入第 3 层(但通用方法会更好)。并且它还必须能够在中途中断并继续下一页。
为了说明我想要什么,我在最后包含了一个 MWE,它几乎满足了我的要求(除了分页)。

复杂因素包括:

  • 我希望左侧“标题”列在旋转的标题文本正上方有一些线条图,并且在列的底部有一些其他线条图,从而有效地形成左列的箭头。
  • 如果右侧内容列的内容超出页面边框,我希望左侧列能够在下一页继续,从而有效地在左边距的后续页面上提供一个彩色(空白)带。
  • 当整个结构变得太大时,也不应该将其推到新页面 - 我希望它从我放置它的地方开始,并在适用的情况下将其内容分页到下一页。分页不应该是手动的,因为块的内容将以编程方式生成,并且大小可能会有很大差异。
  • 此外,当流到下一页时,分割可能出现在内容列的任何位置,但当然不会出现在页眉文本本身的中间(页眉文本总是适合一页,因此如果页眉不能完全放在一页上,则块应该流到下一页)。

我尝试过tabular,但发现除了页面边框断裂(参见 MWE)之外,所有东西都可以正常工作。 longtable也没有剪切它;它只在行之间分割,而不是在行内分割。 multicols不允许我设置列宽,而且parcolumns我就是无法正确布局。

顺便说一下,我在 Windows 上工作(使用 MiKTeX 和 TeXnicCenter),生成 PDF,但我想这应该没关系。

如果有人能指出我可以使用的其他构造来实现这样的设计,我将非常感激!

这是 MWE。不知道它是否会让更熟练的 LaTeX 用户感到不舒服,但我已经尽力了 ;)

\documentclass[11pt,twoside,a4paper,notitlepage]{book}

\usepackage{array}
\usepackage[table]{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\usepackage{rotating}
\usepackage[none]{hyphenat} % prevent hypenation

% accent color
\definecolor{mycolor}{RGB}{98,127,27}

% sideheader arrow line art
\tikzset{
  startarrow/.pic={
    \fill[mycolor] (0cm,0.25cm) -- (0.25cm,0cm) -- (0.5cm,0.25cm) -- (0.5cm,0cm) -- (0cm,0cm) -- cycle;
  }
}
\tikzset{
  endarrow/.pic={
    \fill[mycolor] (0cm,0.25cm) -- (0.5cm,0.25cm) -- (0.25cm,0cm) -- cycle;
  }
}

% single block
\newlength\contentwidth
\newcommand{\mytable}[3]{{
  \setlength\contentwidth{\hsize}
  \addtolength\contentwidth{-0.8cm}
  \def\arraystretch{0}
  \setlength{\tabcolsep}{0.0cm}
  \begin{tabular}{p{0.5cm}@{\hspace{0.3cm}}p{\contentwidth}}
    \tikz \pic{startarrow}; & \\
    \cellcolor{mycolor} \centering {\rotatebox[origin=r]{90}{#2}} & \raggedright\arraybackslash #3\\
    \tikz \pic{endarrow}; & \\
  \end{tabular}
  \let\contentwidth\undefined
}}

\begin{document}

\mytable{1}{Caption of cell1}{\lipsum[1]}
\mytable{1}{Caption of cell2}{\lipsum[2]
  \mytable{2}{Caption of cell3}{\lipsum[3]
    \mytable{3}{Caption of cell4}{\lipsum[4]}
    \mytable{3}{Caption of cell5}{\lipsum[5]}
    \mytable{3}{Caption of cell6}{\lipsum[6]}
    \mytable{3}{Caption of cell7}{\lipsum[7]}
  }
}

\end{document}

相关内容