如何在 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{}并使用来自包的命令下划线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符号。但请注意:这可能会导致难看的字体,取决于所用标题文本的内容……

相关内容