双字母字体样式命令 (\bf,\it,...) 会在 LaTeX 中复活吗?

双字母字体样式命令 (\bf,\it,...) 会在 LaTeX 中复活吗?

我理解\bf\it在 LaTeX 中已经过时,并且\textbf\textit是正确的,因为它们会对字体样式产生更复杂的(特别是累积的和正确的字距调整的)更改。我已阅读l2tabu 的“过时的命令和包”v. 1.8.5.7 的英文版本,第 2.1 节我了解这些规则及其原因,以及受影响的其他几个命令。

不过,我发现在讲座上使用 LaTeX 做笔记非常方便,在那种匆忙的环境中,通过任意数量的击键来缩短命令有助于让我不落后。\bf因此,它的两个字母的同类对我来说仍然非常有用,并且一旦演示结束,我就可以浏览并将所有出现的\bfet al. 替换为\textbfet al。

我的问题是:是否有计划最终\bf用等的实现来取代短字体样式命令\textbf,或者我应该期望它们\bf始终存在但过时,以便与原始 TeX 向后兼容?原始 TeX 在无数方面得到了极大的改进,但在转录的热潮中,我有时会怀念它的简洁性。

答案1

简单的答案是否定的,因为新的字体命令由于您引用的链接中的原因而更好地发挥作用。

减少输入的最佳方法是自定义编辑器。在我的编辑器(Mac 上的 TeXShop)中,我将命令\textbf{}绑定到 Command-B 和\emph{}Command-I。(我一般不使用textit{})这使得在我的源代码中使用“新”字体命令变得简单,但输入量却大大减少。

大多数编辑应该能够使用这种快捷方式。

答案2

EDIT2:现在有一个markdown包,可以与LuaTeX引擎一起使用。

根据 评论中提到的 markdown 想法@Emre,它可以用 LaTeX 编码。例如,下面的代码使*italics***bold**工作(也可以嵌套)。

\documentclass{article}
\makeatletter
\newcommand{\star@out}{%
  \star@ifnext{\bgroup\bfseries\let\star@current\star@inbf\@gobble}%
              {\bgroup\itshape\let\star@current\star@init}}
\newcommand{\star@inbf}{%
  \star@ifnext{\egroup\@gobble}{\bgroup\itshape\let\star@current\star@initbf}}
\newcommand{\star@init}{%
  \star@ifnext{\bgroup\bfseries\let\star@current\star@initbf}{\egroup}}
\newcommand{\star@initbf}{\star@ifnext{\egroup\@gobble}{\egroup}}
\let\star@current\star@out

\newcommand{\star@ifnext}[2]{%
  \def \reserved@a {#1}%
  \def \reserved@b {#2}%
  \futurelet \@let@token \star@ifnext@aux 
}
\begingroup
\catcode`\*=13
\@firstofone{\endgroup
  \newcommand{*}{\star@current}
  \newcommand{\star@ifnext@aux}{%
    \ifx \@let@token *\let \reserved@c \reserved@a 
    \else             \let \reserved@c \reserved@b 
    \fi 
    \reserved@c
  }
}
\makeatother

\AtBeginDocument{\catcode`\*=13}


\begin{document}

Hello, *th**i**s* is a **test, *to see* whether** it works.

\end{document}

根据 Hendrik Vogt 的建议进行编辑。构造

\begingroup
\catcode`\*=13
\@firstofone{\endgroup ... }

确保*参数中的每个\@firstofone都有 catcode 13。也就是说,启动一个组,其中*是活动的,然后\@firstofone不执行任何操作,只是强制 TeX 读取其参数,将输入文件的字符转换为标记(catcode 固定,除非有人稍后使用\scantokens),然后该组以 结束\endgroup。 的 catcode*被恢复,这意味着*稍后读取的任何 (即 参数中的 除外\@firstofone)都将是 catcode 12(其他)。这种构造相对于执行的优势\catcode`=13之前和\catcode`=12之后是,的 catcode*会保留其原有的任何值,即使它不是12

答案3

为了扩展艾伦的好答案(并重申他的“') 还有另一个重要原因,现在不推荐使用\bf\it:它们很短,易于输入,但没有语义。LaTeX 试图在其标记中分离内容和格式,而这些字体更改命令破坏了这种理想。

粗略地说,作为文档一部分经常输入的命令应该简短而有意义;定义格式决策的命令应该长而具有描述性。

答案4

首先,关于在 LaTeX 文档中使用基于 PlainTeX 的字体切换命令\rm\sf\tt等:尽管 LaTeX2e 内核没有定义这些命令,但实际上它们仍然可用如果您可以使用“标准”文档类之一—— articlereportbook——或基于这三个类的文档类。有关如何在、和类中实现、等的更多信息\rm,请参见\sf,例如articlereportbook这个答案发帖有什么理由不使用 \let 将已弃用的控制序列重新定义为当前推荐的控制序列吗?

其次,这里有一个解决方案,它使用 LuaLaTeX 将一些简单的 markdown 类型的文本格式化“指令”转换为 LaTeX 代码。具体来说,一行输入中匹配的 、 和 字符对内*****文本*将以粗斜体大胆的, 和斜体, 分别。

执行主要工作的 Lua 函数的操作可以通过两个名为\MarkdownOn和 的LaTeX 宏来启动和终止\MarkdownOff。Lua 函数不对包含在verbatim类似环境中的材料进行操作。

在此处输入图片描述

\documentclass{article}

%% Lua-side code
\usepackage{luacode}
\begin{luacode}
in_verbatim = false
function markdown ( line ) 
-- don't operate on input if we're in a verbabim-type environment
if string.find ( line , "\\begin{[vV]erbatim}" ) then
  in_verbatim = true
elseif string.find ( line , "\\end{[vV]erbatim}" ) then
  in_verbatim = false
elseif in_verbatim == false then
  line = string.gsub ( line, "%*%*%*(.-)%*%*%*" , "\\textbf{\\textit{%1}}")
  line = string.gsub ( line, "%*%*(.-)%*%*" ,     "\\textbf{%1}")
  line = string.gsub ( line, "%*(.-)%*" ,         "\\textit{%1}" )
end
return line
end
\end{luacode}

%% TeX-side code
\newcommand\MarkdownOn{\directlua{luatexbase.add_to_callback( 
   "process_input_buffer", markdown, "markdown" )}}
\newcommand\MarkdownOff{\directlua{luatexbase.remove_from_callback( 
   "process_input_buffer", "markdown" )}}

\setlength\parindent{0pt} % just for this example

\begin{document}
\MarkdownOn
Lua function \texttt{markdown} turned on:

*italic*, **bold**, ***bold italic***

\bigskip
A line inside a \texttt{verbatim} environment:

\begin{verbatim}
*italic*, **bold**, ***bold italic***
\end{verbatim}

\bigskip
\MarkdownOff
Lua function \texttt{markdown} turned off:

*italic*, **bold**, ***bold italic***
\end{document}

相关内容