从给定点到后续页面添加垂直线边距对齐

从给定点到后续页面添加垂直线边距对齐

使用回忆录包,我想在边缘有一条垂直线,如下所示:

Some leading content

      ... vertical space ...

----------------------------------
 XYZ  | Content A
      |
      | Content B
      |
      | Content C
      |
      | ...
      |
      | Content N

   *** page break ***

      | Content A1
      |
      | Content B1
      |
      | Content C2
      |
      | ...
      |

  ...

我希望内容 XYZ 位于边距注释或段落中(marginpar,垂直线沿着页面边距,内容 A 位于该区域宽度的页面中。

内容将跨越多页,并且有些复杂 - 例如,多个表格本身可能跨越多页,并且内容是对齐的。本质上,文档的主体将是内容* - 因此我希望将其作为页面的主体。

因此,我的待办事项列表如下:

  1. 将页面边距设置得更大一些(\oddsidemargin);
  2. 添加设置在标准边距位置的引入内容;
  3. 沿着页边距添加一条跨越多页的垂直线;
  4. 添加边距段落(对于“XYZ”)。

事实上,我之前已经弄清楚了这一点,但后来忘记了如何解决,所以我发布这篇文章,部分是为了保存解决方案,也因为我相信几乎所有读到这篇文章的人都比我更了解如何实现目标。一旦我重新发现它,我就会发布我自己的解决方案。

尽管我会发布更详细的答案,但以下是我的初步想法:

  1. 我曾想过使用longtable或等效方法来解决 1、2、3 和 4,而不是摆弄页面尺寸等,但正如所提到的,“内容 *”将包括表格等。我确信可以解决这个问题,但我觉得它不如相应地设置页面尺寸那么优雅。

  2. 否则,问题 2、3 和 4 似乎主要是 的实现问题memoir,尽管有垂直线 - 我不记得

  3. 如果另一个可以实现,我很想使用textpos包来解决问题2。

  4. 垂直线使用例如‘背景’ 包解决问题3。

答案1

如果你滥用了这个geometry包裹会怎么样?

%\documentclass[12pt]{memoir}
\documentclass[oneside, 12pt]{memoir}
\usepackage[showframe]{geometry}
\usepackage{lipsum,longtable}

\makeatletter % <-- all from geometry.sty, but with some lines commented out

\renewcommand*{\Gm@vrules@mpi}{%
  \hb@xt@\@tempdima{\llap%{\Gm@vrule}
  \ignorespaces
  \hskip \textwidth\Gm@vrule
  \hskip \marginparsep
  %\llap{\Gm@vrule}\hfil\Gm@vrule
}}%
\renewcommand*{\Gm@vrules@mpii}{%
  \hb@xt@\@tempdima{\hskip-\marginparwidth\hskip-\marginparsep
  %\llap{\Gm@vrule}
   \llap{}
\ignorespaces
  \hskip \marginparwidth
  \rlap{\Gm@vrule}
 \hskip \marginparsep
 \llap{}
 %  \llap{\Gm@vrule}
 \hskip\textwidth
  \rlap{}
% \rlap{\Gm@vrule}
\hss}}%
\newif\ifGm@pageframes
\Gm@pageframestrue
\renewcommand*{\Gm@pageframes}{%
  \vb@xt@\z@{%
   \ifGm@showcrop
    \vb@xt@\z@{\vskip-1\Gm@truedimen in\vskip\Gm@layoutvoffset%
     \hb@xt@\z@{\hskip-1\Gm@truedimen in\hskip\Gm@layouthoffset%
      \vb@xt@\Gm@layoutheight{%
       \let\protect\relax
       \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,1,-3,3)\hfil\Gm@cropmark(1,1,3,3)}%
       \vfil
       \hb@xt@\Gm@layoutwidth{\Gm@cropmark(-1,-1,-3,-3)\hfil\Gm@cropmark(1,-1,3,-3)}}%
     \hss}%
    \vss}%
   \fi%
   \ifGm@showframe
    \if@twoside
     \ifodd\count\z@
       \let\@themargin\oddsidemargin
     \else
       \let\@themargin\evensidemargin
     \fi
    \fi
    \moveright\@themargin%
    \vb@xt@\z@{%
     \vskip\topmargin%\vb@xt@\z@{\vss\Gm@hrule}%
     \vskip\headheight%\vb@xt@\z@{\vss\Gm@hruled}%
     \vskip\headsep%\vb@xt@\z@{\vss\Gm@hrule}%
     \@tempdima\textwidth
     \advance\@tempdima by \marginparsep
     \advance\@tempdima by \marginparwidth
     \if@mparswitch
      \ifodd\count\z@
       \Gm@vrules@mpi
      \else
       \Gm@vrules@mpii
      \fi
     \else
      \Gm@vrules@mpi
     \fi
     % \vb@xt@\z@{\vss\Gm@hrule}%
     % \vskip\footskip\vb@xt@\z@{\vss\Gm@hruled}%
     \vss}%
    \fi%
  }}%

\makeatother

\begin{document}

a \marginpar{test}\lipsum

\newpage
b \marginpar{test}
\begin{longtable}{p{4in}}
\lipsum
\end{longtable}

\end{document}

为了使.tex文件更整洁,您可以将其包装在您自己的个人包中,\RequirePackage[showframe]{geometry}并在其前面加上:\usepackage{<filename>}

答案2

以下是我所做的工作,序言如下:

\documentclass[oneside,12pt]{memoir}

\usepackage{lipsum}

\usepackage{everypage}
\usepackage[absolute]{textpos}%

% textpos settings
\setlength{\TPHorizModule}{1cm}%
\setlength{\TPVertModule}{1cm}%
\TPMargin{0.0cm}%

% page dimensions
\settrimmedsize{11in}{8.5in}{*}
\settrims{0pt}{0pt}
\settypeblocksize{8in}{10.5in}{*}
\setlrmarginsandblock{4cm}{0.5in}{*}
\setulmarginsandblock{2cm}{1.5cm}{*}
\setheaderspaces{0cm}{*}{*}
\checkandfixthelayout[nearest]

% sidebars
\sidebarmargin{left}
\renewcommand{\sidebarfont}{\footnotesize}
\setlength\sidebarwidth{2.6cm}
\setlength\sidebartopsep{6cm}
\renewcommand*{\sidebarform}{\raggedright}

为了在每一页上创建整页垂直条,我使用everypage

% everypage - add vertical line
\AddEverypageHook{
    % height is 29.21 (stock height - 11.5in) - 2cm - pad (2cm) = 25cm 
    \ifnum\thepage>1
    \begin{textblock}{1,25}(3.5,1)
        \rule{0.2pt}{25cm}
    \end{textblock}
    \fi
}

在文档的第一页中:

\begin{textblock}{5}(2,2.2)
 \parbox{5cm}{%
   This appears in a static position.
 }
\end{textblock}

% horizontal line
% ~ width of stock 21.6cm (8.5in) minus 3cm for margins
\begin{textblock}{18,1}(1,7)
\rule{19.6cm}{0.2pt}
\end{textblock}

% vertical line (part of page; leaving room for header}
% ~ height is 29.21 (stock height - 11.5in) - 6cm - pad (2cm) = 21cm 
\begin{textblock}{1,21}(3.5,7)
\rule{0.2pt}{21cm}
\end{textblock}

\sidebar{Some sidebar text}

... Content A-Z

当然,我会将对此有实质性改进的答案标记为正确。

相关内容