当使用带有 htt 选项的 hyphenat 时,有没有办法抑制连字符?

当使用带有 htt 选项的 hyphenat 时,有没有办法抑制连字符?

我正在使用hyphenat带有该htt选项的包。

整个过程用于记录应用程序编程接口 (API)。考虑以下 MWE:

\documentclass{minimal}
\usepackage[english]{babel}
\usepackage[htt]{hyphenat}
\usepackage{hyperref}
\usepackage{xparse}
\usepackage{microtype}
\hyphenation{An-Obscenely-Long-Function-Name}
\NewDocumentCommand{\funcref}{mo}{
    \hyperref[#1]{\ttfamily{#1(\IfValueTF{#2}{#2}{})}}}
\begin{document}
    foo bar baz \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName}
\end{document}

这里的想法是使用自定义命令\funcref排版函数名称并同时引用具有该名称的标签。此外,括号(以及括号内的可选内容)可以作为第二个参数传递。

现在我对结果有几个疑问:

  1. 我希望使用hyphenatwithhtt选项提供的连字符,但不需要实际的连字符(至少对于电传打字文本)。
  2. 我想防止在函数名称和括号之间出现连字符。
  3. 理想情况下,我希望 LaTeX 能够根据函数名称中的大写字母来判断连字符。不过,这不是什么大问题,我可以用 Python 实现它,然后以可理解的形式将其输入到 LaTeX 中。

有任何想法吗?

答案1

使用 luatex,您可以将 \prehyphenchar 设置为零以抑制连字符。设置是根据语言进行的,因此我使用 ngerman 进行切换,但您也可以定义一种新语言:

\documentclass{article}
\usepackage[ngerman,english]{babel}
\usepackage{xparse}
\usepackage{microtype}

\usepackage{fontspec}
\newfontfamily\myfunctt{lmmono10-regular.otf}

\selectlanguage{ngerman}
\prehyphenchar=0
\hyphenation{An-Obscenely-Long-Function-Name}

\selectlanguage{english}
\prehyphenchar=`\-

\NewDocumentCommand{\funcref}{mo}{{\selectlanguage{ngerman}\myfunctt
    \hyperref[#1]{#1(\IfValueTF{#2}{#2}{})}}}

\usepackage{hyperref}

\begin{document}
AnObscenelyLongFunctionName AnObscenelyLongFunctionName AnObscenelyLongFunctionName
AnObscenelyLongFunctionName AnObscenelyLongFunctionName

    foo bar baz \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName}
\end{document}

在此处输入图片描述

使用 pdflatex,您可以执行类似操作(假设您的函数名称仅为 ascii),方法是使用 OT1 ttfont 并使用非 ascii 范围的字符作为 hyphenchar(您将在日志中收到大量缺失字符的消息):

\documentclass{article}
\usepackage[ngerman,english]{babel}
\usepackage{xparse}
\usepackage{microtype}
\usepackage[T1]{fontenc}
\DeclareRobustCommand\funcfamily
        {\fontencoding{OT1}\fontfamily\ttdefault\selectfont}
\hyphenation{An-Obscenely-Long-Function-Name}


\NewDocumentCommand{\funcref}{mo}{{%
    \funcfamily\hyphenchar\font=130
    \hyperref[#1]{#1(\IfValueTF{#2}{#2}{})}}}

\usepackage{hyperref}

\begin{document}
AnObscenelyLongFunctionName AnObscenelyLongFunctionName AnObscenelyLongFunctionName
AnObscenelyLongFunctionName AnObscenelyLongFunctionName

    foo bar baz \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName} \funcref{AnObscenelyLongFunctionName}
\end{document}

相关内容