В продолжение этого вопроса:настроить подподраздел с помощью скрипта koma
Как отцентрировать заголовки?
\renewcommand{\sectionlinesformat}[4]{%
%\@tempswafalse
\ifstr{#1}{section}{%
\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{12}}}}
}
{\ifstr{#1}{subsection}{%
\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{24}}}}%
}
{\@hangfrom{\hskip#2#3}{#4}}}%
А вот и МВЭ:
\documentclass{scrartcl}
\usepackage{fontspec,adforn}
\makeatletter
\renewcommand{\sectionlinesformat}[4]{%
%\@tempswafalse
\ifstr{#1}{section}{%
\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{12}}}}
}
{\ifstr{#1}{subsection}{%
\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{24}}}}%
}
{\@hangfrom{\hskip#2#3}{#4}}}%
}\makeatother
\begin{document}
\part{ABC}
\section{abc}
\subsection{def}
\end{document}
Я хочу выровнять заголовок раздела и заголовок подраздела по центру.
решение1
Вы можете просто добавить \centering
измененный код:
\documentclass{scrartcl}
\usepackage{fontspec,adforn}
\makeatletter
\renewcommand{\sectionlinesformat}[4]{%
%\@tempswafalse
\ifstr{#1}{section}{%
\centering\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{12}}}}
}
{\ifstr{#1}{subsection}{%
\centering\mbox{\@hangfrom{\underline{{#3}{#4}\adforn{24}}}}%
}
{\@hangfrom{\hskip#2#3}{#4}}}%
}\makeatother
\begin{document}
\part{ABC}
\section{abc}
\subsection{def}
\end{document}
с результатом:
Но если честно, зачем вы меняете внутренний формат KOMA-Script? Это не очень хорошая идея. Лучше так (и, пожалуйста, не подчеркивайте заголовки, используйте вместо этого жирный шрифт или курсив):
\documentclass{scrartcl}
\usepackage{fontspec,adforn}
\begin{document}
\addtokomafont{section}{\centering} % <==============================
\addtokomafont{subsection}{\centering} % <==============================
\part{ABC}
\section{abc test test test test test test test test test test test test
test test test test test test test test test test test test test test
test test test test test test \adforn{12}} % <========================
\subsection{def \adforn{24}} % <========================================
\end{document}
с результатом:
Таким образом, центрирование работает и для длинных заголовков разделов, в первом варианте оно работать не может!
решение2
Вы можете переопределить, \raggedsection
чтобы изменить выравнивание всех заголовков, заданное \sectionlinesformat
.
Подчеркивание возможно только для однострочных заголовков. Так что можете убрать \@hangfrom
для них.
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{adforn}
\renewcommand\raggedsection{\centering}% center headings like \section, \subsection etc.
\let\originalsectionlinesformat\sectionlinesformat
\renewcommand{\sectionlinesformat}[4]{%
\ifstr{#1}{section}{\hskip#2\underline{#3#4\adforn{12}}}%
{\ifstr{#1}{subsection}{\hskip#2\underline{#3#4\adforn{24}}}
{\originalsectionlinesformat{#1}{#2}{#3}{#4}}}}%
\usepackage{blindtext}% only for dummy text
\begin{document}
\section{abc}
\blindtext
\subsection{def}
\blindtext
\end{document}
Результат:
Если заголовки длинные, удалите (некрасивое) подчеркивание.
\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{adforn}
\renewcommand\raggedsection{\centering}
\let\originalsectionlinesformat\sectionlinesformat
\renewcommand{\sectionlinesformat}[4]{%
\originalsectionlinesformat{#1}{#2}{#3}{#4%
\ifstr{#1}{section}{\adforn{12}}
{\ifstr{#1}{subsection}{\adforn{24}}{}}%
}%
}
\usepackage{blindtext}% only for dummy text
\begin{document}
\section{abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc}
\blindtext
\subsection{def}
\blindtext
\end{document}
Результат: