如何在 KOMA-script 中製作底線居中的標題?

如何在 KOMA-script 中製作底線居中的標題?

所以我嘗試製作下劃線居中的標題:
居中的答案來了這裡這裡

現在我的問題是,我如何使它帶有下劃線:\ul它不起作用(文件無法編譯,並且uline我得到醜陋的下劃線:
在此輸入影像描述

這是 MWE:

\documentclass{scrartcl}

\usepackage{fontspec,adforn,ulem,soul}

\makeatletter

\addtokomafont{section}{\centering}  
\addtokomafont{subsection}{\centering}
\renewcommand{\sectionlinesformat}[4]{%
    %\@tempswafalse
        \ifstr{#1}{section}{%
                {\@hangfrom{{{#3}{#4}\adforn{12}}}}
        }
        {\ifstr{#1}{subsection}{%
                {\@hangfrom{\uline{{{#3}{#4}\adforn{24}}}}}%
        }
    {\@hangfrom{\hskip#2#3}{#4}}}%
}\makeatother

\begin{document}

\part{ABC}

\section{abc}

\subsection{abcd efgh abcd efgh iiii hhjjgghgg abcd efgh abcd efgh iiii hhjjgghgg abcd efgh abcd efgh iiii hhjjgghgg}
\end{document}

PS 對於我得到答案的部分這裡但它也不起作用。
這是關於使用\ul或者\uline
如果我把parbox這個寫成我得到的:
在此輸入影像描述 這是相關行:

{\ifstr{#1}{subsection}{%
                {\@hangfrom{\uline{\parbox{\linewidth}{{#3}{#4}\adforn{24}}}}}%
        }

您是否知道它如何正常工作和外觀,並且文字可以多於一行居中和下劃線?

謝謝你!

答案1

若要直觀地了解您的情況下劃線的問題,請參閱以下程式碼。它是基於根據我的回答\ul{}並在package 中的命令中使用下劃線soul。另請參閱您使用的內容\adforn{}位於章節和小節的標題中:

\documentclass{scrartcl}

\usepackage{fontspec,adforn}
\usepackage{soul}


\begin{document}

\renewcommand\raggedsection{\centering}

\part{ABC}

\section{\ul{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{\ul{def} \adforn{24}} % <===================================

\section{\ul{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 \protect\adforn{12}}} % <===============
\end{document} 

結果:

在此輸入影像描述

正如您所看到的\ul{...}\section如果\adforn{} 不包括在內\ul(見上圖第一個紅色圓圈)!

現在你可以嘗試\adforn加入\ul類似

\subsection{\ul{def \adforn{24}}}

結果有9個錯誤。

正如您所看到的,上圖中標有第二個紅色圓圈,您可以使用它\protect\adfarn來編譯而不會出現錯誤,但結果很醜陋(第二個紅色圓圈)。

結論:

  • \adforn您可以在不使用或的情況下使用居中底線
  • 您可以使用\adforn居中但不帶底線

我建議省略下劃線!

基於關於這個答案中的第二個MWE你可以做

\documentclass{scrartcl}

\usepackage{fontspec}
\usepackage{adforn}
\usepackage{soul} % <===================================================

\renewcommand\raggedsection{\centering}

\let\originalsectionlinesformat\sectionlinesformat
\renewcommand{\sectionlinesformat}[4]{%
  \originalsectionlinesformat{#1}{#2}{#3}{\ul{#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}

為標題添加下劃線\section,並且\subsection不添加自動添加的\adforn符號。但請注意:這可能會導致難看的排版,取決於所使用的標題文字的內容...

相關內容