如何在整个文档中使用打字机(等宽)数字(LuaLaTeX)

如何在整个文档中使用打字机(等宽)数字(LuaLaTeX)
  • 我想拥有所有数字在一个打字机(等宽字体)字体在我的整个文档中,但对其他所有内容保留通常的衬线字体。
  • A 栏在里面如下图(由用户提供埃格尔
  • 我怎样才能实现这个目标?
  • 我想使用LuaLaTeX
  • 目前,我没有使用该fontspec包,而是使用默认字体\rmfamily作为我的主要字体。

在此处输入图片描述

答案1

这是一个无论是否有该fontspec包都可以使用的解决方案。

该解决方案由 (a) 一个名为 的 Lua 函数组成ttnumbers,该函数使用 Lua 的强大string.gsub功能将输入流中找到的所有数字实例封装在\texttt指令中,以及 (b) 两个实用 Latex 宏,称为\ttnumbersOn\ttnumbersOff,用于激活和停用该函数。请注意,和指令ttnumbers的操作不会在遇到相应宏的行上生效,而只会在\ttnumbersOn\ttnumbersOff下一个线。

在此处输入图片描述

\documentclass{article}
\usepackage{luacode} % for "\luaexec" macro
\luaexec{ %% Set up the Lua function:
   function ttnumbers ( s )
      return ( s:gsub ( "\%d+" , "\\texttt{\%0}" ) )
   end
}
\newcommand\ttnumbersOn{\directlua{luatexbase.add_to_callback(
   "process_input_buffer", ttnumbers , "ttnumbers" )}}
\newcommand\ttnumbersOff{\directlua{luatexbase.remove_from_callback(
   "process_input_buffer", "ttnumbers" )}}

\begin{document}
%% roman text font
1234567890 vs.\ 
\ttnumbersOn 
1234567890 
\ttnumbersOff

% math font
$1234567890$ vs.\
\ttnumbersOn
$1234567890$
\ttnumbersOff

% sans-serif text font
\sffamily
1234567890 vs.\ 
\ttnumbersOn 
1234567890
\end{document}

答案2

使用 lualatex 可以设置组合字体。但我认为这种排版相当糟糕。

\documentclass{article}
\usepackage{combofont}
\setupcombofont{ttnumber-regular}
 {
  {file:lmroman10-regular.otf:\combodefaultfeat} at #1pt,
  {file:lmmono10-regular.otf:mode=node;} at #1pt
 }
 {
  {},
  0x30-0x39
 }

\setupcombofont{ttnumber-bold}
 {
  {file:lmroman10-bold.otf:\combodefaultfeat} at #1pt,
  {file:lmmonolt10-bold:mode=node; } at #1pt
 }
 {
  {},
  0x30-0x39
 }

\DeclareFontFamily{TU}{ttnumber}{}
\DeclareFontShape {TU}{ttnumber}{m}{n} {<->combo*ttnumber-regular}{}
\DeclareFontShape {TU}{ttnumber}{b}{n}{<->combo*ttnumber-bold}{} 
\renewcommand\rmdefault{ttnumber}
\begin{document}
some text 1234567890 \bfseries some text 1234567890


\end{document}

在此处输入图片描述

答案3

使用 ConTeXt,可以通过字体回退机制实现这一点,您可以用另一种字体的字母替换某些字母。

\definefallbackfamily [teletypenumbers] [rm] [Latin Modern Typewriter]
  [range=digitsnormal,
   force=yes]

\definefontfamily [teletypenumbers] [rm] [Latin Modern Roman]

\setupbodyfont[10pt]

\starttext

Number test: 0123456789

\setupbodyfont [teletypenumbers]

Number test: 0123456789

\stoptext

在此处输入图片描述

相关内容