У меня проблема с длинными заголовками подразделов/разделов: \\
они не работают.
Так как я новичок в Latex, я взял на вооружение этот прекрасный шаблонhttp://www.fluortools.com/misc/LaTeXtemplateи модифицировал его под свои нужды.
Однако сейчас мне приходится сталкиваться с переносами строк в заголовках подразделов/разделов.
Вот MWE:
\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[scaled]{berasans}
\usepackage[scaled]{beramono}
\usepackage[english]{babel}
\usepackage[left=3cm,right=3cm,top=2.5cm,bottom=3cm,includehead,headheight=13.6pt]{geometry}
\usepackage{titlesec}
\usepackage{tikz}
\usetikzlibrary{calc,decorations,decorations.pathmorphing,arrows,matrix,positioning,patterns}
\usepackage{xcolor}
\selectcolormodel{cmyk}
\newcommand\boxedSection[3]{{%
%
\begin{tikzpicture}[inner sep=#3,line width=1.0pt]
\node[anchor=east,rectangle,draw] at (0,0) (counter) {\textbf{#2}};
\draw (counter.south west) ++(.0pt,.5pt)-- ++($(\linewidth,0) - (2.5pt,0)$);
\node [right of=counter,anchor=west]{#1};
\end{tikzpicture}
}}
\newcommand\boxedSectionB[3]{{%
%
\begin{tikzpicture}[inner sep=#3,line width=1pt]
\node[anchor=east,rectangle,draw,fill=black] at (0,0) (counter) {\color{white}\textbf{#2}};
\draw (counter.south west) ++(.0pt,.5pt)-- ++($(\linewidth,0) - (2.5pt,0)$);
\node [right of=counter,anchor=west]{#1};
\end{tikzpicture}
}}
\newcommand\boxedsection[1]{\boxedSectionB{#1}{\thesection}{2mm}}
\newcommand\boxedsubsection[1]{\boxedSection{#1}{\thesubsection}{1.7mm}}
\newcommand\boxedsubsubsection[1]{\boxedSection{#1}{\thesubsubsection}{1.5mm}}
\titleformat{\section}[hang]%
{\usekomafont{section}}%
{}%
{.0em}%
{\filright\boxedsection}%
\titleformat{\subsection}[hang]%
{\usekomafont{subsection}}%
{}%
{.0em}%
{\filright\boxedsubsection}%
\titleformat{\subsubsection}[hang]%
{\usekomafont{subsubsection}}%
{}%
{.0em}%
{\filright\boxedsubsubsection}%
\titlespacing{\section}{0pt}{1.5cm}{-1cm}
\titlespacing{\subsection}{0pt}{1.5cm}{-1cm}
\titlespacing{\subsubsection}{0pt}{6pt}{6pt}
\titlespacing{\paragraph}{}{0pt}{0pt}
\begin{document}
\subsection{This title is really really really long so I'd liked to have a \\line break but instead is just go on and on ...}
\end{document}
Как только я удаляю часть boxedSection в titleformat, перенос строки \\
снова работает, но, конечно, красивая разметка также удаляется.
Может ли кто-нибудь изменить MWE так, чтобы перенос строк снова работал, но при этом сохранялась красивая компоновка?
Большое спасибо!!
Мишко
РЕДАКТИРОВАТЬ
Итак, я нашел решение, которое хорошо подходит для моей цели. Как предлагает touhami, я добавил text width=13cm
after anchor=west
и удалил строку в boxedSection, оставив boxedSectionB без изменений. Таким образом, код выглядит так:
\newcommand\boxedSection[3]{{%
%
\begin{tikzpicture}[inner sep=#3,line width=1.0pt]
\node[anchor=east,rectangle,draw] at (0,0) (counter) {\textbf{#2}};
\node [right of=counter,anchor=west,text width=13cm]{#1};
\end{tikzpicture}
}}
решение1
Обновлять
Вот еще одно предложение без пакета titlesec
. Теперь нет правил под заголовками.
\documentclass[a4paper,12pt,oneside]{scrbook}[2015/10/03]
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[scaled]{berasans}
\usepackage[scaled]{beramono}
\usepackage[english]{babel}
\usepackage[margin=3cm,top=2.5cm,includehead,headheight=13.6pt]{geometry}
\usepackage{xcolor}
\setcounter{secnumdepth}{\subsubsectionnumdepth}% subsubsection numbered
\RedeclareSectionCommands[
font=\normalsize,
%indent=-1em
]{section,subsection,subsubsection}
\newcommand*\BoxedSectionNumber[2]{{%
\setlength\fboxrule{1pt}%
\setlength\fboxsep{#2}%
\ifstr{#1}{section}{%
\colorbox{darkgray}{\textcolor{white}{\csname the#1\endcsname}}%
}{\fbox{\csname the#1\endcsname}}%
\hspace*{2\fboxsep}%
}}
\renewcommand*\sectionformat{\BoxedSectionNumber{section}{2mm}}
\renewcommand*\subsectionformat{\BoxedSectionNumber{subsection}{1.7mm}}
\renewcommand*\subsubsectionformat{\BoxedSectionNumber{subsection}{1.5mm}}
\newsavebox\SectionNumberBox
\renewcommand*\sectionlinesformat[4]{%
\sbox{\SectionNumberBox}{\hspace*{#2}#3}%
\noindent\usebox\SectionNumberBox%
\parbox{\dimexpr\textwidth-\wd\SectionNumberBox\relax}{#4}%
\par\nobreak%
}
\usepackage{blindtext}% dummy text
\begin{document}
\section{Section title}
\blindtext
\subsection{This title is really really really long so I'd liked
to have a line break but instead is just go on and on ...}
\blindtext
\subsubsection{Subsubsection title}
\blindtext
\end{document}
Результат:
Если вы раскомментируете, indent=-1em
то получите
Оригинальный ответ
Обратите внимание, что использование пакета titlesec
вместе с классом KOMA-Script не рекомендуется. Вы получите предупреждения от KOMA-Script и titlesec
.
Вот предложение без titlesec
, tikz
для которого требуется как минимум версия KOMA-Script 3.19a (текущая на CTAN).
\documentclass[a4paper,12pt,oneside]{scrbook}[2015/10/03]
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[bitstream-charter]{mathdesign}
\usepackage[scaled]{berasans}
\usepackage[scaled]{beramono}
\usepackage[english]{babel}
\usepackage[left=3cm,right=3cm,top=2.5cm,bottom=3cm,includehead,headheight=13.6pt]{geometry}
\usepackage{xcolor}
\setcounter{secnumdepth}{\subsubsectionnumdepth}% subsubsection numbered
\RedeclareSectionCommands[font=\normalfont]{section,subsection,subsubsection}
\RedeclareSectionCommands[
beforeskip=-1.5cm,
afterskip=1cm,
font=\normalfont
]{section,subsection}
\RedeclareSectionCommand[
beforeskip=-12pt,
afterskip=6pt,
font=\normalfont
]{subsubsection}
\newcommand*\sectionnumberfboxsep{2mm}
\newcommand*\subsectionnumberfboxsep{1.7mm}
\newcommand*\subsubsectionnumberfboxsep{1.5mm}
\renewcommand*\sectionformat{{%
\setlength\fboxsep{\sectionnumberfboxsep}%
\setlength\fboxrule{1pt}%
\colorbox{black}{\bfseries\textcolor{white}{\thesection}}%
}}
\renewcommand*\subsectionformat{{%
\setlength\fboxsep{\subsectionnumberfboxsep}%
\setlength\fboxrule{1pt}%
\fbox{\bfseries\thesubsection}%
}}
\renewcommand*\subsubsectionformat{{%
\setlength\fboxsep{\subsubsectionnumberfboxsep}%
\setlength\fboxrule{1pt}%
\fbox{\bfseries\thesubsubsection}%
}}
\makeatletter
\renewcommand*\sectionlinesformat[4]{%
\ifstr{#1}{section}{%
\leavevmode\rlap{\rule[\dimexpr-\sectionnumberfboxsep-1pt\relax]{\textwidth}{1pt}}%
\parbox[b]{3em}{#3}\parbox[b]{\dimexpr\textwidth-3em}{#4}\par\nobreak%
}{%
\ifstr{#1}{subsection}{%
\leavevmode\rlap{\rule[\dimexpr-\subsectionnumberfboxsep-1pt\relax]{\textwidth}{1pt}}%
\parbox[b]{4em}{#3}\parbox[b]{\dimexpr\textwidth-4em}{#4}\par\nobreak%
}{%
\ifstr{#1}{subsubsection}{%
\leavevmode\rlap{\rule[\dimexpr-\subsubsectionnumberfboxsep-1pt\relax]{\textwidth}{1pt}}%
\parbox[b]{4.75em}{#3}\parbox[b]{\dimexpr\textwidth-4.75em}{#4}\par\nobreak%
}{%
\@hangfrom{\hspace*{#2}#3}{#4}%
}}}%
}
\makeatletter
\usepackage{blindtext}% dummy text
\begin{document}
\section{Section title}
\blindtext
\subsection{This title is really really really long so I'd liked to have a line break but instead is just go on and on ...}
\blindtext
\subsubsection{Subsubsection title}
\blindtext
\end{document}