我想将其包含在\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
。输出: