如何让 \StrLeft 将数学表达式理解为标题中的完整单词?

如何让 \StrLeft 将数学表达式理解为标题中的完整单词?

这里如何在页眉中剪切章节标题我们学习如何使用\StrLefttitleps 包。

但是,当我的标题中有数学表达式时,LaTeX 会输出错误,例如,

\section{The set  $\mathbb{A}$ }

这与第二个缺陷有关:\StrLeft破坏标题,通常会在三个点之前输出一个字母。像这样,

这些...

是否可以计算单词(包括之间的数学表达式$ $)而不是字母,以便总是在完整的单词之后剪切标题?

当通过包含 的个人命令输入数学运算时,是否可以执行相同的操作\ensuremath,例如,

\newcommand{\rr}{\ensuremath{\mathbb{R}}\xspace}

答案1

  • \StrLeft并不强大,它不应该用困难的方式扩展其论点。
  • 牢不可破的东西应该放在花括号里。

基于已接受的示例回答所引用的问题。另外,它还进行了修改,以避免出现不必要的额外点。

\documentclass[12pt]{article}
\usepackage{xstring}
\usepackage{titleps}
\usepackage{amssymb}

\newpagestyle{monstyle}{%
  \headrule
  \sethead{\thepage}{}{%
    \protect\monstyletitle
  }%
}
\makeatletter
\newcommand*{\monstyletitle}{%
    \begingroup
      \protected@edef\sectiontitle{\sectiontitle}%
      \noexpandarg
      \expandafter\StrLen\expandafter{\sectiontitle}[\mylen]%
      \ifnum\mylen>9 % or 10-12, the dots would also need place
        \expandafter\StrLeft\expandafter{\sectiontitle}{9}...%
      \else
        \sectiontitle
      \fi
    \endgroup
}
\makeatother

\begin{document}
\pagestyle{monstyle}
\section{le tres tres long titre qui prend trop de place sur la ligne}
\section{The set {$\mathbb{A}_0$} and {$\mathbb{B}$}}
\end{document}

结果

通常位置受限于标题,而不是字符数,因此回答对于我来说基于包truncate确实更有意义。

相关内容