我正在我的章节标题中插入一个 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
来修复它(称之为目标)时:
下面是重现该问题的“最小”示例:
\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,绘图材料在所有方向上都重叠。