我正在使用fontdimen
代码这个答案使内联代码示例中的空格伸展(归功于史蒂芬·柯特维茨):
\documentclass{minimal}
\usepackage{lipsum}
\newcommand*\justify{%
\fontdimen2\font=0.4em% interword space
\fontdimen3\font=0.2em% interword stretch
\fontdimen4\font=0.1em% interword shrink
\fontdimen7\font=0.1em% extra space
\hyphenchar\font=`\-% allowing hyphenation
}
\begin{document}
\texttt{\justify\lipsum[1]}
\end{document}
不幸的是,这个命令的效果\justify
是全局的:所有后续\texttt
材料都有可变宽度的空格,可以通过\texttt{\lipsum[1]}
在文档末尾添加一个附加命令来看到:前面的\justify
命令也适用于它。
我如何保存和恢复\fontdimen
参数,以便本地改变单词间空格的宽度和延伸?
答案1
您可以保存这些值并重新设置
\documentclass{minimal}
\usepackage{lipsum}
\def\savefdims{%
\edef\restorefdims{
\fontdimen2\the\font=\the\fontdimen2\font\relax
\fontdimen3\the\font=\the\fontdimen3\font\relax
\fontdimen4\the\font=\the\fontdimen4\font\relax
\fontdimen7\the\font=\the\fontdimen7\font\relax
\hyphenchar\the\font=\the\hyphenchar\font\relax}%
}
\newcommand*\justify{%
\fontdimen2\font=0.4em% interword space
\fontdimen3\font=0.2em% interword stretch
\fontdimen4\font=0.1em% interword shrink
\fontdimen7\font=0.1em% extra space
\hyphenchar\font=`\-% allowing hyphenation
}
\begin{document}
\texttt{\savefdims
\typeout{\meaning\restorefdims}%
\justify\lipsum[1]\restorefdims}
\texttt{\lipsum[1]}
\end{document}
只是\typeout
为了显示已保存命令的形式,终端将显示(为清晰起见添加了换行符)
macro:->
\fontdimen 2\OT1/cmtt/m/n/10 =5.24995pt\relax
\fontdimen 3\OT1/cmtt/m/n/10 =0.0pt\relax
\fontdimen 4\OT1/cmtt/m/n/10 =0.0pt\relax
\fontdimen 7\OT1/cmtt/m/n/10 =5.24995pt\relax
\hyphenchar \OT1/cmtt/m/n/10 =-1\relax
答案2
\fontdimen
赋值是隐式全局的,如 TeXbook 中所述。同样,的赋值也是\hyphenchar
全局的。
\fontdimen
您可以使用\spaceskip
和,而不必更改参数\xspaceskip
。
您可以定义一个\textttj
执行该作业的命令。
\documentclass[twocolumn]{article}
\usepackage{kantlipsum}
\DeclareRobustCommand{\textttj}[1]{%
\begingroup
\ttfamily
\hyphenchar\font=`\- % allowing hyphenation
\setlength{\spaceskip}{0.8em plus 0.4em minus 0.2em}%
\setlength{\xspaceskip}{1em plus 0.4em minus 0.2em}%
#1%
\endgroup
}
\AddToHook{cmd/ttfamily/after}{\hyphenchar\font=-1 }
\begin{document}
\textttj{\kant[1]}
\pagebreak
\texttt{\kant[1]}
\end{document}
请注意,打字机字体的 em 通常与字母的宽度相同,因此我将值加倍。