我正在写一本 AWK 编程书,当我解释一些事情时,我总是引用特殊的 AWK 变量,例如ORS
。是否可以这样设置 LaTeX,使这些单词在文本中始终以粗体显示,这样我就不必一直书写了\bf{ORS}
?
答案1
对于这样的工作,我通常会定义一个方便的宏:
\def\<#1>{\textbf{#1}}
现在,您可以\<ORS>
不用花费太多的开销就能说出来,而且仍然不需要为所有特殊术语定义宏。在书中,您可能想考虑如何使用此宏来创建索引。(这有点棘手,可能需要一个单独的问题。)
答案2
我不想使用大量的\newcommands
,而是定义一个宏来存储一些需要加粗的单词。这只是一个逗号分隔的列表。
\documentclass{article}
\usepackage{xspace}
\begin{document}
\makeatletter
\def\boldcommandlist{\@elt FS,\@elt OFS,\@elt RS,\@elt ORS,\@elt NR,\@elt NF,\@elt FNR,}
\def\@elt#1,{%
\expandafter\def\csname#1\endcsname{\textbf{#1}\xspace}
}
\boldcommandlist
Awk \OFS is an output equivalent of awk \FS variable.
By default awk OFS is a single space character.
Following is an awk \OFS example. Use the command \OFS.
\makeatother
\end{document}
包含\boldcommandlist
需要以粗体排版的单词:
\boldcommandlist{FS,OFS,...}
如果您愿意,稍后可以随时添加另一个。
是\@elt
元素的缩写,最初未定义。当我们给它一个定义时,它会将其参数作为下一个单词(以逗号分隔)并为其创建一个命令。是xspace
一个小包,可以正确调整命令后的间距,以正确适应标点符号等。
答案3
使用 LuaTeX,您可以在将输入传递给 TeX 之前对其进行翻译。以下是在 ConTeXt 中进行自动翻译的示例:
\usemodule[translate]
% Notice the space before the words
\translateinput [ OFS][ \bold{OFS}]
\translateinput [ FS] [ \bold{FS}]
\enableinputtranslation
\starttext
Awk OFS is an output equivalent of awk FS variable.
By default awk OFS is a single space character.
Following is an awk OFS example. Use the command OFS.
\stoptext
答案4
将 Christian 的答案与 Yiannis 的答案结合起来,您可以得到一个单一的\<...>
标记,根据参数扩展到不同的内容(粗体、斜体……)。在某些情况下,当您有不同类型的单词需要突出显示时,它可能很有用。
\documentclass{article}
\usepackage{hyperref}% used for an example.
\def\<#1>{\csname keyword@@#1\endcsname}
\begingroup
\makeatletter
\def\do#1{\expandafter\doaux\expandafter{\keyword@style{#1}}{#1}}
\def\doaux#1#2{\global\@namedef{keyword@@#2}{#1}}
\def\keyword@style#1{\textbf{#1}}
\do{FS}
\do{OFS}
\do{RS}
\do{ORS}
\do{NR}
\do{NF}
\do{FNR}
\def\keyword@style#1{#1\footnote{From the \<python> language.}}
\do{try}
\do{raise}
\def\keyword@style#1{\href{http://www.#1.org/}{#1}}
\do{python}
\do{CTAN}
\endgroup
\begin{document}
I don't know what \<OFS> is, nor \<RS>, but they seem to be parts
of the awk language. On the other hand, I know a little bit about
\<try> and \<raise>. There are many packages about \TeX\ on the
\<CTAN> website.
\end{document}