替换书签中的连字符

替换书签中的连字符

我正在尝试用 替换s:书签中的连字符s。这是必要的,因为我的文档是使用 fraktur 字体编写的,但冒号出现在书签中,因为它们不是 fraktur。

我当前的代码如下:

\documentclass[a4paper]{scrartcl}

\usepackage{yfonts}
\addtokomafont{disposition}{\frakfamily\fraklines}

\usepackage[hidelinks]{hyperref}

\usepackage{xstring}
\newcommand{\removeLigatures}[1]{%
    \IfSubStr{#1}{s:}{%
        \StrSubstitute{#1}{s:}{s}%
    }{#1}
}

\newcommand{\mySection}[1]{%
    \section{\texorpdfstring{#1}{\removeLigatures{#1}}}
}

\begin{document}

\frakfamily

\tableofcontents

\mySection{Jus:t a tes:t}

\end{document}

我的代码似乎存在一些问题,因为我得到了一个带有文本的书签Jus:t a tes:ts:s:sJus:t a tes:t。我该如何修复这个问题以实现所需的结果?

答案1

您必须在将参数提供给 \texorpdfstring 之前进行替换。例如使用 expl3:

\documentclass[a4paper]{scrartcl}

\usepackage{yfonts}

\usepackage[hidelinks]{hyperref}



\usepackage{expl3}
\ExplSyntaxOn
\newcommand\removeLigatures[1]{%
\tl_set:Nn \l_tmpa_tl{#1}
\regex_replace_all:nnN { s: } { s } \l_tmpa_tl
}
\newcommand{\mySection}[1]{%
    \removeLigatures{#1}
    \section{\texorpdfstring{#1}{\l_tmpa_tl}}
}

\ExplSyntaxOff
\addtokomafont{sectioning}{\frakfamily}

\begin{document}

\frakfamily

\tableofcontents

\mySection{Jus:t a tes:t}

\end{document}

相关内容