Titlesec с tikz

Titlesec с tikz

Я все еще путаюсь с titlesecи tikz. Например, как в приведенном ниже коде поместить номер главы и заголовок внутри скругленного прямоугольника с настраиваемым внутренним полем?

\documentclass[12pt, oneside]{book}
\usepackage[paperwidth=30pc, paperheight=36pc, margin=5pc]{geometry}

\usepackage{titlesec}
\titleformat{\chapter}%
  [hang]% shape
  {\centering\bfseries\large}% format applied to label+text
  {\thechapter}% label
  {10pt}% horizontal separation between label and title body
  {}% before the title body
  []% after the title body

\usepackage{tikz}

\begin{document}
\chapter{Test Chapter Title}
\end{document}

решение1

Хитрость в том, что в качестве аргумента последней части последнего обязательного аргумента \titleformatпередается заголовок.

Заимствование кода из matexmatics

\documentclass[12pt, oneside]{book}
\usepackage[paperwidth=30pc, paperheight=36pc, margin=5pc]{geometry}
\usepackage{tikz}
\usepackage{titlesec}

\titleformat{\chapter}
  [block]% shape
  {\filcenter\bfseries\large}% format applied to label+text
  {}% label
  {0pt}% horizontal separation between label and title body
  {\maketitleframe{\thechapter}}% before the title body
\titleformat{name=\chapter,numberless}
  [block]% shape
  {\filcenter\bfseries\large}% format applied to label+text
  {}% label
  {0pt}% horizontal separation between label and title body
  {\maketitleframe{\ignorespaces}}% before the title body

\newcommand{\maketitleframe}[2]{%
  \begin{tikzpicture}
    \node[draw,rounded corners] {#1 #2};
  \end{tikzpicture}% before the title body
}

\begin{document}

\tableofcontents

\chapter{Test Chapter Title}

\end{document}

введите описание изображения здесь

Важно определить формат также для бесчисленных глав. С \ignorespacesпервым аргументом, пробел между #1и #2проглатывается. Примечание

  1. \filcenterи не\centering
  2. 0pt, а не 10pt

Если вам нужно больше места между номером и заголовком

\documentclass[12pt, oneside]{book}
\usepackage[paperwidth=30pc, paperheight=36pc, margin=5pc,showframe]{geometry}
\usepackage{tikz}
\usepackage{titlesec}

\titleformat{\chapter}
  [block]% shape
  {\filcenter\bfseries\large}% format applied to label+text
  {}% label
  {0pt}% horizontal separation between label and title body
  {\maketitleframe{\thechapter\hspace{10pt}}}% before the title body
\titleformat{name=\chapter,numberless}
  [block]% shape
  {\filcenter\bfseries\large}% format applied to label+text
  {}% label
  {0pt}% horizontal separation between label and title body
  {\maketitleframe{}}% before the title body

\newcommand{\maketitleframe}[2]{%
  \begin{tikzpicture}
    \node[draw,rounded corners] {#1#2};
  \end{tikzpicture}% before the title body
}

\begin{document}

\tableofcontents

\chapter{Test Chapter Title}

\end{document}

введите описание изображения здесь

решение2

Решением является использование опции explicitдля пакета titlesec. Тогда заголовок может быть получен с помощью #1. Команда \thechapterперемещается в то \nodeместо, где #1находится.

введите описание изображения здесь

\documentclass[12pt, oneside]{book}
\usepackage[paperwidth=30pc, paperheight=36pc, margin=5pc]{geometry}

\usepackage[explicit]{titlesec}
\titleformat{\chapter}%
  [hang]% shape
  {\centering\bfseries\large}% format applied to label+text
  {}% label
  {10pt}% horizontal separation between label and title body
  {\begin{tikzpicture}\node[draw,rounded corners] {\thechapter{} #1};\end{tikzpicture}}% before the title body
  []% after the title body

\usepackage{tikz}

\begin{document}
\chapter{Test Chapter Title}
\end{document}

Связанный контент