文本宽度的奇怪行为

文本宽度的奇怪行为

我试图重现一些tcolorbox– 盒子。现在考虑以下 MWE:

\documentclass[12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{tikz,lipsum,libertine,microtype,colortbl,tcolorbox,amsmath,amssymb,amsfonts}
\usetikzlibrary{backgrounds}
\usepackage[explicit]{titlesec}
\newcommand{\changefont}[3]{\fontfamily{#1}\fontseries{#2}\fontshape{#3}\selectfont}

\everymath{\displaystyle}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{\filcenter\underline{\MakeUppercase{\textls[400]{\chaptertitlename}}\ \thechapter}}{20pt}{\Huge}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{\fcolorbox{red}{orange}{#1}\thechapter\hspace{1.5ex}\chaptertitlename}{20pt}{\Huge}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{
%   \begin{tcolorbox}[colframe=blue!20,colback=blue!20,skin=widget,height=3cm]
%       \vspace{2cm}
%       \hfill\color{red}#1
%   \end{tcolorbox}
%}{-10pt}{\Huge}

\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{
    \begin{tikzpicture}
        \node[fill=blue!20,minimum width=\textwidth,minimum height=2cm] (a) {};
            \node[above left] at (a.south east) {\bf\textsf{#1}};
            \node[gray] at (a.north east) {\scalebox{2}{\changefont{pnc}{m}{sl}\thechapter}};
    \end{tikzpicture}
}{-40pt}{\Huge}
\begin{document}

    \chapter{Einleitung}
    \lipsum[1]\par
    Hallo, hier steht ein Blindtext. \marginpar{\it Tipp: Versuch es selber zu lösen, dadurch lernst du mehr.} Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis.
        \vspace{1cm}
    \begin{table}[h!]
    \centering
            \rowcolors{1}{blue!20}{blue!10}
        \begin{tabular}{>{\sf}r >{\sf}l}
            \rowcolor{blue!30} 
            \normalfont\textbf{Meine Arbeit} & \normalfont\textbf{Deine Arbeit} \\
            Einkauf & heute \\
            Zeichnung & morgen \\
            Arbeit & gestern \\
            Hier und da & Jetzt da und dort
        \end{tabular}
    \caption{Beispiel einer Einkaufsliste}
    \end{table}
        \thispagestyle{empty}\newpage
    \lipsum[1] Hier ist es wichtig \marginpar{\it Mit der Zeit tut man sich leichter \ldots} \lipsum[1] 

    \vspace{1ex}\noindent\begin{tikzpicture}
        \node[rounded corners=1ex,
              draw=blue,
              very thick,
              minimum height=2cm,
              minimum width=\textwidth,
              text width=\textwidth, %%% comment this line
              align=left,
              ] (a) {He she it -- das 's' muss mit.};
              \begin{pgfonlayer}{background}
                \fill[blue!20] ([yshift=-1ex]a.north east) arc(0:90:1ex) -- ([xshift=1ex]a.north west) arc(90:180:1ex) -- ([yshift=1ex]a.south west) arc(180:270:1ex) -- ([xshift=-1ex]a.south east) arc(270:360:1ex) -- cycle;
                    \fill[blue] ([yshift=-1ex]a.north west) arc(-180:-270:1ex) -- ([xshift=-1ex]a.north east) arc(-270:-360:1ex) -- ([yshift=1.5cm]a.south east) -- ([yshift=1.5cm]a.south west) -- cycle;
              \end{pgfonlayer}
              \node[anchor=west,below right,white] at (a.north west) {\bf Die Merkregel};
    \end{tikzpicture}\vspace{1ex}

%%% See the text indent …

%   \begin{tikzpicture}[remember picture,overlay]
%       \draw[ultra thick,red] ([xshift=-3.1cm]current page.south east) -- ([xshift=-3.1cm]current page.north east);
%   \end{tikzpicture}


    \begin{tcolorbox}
        He she it -- das 's' muss mit.
    \end{tcolorbox}
\end{document}

输出如下:

截屏

截屏

(我们正在讨论我创建的蓝色框;它位于输出的第二页.pdf。)

当您注释掉标记的行 ( %%% comment this line) 时,宽度与文本完美匹配。但是当您取消注释该行时,宽度不再匹配。所以我的问题是:我该如何修复这个错误?具体来说,我该如何将节点文本左对齐,并使节点的宽度与文本匹配?

答案1

为什么不使用tcolorbox来完成这项任务?您正在用另一种方式,试图用 来tcolorbox模仿tikzpicture

\documentclass[12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[table]{xcolor}
\usepackage{tikz,lipsum,libertine,microtype,colortbl,tcolorbox,amsmath,amssymb,amsfonts}
\usetikzlibrary{backgrounds}
\usepackage[explicit]{titlesec}
\newcommand{\changefont}[3]{\fontfamily{#1}\fontseries{#2}\fontshape{#3}\selectfont}

\everymath{\displaystyle}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{\filcenter\underline{\MakeUppercase{\textls[400]{\chaptertitlename}}\ \thechapter}}{20pt}{\Huge}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{\fcolorbox{red}{orange}{#1}\thechapter\hspace{1.5ex}\chaptertitlename}{20pt}{\Huge}

%\titleformat{\chapter}[display]
%{\normalfont\huge\bfseries}{
%   \begin{tcolorbox}[colframe=blue!20,colback=blue!20,skin=widget,height=3cm]
%       \vspace{2cm}
%       \hfill\color{red}#1
%   \end{tcolorbox}
%}{-10pt}{\Huge}

\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{
    \begin{tikzpicture}
        \node[fill=blue!20,minimum width=\textwidth,minimum height=2cm] (a) {};
            \node[above left] at (a.south east) {\bf\textsf{#1}};
            \node[gray] at (a.north east) {\scalebox{2}{\changefont{pnc}{m}{sl}\thechapter}};
    \end{tikzpicture}
}{-40pt}{\Huge}
\begin{document}

    \chapter{Einleitung}
    \lipsum[1]\par
    Hallo, hier steht ein Blindtext. \marginpar{\it Tipp: Versuch es selber zu lösen, dadurch lernst du mehr.} Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis.
        \vspace{1cm}
    \begin{table}[h!]
    \centering
            \rowcolors{1}{blue!20}{blue!10}
        \begin{tabular}{>{\sf}r >{\sf}l}
            \rowcolor{blue!30} 
            \normalfont\textbf{Meine Arbeit} & \normalfont\textbf{Deine Arbeit} \\
            Einkauf & heute \\
            Zeichnung & morgen \\
            Arbeit & gestern \\
            Hier und da & Jetzt da und dort
        \end{tabular}
    \caption{Beispiel einer Einkaufsliste}
    \end{table}
        \thispagestyle{empty}\newpage
    \lipsum[1] Hier ist es wichtig \marginpar{\it Mit der Zeit tut man sich leichter \ldots} \lipsum[1] 

%    \vspace{1ex}\noindent\begin{tikzpicture}
%        \node[rounded corners=1ex,
%              draw=blue,
%              very thick,
%              minimum height=2cm,
%              minimum width=\textwidth,
%              text width=\textwidth, %%% comment this line
%              align=left,
%              ] (a) {He she it -- das 's' muss mit.};
%              \begin{pgfonlayer}{background}
%                \fill[blue!20] ([yshift=-1ex]a.north east) arc(0:90:1ex) -- ([xshift=1ex]a.north west) arc(90:180:1ex) -- ([yshift=1ex]a.south west) arc(180:270:1ex) -- ([xshift=-1ex]a.south east) arc(270:360:1ex) -- cycle;
%                    \fill[blue] ([yshift=-1ex]a.north west) arc(-180:-270:1ex) -- ([xshift=-1ex]a.north east) arc(-270:-360:1ex) -- ([yshift=1.5cm]a.south east) -- ([yshift=1.5cm]a.south west) -- cycle;
%              \end{pgfonlayer}
%              \node[anchor=west,below right,white] at (a.north west) {\bf Die Merkregel};
%    \end{tikzpicture}\vspace{1ex}

%%% See the text indent …

%   \begin{tikzpicture}[remember picture,overlay]
%       \draw[ultra thick,red] ([xshift=-3.1cm]current page.south east) -- ([xshift=-3.1cm]current page.north east);
%   \end{tikzpicture}

\begin{tcolorbox}[
title=Die Merkregel,
fonttitle=\bfseries,
coltitle=white,
colframe=blue,
colback=blue!20
]
He she it -- das 's' muss mit.
\end{tcolorbox}

    \begin{tcolorbox}
        He she it -- das 's' muss mit.
    \end{tcolorbox}
\end{document}

在此处输入图片描述

相关内容