所有命令中的“\”都需要右手小指在 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
(或vim
或gvim
),这是盲打者的梦想成真。例如,您可以将反斜杠重新映射到更容易触及的键上。
imap # \
或者,如果这会干扰你写的其他文档,请选择性地使用插入模式缩写例如
iabbr textit \textit
将这种映射限制为仅具有扩展名的文件非常简单.tex
。
答案3
(对答案进行了大幅编辑,以提供进一步的概括)
这是一个基于 LuaLaTeX 的解决方案,它允许您\
从分段命令\begin{<some environment>}
、、、和字体形状更改命令(例如、、、和)中省略(反斜杠)字符。允许写入反斜杠字符,但这不是必需的。请注意\end{<some environment>}
,不需要输入任何替代字符。\item
\textit
\bfseries
\scshape
\ttfamily
\
只有几个语法规则:
section
和subsection
指令必须放置在开始一条线。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
,所以我使用我的 文件将/
按键与按键交换,使用\
~/.Xmodmap
xev
根据以下文件确定每个按键的键码和键符:在 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 用户,我理解同样的事情可以通过登山扣。