tikzposter Block 中 bodyinnersep (左、上、右、下) 的不同值

tikzposter Block 中 bodyinnersep (左、上、右、下) 的不同值

我正在使用 tikzposter 并定义了自己的块样式。块的背景是左右特殊,因此我需要在左右留出较大的填充,以使文本不与特殊边框重叠。但是,据我所知,我只能指定一个同样适用于左、上、右下角的 bodyinnersep 值。

是否可以为左、上、右、下分隔指定不同的 bodyinnersep 值,就像在 html/css 中对 margin/padding 执行的操作一样?

我该如何处理这个问题?

答案1

注意:我不能保证这在所有情况下都有效。


只要稍微花点功夫,你至少可以分别设置左/右和上/下,尽管将左填充设置为与右填充不同需要完全不同的方法,因为 TikZ 一开始就没有实现它。但它确实有inner xsep/ inner ysep

因此,可以做的是定义两个新键bodyxinnersepbodyyinnersep,然后在需要时修补(修改)\block以使用这些键代替bodyinnersep。您还需要bodyxinnersep=X,bodyyinnersep=Y在自定义块定义中设置。

具有不同侧面和顶部/底部填充的块

\documentclass[a2paper]{tikzposter}
\usepackage{lipsum}
\usepackage{xpatch}
\makeatletter
% define new lenghts for x and y inner sep
\newlength\TP@blockbodyxinnersep
\newlength\TP@blockbodyyinnersep
\newlength\blockbodyxinnersep
\newlength\blockbodyyinnersep
% define keys for tikzposter to use
\define@key{block}{bodyxinnersep}{\TP@blockbodyxinnersep=#1 \blockbodyxinnersep=#1}
\define@key{block}{bodyyinnersep}{\TP@blockbodyyinnersep=#1 \blockbodyyinnersep=#1}

% patch to fix https://bitbucket.org/surmann/tikzposter/issues/38/
% note use of bodyxinnersep
\xpatchcmd{\block}%
{\TP@blockbodywidth-2\TP@blockbodyinnersep-\TP@blockbodyoffsetx}
{\TP@blockbodywidth-2\TP@blockbodyxinnersep}
{}{}

% patch to use the bodyyinnersep to calculate height of node
\xpatchcmd{\block}
{\setlength{\TP@blockbodyheight}{\ht\TP@blockbodybox + \dp\TP@blockbodybox +2\TP@blockbodyinnersep}}
{\setlength{\TP@blockbodyheight}{\ht\TP@blockbodybox + \dp\TP@blockbodybox +2\TP@blockbodyyinnersep}}
{}{}

% patch to set inner x and y seps separately, instead of just inner sep
\xpatchcmd{\block}
{text width=\TP@blockbodywidth-2\TP@blockbodyinnersep, inner sep=\TP@blockbodyinnersep}
{text width=\TP@blockbodywidth-2\TP@blockbodyxinnersep, inner xsep=\TP@blockbodyxinnersep,
inner ysep=\TP@blockbodyyinnersep}
{}{}
\makeatother


% I grabbed this sampleblockstyle from the manual
\defineblockstyle{sampleblockstyle}{
  titlewidthscale=0.9, bodywidthscale=1,titleleft,
  titleoffsetx=0pt, titleoffsety=0pt, bodyoffsetx=0mm, bodyoffsety=15mm,
  bodyverticalshift=10mm, roundedcorners=5, linewidth=2pt,
  titleinnersep=6mm, bodyinnersep=1cm,
  % note addition of the following two keys:
  bodyxinnersep=6cm,bodyyinnersep=1cm
}{
  \draw[color=framecolor, fill=blockbodybgcolor,
    rounded corners=\blockroundedcorners] (blockbody.south west)
    rectangle (blockbody.north east);
  \ifBlockHasTitle
    \draw[color=framecolor, fill=blocktitlebgcolor,
      rounded corners=\blockroundedcorners] (blocktitle.south west)
      rectangle (blocktitle.north east);
  \fi
}

% use the custom style
\useblockstyle{sampleblockstyle}

\author{a}
\title{b}
\begin{document}
\maketitle
\block{foo}{\lipsum*[1]}
\end{document}

相关内容