我正在尝试使用包来组合我自己的页面样式。该页面样式应该在 中的scrlayer-scrpage
内容为,它将部分名称与部分编号分开,以防\vrule
\rohead
\rightmark
。
为此,我使用\ifstr{\rightmark}{}{}{\vrule…}
只要不使用 babel 包就可以正常工作的版本。但由于 babel 是必需的,我需要使用它,这让我想到了我的问题:
有没有其他方法来检查“空”\rightmark
?
或者反过来,我怎样才能知道“空”\rightmark
扩展为什么?
我试过\ifx\rightmark\empty\relax\else do that \fi
但是没有成功。
在我的例子中,我使用了 来\fbox
形象化地表示\fbox{\rightmark}
似乎像 那样扩展\fbox{}
。
例子:
\documentclass[twoside]{scrreprt}
\usepackage[automark]{scrlayer-scrpage}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\automark*[section]{}
\renewcommand*{\sectionmarkformat}{}% \rightmark without \thesection
\rohead{%
\fbox{}% reference for empty fbox
\fbox{\rightmark}%
\hspace{2ex}%
\makebox[3em][l]{%
\ifstr{\rightmark}{}{}{%
\vrule width 0.1ex height 2.5ex \hspace{2pt} \hfill \thesection}%
}%
\hspace{-3em}
}
\begin{document}
\chapter{chapter}
\lipsum[1-17]
\section{section}
\lipsum[18-25]
\end{document}
第 3 页\rohead
应该是空的(除了\fbox
该示例中的两个空的 'es),因为第一部分在第 4 页。屏幕截图显示了使用该包时的输出babel
。如果没有 babel 包,它可以按预期工作。
输出:
答案1
您可以在临时框中排版标记并测量它;如果标记仅包含零宽度框,则此方法将会失败。
\documentclass[twoside]{scrreprt}
\usepackage[automark]{scrlayer-scrpage}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lipsum}
\automark*[section]{}
\renewcommand*{\sectionmarkformat}{}% \rightmark without \thesection
\makeatletter
\newcommand{\ifemptymark}[1]{%
\begingroup
\sbox\z@{#1}%
\expandafter\endgroup
\ifdim\wd\z@=\z@
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
\rohead{%
\fbox{}% reference for empty fbox
\fbox{\rightmark}%
\hspace{2ex}%
\makebox[3em][l]{%
\ifemptymark{\rightmark}{}{%
\vrule width 0.1ex height 2.5ex \hspace{2pt} \hfill \thesection}%
}%
\hspace{-3em}%
}
\begin{document}
\chapter{chapter}
\lipsum[1-17]
\section{section}
\lipsum[18-25]
\end{document}