如何保存和恢复 fontdimen 参数?

如何保存和恢复 fontdimen 参数?

我正在使用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 通常与字母的宽度相同,因此我将值加倍。

在此处输入图片描述

相关内容