用水平线填充 Tikz columnep

用水平线填充 Tikz columnep

我正在尝试在两列文本之间创建一个记事本,这样人们就可以在其中写下引用任一列文本的注释。下面的代码有一个文本部分,后面是一段两列文本(记事本在两列之间),后面是一段文本。我使用了 multicolrule,因为它似乎接近我想要的。

有几个问题我一直无法弄清楚。

  1. 如果我在多列部分中添加 SetMCRule 命令,则在多列部分中的文本开始打印之前会有很大的空白。此外,它会打印超出页面末尾的内容,而忽略页面末尾。

  2. 打印线条的 tikz 代码被硬编码为特定行数。它需要能够准确地计算出有多少行,以及从哪里开始划线部分以及在哪里结束划线部分。

  3. 理想情况下,我想添加一个框(tcolorbox)来为记事本创建边框。

多规则包很可能不是最合适的,因此我愿意接受更好的选择。

注意:我正在使用 lualatex,但我尝试过 xelatex,似乎没有任何区别。

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage[tikz]{multicolrule}[2019/10/01]
\usepackage{lipsum}
\usepackage{xcolor}
\usetikzlibrary{calc}
\setlength{\columnsep}{24pt}
\setlength{\columnseprule}{.5pt}
\definecolor{notepadrule}{RGB}{217,244,244}

\begin{document}
\lipsum[1-2]

\setlength{\columnsep}{2in}
\begin{multicols}{2}
\SetMCRule{color=gray,width=0.4pt, expand=2pt, custom-line={
    \foreach \fila in {0,...,20}
    {
      \draw [line width=2pt,color=notepadrule]
        (current page.west|-0,-\fila*16pt) -- ++(0.90\columnsep,0);
    }
}}
\lipsum[3-7]
\end{multicols}

\setlength{\columnsep}{24pt}
\lipsum[1-2]
\end{document}

答案1

这符合您的要求吗?请注意,自定义行中的坐标系multicolrule设置为 y=0 位于列的底部。-\fila*16pt因此,您的负表达式绘制的方向错误,这就是图像超出页面的原因。

此解决方案使用预定义的用于自定义线条的(TOP)(BOT)坐标multicolrule,因此其大小将与列高相适应。我还在水平线周围添加了所需的框。

\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage[tikz]{multicolrule}[2019/10/01]
\usepackage{lipsum}
\usepackage{xcolor}
\usetikzlibrary{math,calc}
\setlength{\columnsep}{24pt}
\setlength{\columnseprule}{.5pt}
\definecolor{notepadrule}{RGB}{217,244,244}

\begin{document}
\lipsum[1-2]

\setlength{\columnsep}{2in}
\begin{multicols}{2}
\SetMCRule{width=0.4pt, custom-line={
    \tikzmath {coordinate \t, \b;
      \t = (TOP)-(.45\columnsep,1pt);
      \b = (BOT)+(.45\columnsep,-1pt);
      integer \r;
      \r = \ty / 16;
    }
    \draw [line width=2pt,color=notepadrule]
    (\t) -- ++(.9\columnsep,0) -- (\b) -- ++(-.9\columnsep,0) -- cycle;
    \foreach \fila in {1,...,\r}
    {
      \draw [line width=2pt,color=notepadrule]
        ($(\t)-(0,\fila*16pt)$) -- ++(0.90\columnsep,0);
    }
}}
\lipsum[3-7]
\end{multicols}

\setlength{\columnsep}{24pt}
\lipsum[1-2]
\end{document}

一个限制是线条始终是固定距离并且边界框使用整个列高,因此最后一条水平线和边界框的下线之间可能会出现看起来很尴尬的间隙,就像在本 MWE 的第二页上一样:

在此处输入图片描述

有多种解决方案,具体取决于您希望它看起来如何。例如,您可以将边界框的大小设置为这些线的整数倍,但我没有尝试任何花哨的方法,因为我不确定您想要的效果是什么。

编辑:用这个版本替换 \SetMCRule上面的定义,你会得到整数行数:

\SetMCRule{width=0.4pt, custom-line={
    \tikzmath {coordinate \t, \b;
      \t = (TOP)-(.45\columnsep,0);
      integer \r, \s;
      \r = \ty / 16;
      \s = \ty - \r*16;
      \t = (\t)-(0,.5*\s);
      \b = (\t)+(.9\columnsep,-\r*16);
    }
    \draw [line width=2pt,color=notepadrule]
    (\t) -- ++(.9\columnsep,0) -- (\b) -- ++(-.9\columnsep,0) -- cycle;
    \foreach \fila in {1,...,\r}
    {
      \draw [line width=2pt,color=notepadrule]
      ($(\t)-(0,\fila*16pt)$) -- ++(0.90\columnsep,0);
    }
}}

编辑2:修复了第二个版本的错误。图像现在应该正确地垂直居中。

相关内容