防止 \texttt 单词中出现连字符

防止 \texttt 单词中出现连字符

背景

文本中包含编程变量名,如report_citySUBREPORT_FILE。所有此类变量都以 标记\texttt

问题

一些变量名带有连字符:

SUBREPORT_-
FILE

我希望变量不受连字符的影响。

解决方案

一些想法:

  • 重新定义\texttt以将\mbox{...}命令包装在内容周围。最佳解决方案?
  • 使用\uchyph0。没有按预期工作。
  • 使用 定义所有单词\hyphenation{...}。该命令\hyphenation{SUBREPORT\_FILE}无法编译,定义所有单词将是第二选择。
  • 编辑整个文档并将所有变量放入\mbox{...}命令中。我认为这是最后的手段。

问题

如何防止文本被连字符?

谢谢你!

答案1

\let\temptt\texttt
\renewcommand\texttt[1]{\mbox{\temptt{#1}}}

我之所以出现这个中断是因为 Latex 不喜欢文本模式下的下划线,但我想你有办法解决这个问题......

答案2

这可能会有所帮助

\texttt{\hyphenchar\font=-1 }

在您的文档开头。但我不知道为什么需要它:当我尝试时,texttt 字体的连字符已经设置为 -1,如运行所示

\texttt{\showthe\hyphenchar\font}

但也许您使用的是不同的固定宽度字体?

答案3

问题并不texttt像下面的简短代码所表明的那样!

\documentclass{article}
\usepackage{lipsum}
\def\printhyphens{\everypar{\setbox0\lastbox \setbox1\hbox{\strut}\vbox\bgroup
\everypar{\setbox0\lastbox \nobreak\hskip0pt\relax}\dimen0=\hsize
\hsize=0pt \hfuzz\maxdimen \def\par{\endgraf \hsize=\dimen0\getlastline
\egroup\endgraf}}\offinterlineskip\breakafterword}

\def\breakafterword{\catcode`\^^M\active\catcode`\ \active}
{\breakafterword\gdef^^M{\par}\global\let ^^M}

\def\getlastline{\setbox0\lastbox\ifvoid0\let\next\nomorelines
\else\unskip\unpenalty\setbox1\hbox{\unhbox0\strut\discretionary{}{}{}%
\unhbox1}\let\next\getlastline\fi\next}

\def\nomorelines{\unhbox1}
\begin{document}

\begingroup

\printhyphens
photograph photography photographer
photographical photographically
hypersupersuperdupercali%

\texttt{fragilisticexpihalidocious}

\texttt{photographer}
\end{document}

如果我们能看到最小的可能有人就能找到解决方案!

相关内容