背景
文本中包含编程变量名,如report_city
和SUBREPORT_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}
如果我们能看到最小的可能有人就能找到解决方案!