有没有办法消除常用 LaTeX 命令中的“\”?

有没有办法消除常用 LaTeX 命令中的“\”?

所有命令中的“\”都需要右手小指在 LaTeX 中频繁地进行手指操作,至少对于盲打者来说是这样。我发现,虽然通过语法高亮可以使内容更易读,但它肯定会减慢速度。

那么,有没有办法,对于某些经常使用的命令,消除“\”?

例如输入:textit{some text here};;;而不是;;;等等。textbf{some more text here}quotation{some text here}item\textit\textbf\quotation\item

并不是说我介意经常伸展我的右手小指。

答案1

其他字符的转义类别代码

启动命令的转义字符不是固定的,可以更改,例如:

\catcode`\|=0 % escape category code as the backslash
|textit{some text here}; |textbf{some more text here};
|begin{quotation}...|end{quotation}

棘手的部分是找到正确的字符,该字符不会与其他用途冲突。这取决于键盘布局和文本中已使用的字符。

如果_使用,则数学模式中的下标功能可通过命令\sb(或_sb)获得。

后期处理

另一种方法是使用正则表达式对输入文件进行后处理,该表达式检查已知命令词,确保前面或后面没有字母,并在前面添加反斜杠。例如,Perl 的一个简单表达式:

s/\b(textbf|textit|item)\b/\\$1/g;

答案2

跳出 \box 的思维模式:不要寻找 TeX 解决方案,而要寻找通用解决方案。你想输入 X 来表示 Y。这就是编辑器所擅长的。至少,好的编辑器是这样的。

最好的当然,one 是vi(或vimgvim),这是盲打者的梦想成真。例如,您可以将反斜杠重新映射到更容易触及的键上。

imap # \

或者,如果这会干扰你写的其他文档,请选择性地使用插入模式缩写例如

iabbr textit \textit

将这种映射限制为仅具有扩展名的文件非常简单.tex

答案3

(对答案进行了大幅编辑,以提供进一步的概括)

这是一个基于 LuaLaTeX 的解决方案,它允许您\从分段命令\begin{<some environment>}、、、和字体形状更改命令(例如、、、和)中省略(反斜杠)字符。允许写入反斜杠字符,但这不是必需的。请注意\end{<some environment>},不需要输入任何替代字符。\item\textit\bfseries\scshape\ttfamily\

只有几个语法规则:

  • sectionsubsection指令必须放置在开始一条线。

  • item指令必须是除(可能的)空格之外的行上的第一个项目(双关语)。

  • 最后,如果你创建了不明智地命名为\bend\fend、或 的宏,它们不得带有参数——以便与 区分开来!请不要创建名为 或 的宏,\lend除非你想让下面的 Lua 代码不适合使用。\send\tend\end\xxtextrm\zzitshape


% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{amsmath}

\usepackage{luacode}
\begin{luacode*}
function add_backslash ( x )
  -- sectioning commands
  x = string.gsub ( x , "^\\?(section)"          , "\\%1" )
  x = string.gsub ( x , "^\\?(subsection)"       , "\\%1" )
  x = string.gsub ( x , "\\?(subsubsection%s-{)" , "\\%1" )
  x = string.gsub ( x , "\\?(paragraph%s-{)"     , "\\%1" )
  -- \begin and \end of environments
  x = string.gsub ( x , "\\?(begin%s-{)"      , "\\%1" )
  x = string.gsub ( x , "\\?(end%s-{)"        , "\\%1" )
  -- \item 
  x = string.gsub ( x , "^%s-\\?(item)"       , "\\%1" )
  -- \text?? (rm, sf, up, bf, it, ...)
  x = string.gsub ( x , "\\?(text[^e]%l)"     , "\\%1" )
  -- \??shape (it, sc, ...)
  x = string.gsub ( x , "\\?(%l[^e]shape)"    , "\\%1" )
  -- \??series (bf, md, ...)
  x = string.gsub ( x , "\\?(%l%lseries)"     , "\\%1" )
  -- \??family (sf, tt, ...)
  x = string.gsub ( x , "\\?(%l%lfamily)"     , "\\%1" )
return x
end
luatexbase.add_to_callback("process_input_buffer", add_backslash, "add_backslash")
\end{luacode*}

begin {document} 

section{Here}    
subsection {today,}    
 subsubsection   {gone}
   paragraph {tomorrow.}

begin{enumerate}
  item A
   item B
item C
end{enumerate}

 begin{equation}  1+1=2  end{equation}

  begin{itemize}
    item X is not equal to the following item:
    item Y
    item Z
  end{itemize}  

    begin{align} 
       a &= b\\
       c &= d
    end{align}

textit{abc}, textsc{def}, textbf{ghi}, textsf {jkl}

{itshape abc}, {scshape def}, {bfseries ghi}, {sffamily jkl}

end{document}

请注意,指令后完全没有任何反斜杠字符\end{luacode*}。我必须承认,这段代码对我来说看起来非常诡异。

在此处输入图片描述

答案4

最后,我发现自己同意 Federico Poloni 和 Rmano 的观点,认为最好重新分配按键。\我的键盘上的按键就在按键的左侧Shift,所以我使用我的 文件将/按键与按键交换,使用\~/.Xmodmapxev根据以下文件确定每个按键的键码和键符:在 Ubuntu 11.10 中交换左 Alt 和 Ctrl 键

在 ubuntu 14.04 中,使用这个http://www.knizefamily.net/russ/blog/wp-content/uploads/2012/01/keyboard-model-m-1.jpg作为我的键盘,我将以下内容添加到我的.Xmodmap文件中:

keycode 61 = backslash bar

keycode 51 = slash question

但请注意,如果您将此键用作密码,在依赖 X Window 的终端(如 gnome 终端)中,它也会重新映射该终端的键。如果它恰好是您的 sudo 密码的一部分,这可能会引起一些惊愕。这在真正的终端中不会发生。

对于 Mac 用户,我理解同样的事情可以通过登山扣

相关内容