将 \section、\subsection 放置在 RTL 文档的右边距

将 \section、\subsection 放置在 RTL 文档的右边距

\section我希望将它们放在右边距(在从右到左的文档中),而不是默认放置\subsection在自己的行上。

我目前的用法如下:

\documentclass{article}

\usepackage{polyglossia}
\setdefaultlanguage[calendar=hebrew, numerals=arabic]{hebrew}
\setotherlanguage{english}
\newfontfamily\hebrewfont{David CLM}

\begin{document}
\section{}
  \subsection*{א}
    אבג
  \subsection*{ב}
    דהו
\end{document}

这使:

在此处输入图片描述

相反,我想实现这一点:

在此处输入图片描述

图像中不是很清楚,但粗体文本应该位于右边距。

理想情况下,我希望每个在打印时\subsection也包含当前\section,但如果有一个\section没有任何\subsections 的,那么只\section应显示。

答案1

这个titlesec包非常适合制作各种花哨的标题。bidi只要你titlesec先加载(在这种情况下,这意味着在之前polyglossia),它就可以很好地发挥作用。所以部分答案是

\usepackage{titlesec}
\usepackage{polyglossia}
\setdefaultlanguage[calendar=hebrew, numerals=arabic]{hebrew}
\setotherlanguage{english}
\newfontfamily\hebrewfont{New Peninim MT} % I don't have David!

\titleformat{\subsection}[leftmargin]{\bfseries}{\thesection}%
  {0.6em}{}
\titlespacing*{\subsection}{2em}{0.5ex}{1em}

subsection与无星号的s一起使用时,可得出

希伯来语标题示例

一些说明:

  1. 对于 RTL 文档来说leftmargin,意味着右边距。

  2. 这取决于您决定包含子部分数字手动作为小节标题。我试图提供一种解决方案来避免这种情况,但发现,正如您可能已经发现的那样,这\renewcommand{\thesubsection}{\hebrewnumeral{\arabic{subsection}}}会导致错误而没有立即明显的原因......所以我想我可以指出的是,如果您重新排列您的小节,您将必须手动调整。

  3. 问题的最后一部分(如果我理解正确的话 - 您想隐藏单独的章节编号,除非没有子章节来显示它?)更难,因为 LaTeX 在排版标题时不知道section它是否包含任何subsections。因此,您将需要使用在以前的编译运行中写入辅助文件的信息。我看不出有一种直接使用已写入文件的信息的方法.aux- 尽管它肯定在那里 - 因此您可能需要自己写出这些信息,然后在下次运行时读回它,以决定是否设置数字section。如果这一切听起来很复杂,我很抱歉 - 它真的比困难更麻烦。我现在没有时间自己实施这些解决方案,但如果到那时还没有出现任何解决方案,我会在接下来的几天内尝试回到这个答案!


附录

如果你愿意总体上去掉章节编号(IE,忽略没有子节的节的可能性),然后在命令中\renewcommand{\thesection}{}使用 和\arabic{section}代替。您可能还想使用 来删除节号和标题剩余的额外空间。\thesection\titleformat{\subsection}\titlespacing*{\section}{0pt}{0pt}{0pt}

事实上,现在我想到,如果您愿意手动标记任何没有脚注的章节,您可以通过定义命令来使这种方法起作用,\varsection比如设置\thesection间距,排版章节标题,然后像上面那样重置。

相关内容