\sethead 中带有 IfStrEq 公式的章节标题

\sethead 中带有 IfStrEq 公式的章节标题

我想将其包含在\sethead章节标题中。我使用\IfStrEq如下公式:

IfStrEq{\bottitlemarks\sectiontitle}{\firsttitlemarks\sectiontitle}{\firsttitlemarks \sectiontitle}{\firsttitlemarks \sectiontitle \:- \bottitlemarks \sectiontitle}

但它总是返回false。甚至底部部分标题也等于第一部分标题……

这是我的 tex 文件的一个简短示例:

\documentclass[a4paper,12pt,twoside,notitlepage]{report}
\usepackage[T1]{fontenc} %system kodowania fontów
\usepackage[polish]{babel}
\usepackage{xifthen, xstring}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \IfStrEq \str_if_eq:nnTF
\ExplSyntaxOff
\newcommand{\bottomTitle}{\bottitlemarks\sectiontitle}
\newcommand{\topTitle}{\firsttitlemarks\sectiontitle}

\renewcommand{\thesection}{\arabic{section}}
\usepackage{titleps,lipsum}
\newpagestyle{main}{
\sethead
  [\thepage]
  []
  [\IfStrEq{\topTitle}{\bottomTitle}{\firsttitlemarks \sectiontitle}{\firsttitlemarks \sectiontitle \:- \bottitlemarks \sectiontitle}]
  {\IfStrEq{\firsttitlemarks \sectiontitle}{\bottitlemarks \sectiontitle}{\firsttitlemarks \sectiontitle}{\firsttitlemarks \sectiontitle \quad - \quad \bottitlemarks \sectiontitle}}
  {}% centre
  {\thepage}% right
  \setheadrule{.4pt}% Regular header rule
}
\pagestyle{main}
\begin{document}
    \section{blah}
    a
\end{document}

在标题栏中有两倍的部分标题,但我只创建了一个部分,所以第一部分 == 底部部分

答案1

有两个问题:首先,你的\IfStrEq被定义为\str_if_eq:nnTF,因此在比较之前它不会扩展字符串。因此,即使例如\topTitle\bottomTitle会扩展为相同的值,它们在 看来也是不同的,\IfStrEq因为未扩展的文本是不同的。这可以通过使用 来修复\str_if_eq_x:nnTF,因此替换

\cs_set_eq:NN \IfStrEq \str_if_eq:nnTF

\cs_set_eq:NN \IfStrEq \str_if_eq_x:nnTF

其次,参数仅被展开,但不会被 TeX 的肠胃执行,因此像这样的命令\bottitlemarks在那里不起作用。所以你必须在 之外调用\bottilemarks/ 。你不能在调用期间同时激活两者,但你可以在宏中保存其中一个:\firsttitlemarks\IfStrEq\IfStrEq\sectiontitle

\documentclass[a4paper,12pt,twoside,notitlepage]{report}
\usepackage[T1]{fontenc} %system kodowania fontów
\usepackage[polish]{babel}
\usepackage{xifthen, xstring}
\usepackage{expl3}
\ExplSyntaxOn
\cs_set_eq:NN \IfStrEq \str_if_eq_x:nnTF
\ExplSyntaxOff
\renewcommand{\thesection}{\arabic{section}}
\usepackage[extramarks]{titleps}
\usepackage{lipsum}
\makeatletter
\newpagestyle{main}{
  \sethead
  [\thepage]
  []
  [%
    \bottitlemarks
    \let\botsectiontitle\sectiontitle
    \toptitlemarks
    \IfStrEq{\sectiontitle}{\botsectiontitle}{%
      \sectiontitle
    }{%
      \sectiontitle \quad --\quad \botsectiontitle
    }%
  ]
  {%
    \bottitlemarks
    \let\botsectiontitle\sectiontitle
    \toptitlemarks
    \IfStrEq{\sectiontitle}{\botsectiontitle}{%
      \sectiontitle
    }{%
      \sectiontitle \quad --\quad \botsectiontitle
    }%
  }
  {}% centre
  {\thepage}% right
  \setheadrule{.4pt}% Regular header rule
}
\pagestyle{main}
\begin{document}
  \section{blah}
  \lipsum
  \section{blah2}
  \section{blah3}
\end{document}

这也使用了\topmark而不是\firstmark。输出:

在此处输入图片描述

相关内容