让 tikz 图片浮动

让 tikz 图片浮动

我正在我的章节标题中插入一个 tikz 图片\titleformat(见这个问题),我希望它不会影响标题中的空格。现在,我所做的是用负 vspace 补偿图片的引入:

\titleformat{name=\section,page=odd}[display]
  {\newpage\secstyle} % format
  {\large\makedate{\thesection}~\chaphead} % label
  {10pt} %sep
  {\vspace{-5mm}\filcenter\textls[-50]} %before
  [\monthtab{\chaphead}{\arabic{chapter}}\vspace{-1.2cm}] % after

\monthtab是将图片插入到页面右侧的宏,有没有办法让插入的图片\monthtab完全不影响间距,使之浮动在页面中?

以下是一些示例。首先,没有选项卡的部分:

无标签部分

然后,一个带有标签的部分,没有任何内容来阻止垂直空间:

带有选项卡的部分,没有 vspace

最后,当我添加一个否定词\vspace来修复它(称之为目标)时:

带有制表符和 vspace 的部分

下面是重现该问题的“最小”示例:

\documentclass[paper=6.14in:9.21in,pagesize=pdftex,10pt,DIV=15]{scrbook}
\usepackage{titlesec}
\usepackage{tikz}
\usepackage{microtype}

\newcommand{\monthtab}[2]{
  \begin{tikzpicture}[remember picture,overlay]
    \node[yshift=-3*{#2}cm,xshift=-0.5cm] at (current page.north east) {
      \tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90] 
        (0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
    };
  \end{tikzpicture}
}

\newcommand{\secstyle}{\scshape\Huge}

% Tune section headings
\renewcommand\thesection{\arabic{section}}
\titleformat{name=\section,page=even}[display]
  {\newpage\secstyle} % format
  {} % label
  {10pt} %sep
  {\vspace{-5mm}\filcenter\textls[-35]} %before
\titleformat{name=\section,page=odd}[display]
  {\newpage\secstyle} % format
  {} % label
  {10pt} %sep
  {\vspace{-5mm}\filcenter\textls[-50]} %before
  [\monthtab{Chapname}{\arabic{chapter}}] % after
\titlespacing{\section}{0pt}{*}{*-2}

\begin{document}

\chapter{Janvier}
\section{This is a test section}

\begin{center}
Some text here
\end{center}

\section{This is another section}

\begin{center}
Some text here
\end{center}

\end{document}

我很难使它比这更短...比较第 2 页和第 3 页:

  • 在第 2 页,文本几乎触及标题;
  • 在第 3 页上,右侧的标签在标题后添加了一个空格。

答案1

可选的的参数\titleformat似乎会导致titlesec插入新行。我不知道如何避免这种情况,但一个简单的方法\vspace{-\baselineskip}应该可以消除这种影响。

\titleformat{name=\section,page=odd}[display]
  {\newpage\secstyle} % format
  {} % label
  {10pt} %sep
  {\vspace{-5mm}\filcenter\textls[-50]} %before
  [\monthtab{Chapname}{\arabic{chapter}}\vspace{-\baselineskip}] % after

或者,你可以\monthtab争论:

\titleformat{name=\section,page=odd}[display]
  {\newpage\secstyle} % format
  {} % label
  {10pt} %sep
  {\vspace{-5mm}\monthtab{Chapname}{\arabic{chapter}}%
   \filcenter\textls[-50]}

当前\monthtab宏包含两个未注释的换行符,它们都会在文本中添加一个空格。为了避免这种情况,请在行尾添加注释字符,例如

\newcommand{\monthtab}[2]{% <--- comment here
  \begin{tikzpicture}[remember picture,overlay]
      \node[yshift={ -3*(mod(#2-1,6)+1)*1cm},xshift=-0.5cm] at (current page.north east) {
      \tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90] 
        (0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
    };
  \end{tikzpicture}% <--- comment here
}

答案2

将其放在\rlap{...}或 中\llap{...}不会占用任何官方空间。它只是向右或向左重叠。但是,这可能会叠印以下部分文本。


更新

好的,现在通过您的示例,我明白问题所在了。\rlap\llap只关心水平空间,而不关心垂直空间。您需要垂直版本。但是,由于您正在使用,因此tikz您可以使用其命令来执行此操作。只需确保图片没有垂直空间,最好也没有水平空间。

\useasboundingbox (0,0);尝试在图片开头添加(0,0),这里代表图片的中心。这样图片在两个方向上的尺寸都是 0,绘图材料在所有方向上都重叠。

相关内容