用向后的箭头替换连字符

用向后的箭头替换连字符

我正在用打字机字体设置目录名称。这些名称可能会很长。使用 hyphenat 包,我启用了连字功能。现在,缺少的是,连字字符被替换为向后的箭头。

因此,我想做的是

\usepackage[htt]{hyphenat}
\newcommand{\origttfamily}{}%
\let\origttfamily=\ttfamily %
\renewcommand{\ttfamily}{\origttfamily \hyphenchar\font\ensuremath{\hookleftarrow}}
\begin{document}
  \texttt{/etc/really/long{\fshyp}directory{\fshyp}name/}
\end{document}

但是,\ensuremath{\hookleftarrow}在这种情况下不起作用 - 它不是一个单个字符。

有人能给我一个解决方案吗?非常感谢!

(移自https://stackoverflow.com/questions/4749869/latex-replace-hyphenation-character-by-a-backwards-arrow

答案1

您不能将设置\hyphenchar为不同字体的字符,但可以重新定义\BreakableSlash

\documentclass{minimal}
\usepackage[htt]{hyphenat}
\newsavebox\leftarrowbox
\sbox\leftarrowbox{$\leftarrow$}
\makeatletter
\renewcommand*{\BreakableSlash}{%
  \leavevmode
  \prw@zbreak
  /%
  \discretionary{\usebox\leftarrowbox}{}{}%
  \prw@zbreak
}
\makeatother
\begin{document}
\parbox{20mm}{%
  \texttt{/etc\fshyp really\fshyp long\fshyp directory\fshyp name/}%
}
\end{document}

答案2

据我所知,\hyphenchar只能用作

\hyphenchar\font=<number>

其中\font是 TeX 字体,<number>是字体中字形的代码。例如:

\font\tenrm=cmr10
\font\tentt=cmtt10
\hyphenchar\tenrm=`\*    % set the hyphenation char of cmr10 to be *
\hyphenchar\font=`\-     % set the hyphenation char of current font to be -
\hyphenchar\tentt=-1     % set the hyphenation char of cmtt19 to be empty

(此处,\*重音符后面表示符号的字符代码*。)

也就是说,如果您使用的字体没有这个字形,您就不能使用钩左箭头符号作为连字符。

也许您可以使用一些特殊字体来解决这个问题,或者其他人有其他技巧。

还有另一种方法可以手动获取特殊连字。例如,我们可以重新定义活动字符~来执行此操作:

\def~{\discretionary{\mbox{$\hookleftarrow$}}{}{}}
\parbox{2em}{dif~fer~ent}

答案3

如果你遇到一种情况,你希望你的连字符是这样的\hookleftarrow,而菲利普的回答确实如此不是帮助,那么仍然可以选择创建虚拟字体。通过这种方式,您可以规避\hookleftarrow来自不同字体的问题以及它不是单个字符的问题。这并不像听起来那么难:如果您需要这个,我可以填写详细信息。

相关内容