我正在使用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
排版函数名称并同时引用具有该名称的标签。此外,括号(以及括号内的可选内容)可以作为第二个参数传递。
现在我对结果有几个疑问:
- 我希望使用
hyphenat
withhtt
选项提供的连字符,但不需要实际的连字符(至少对于电传打字文本)。 - 我想防止在函数名称和括号之间出现连字符。
- 理想情况下,我希望 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}