如何在 LaTeX 中进行替换?

如何在 LaTeX 中进行替换?

假设 E1 是 LaTeX 中的一个表达式,其中一个条目是 x。假设 E2 是另一个表达式。如何用 E2 替换 x?

我可以将 E2 包裹在一定大小的盒子中,并让 LaTeX 用该盒子替换 x,而无需让 LaTeX 查看盒子内部并尝试重新排列其内部结构吗?

例如:如何用特定的 2*2 矩阵替换给定的 3*3 矩阵的元素?

到目前为止,答案本身都很有趣,但对我都不起作用。所以让我重申一下。假设在一个环境中,我可以毫无问题地放置文字 $x$,但我不能将矩阵或多行方程放在同一个位置,因为它与各种命令等冲突。我怎样才能让矩阵对程序的其余部分像 $x$ 一样起作用?就好像我必须在其他地方构建矩阵,将其放在一个盒子里,然后将其作为单个项目出售给 LateX,就好像它没有换行符一样。

答案1

是的,这是可能的,因为 (La)TeX 是一种基于宏的语言,这些宏是可以修改的。以第二个更具体的构造为例:“用特定的 2 x 2 矩阵替换给定 3 x 3 矩阵的元素。以下示例说明了这一点:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\newcommand{\x}{1}
\[
  \begin{bmatrix}
    3 & 2 & 8 \\
    5 & \x & 6 \\
    9 & 4 & 7
  \end{bmatrix}
\]
\renewcommand{\x}{\begin{array}{@{}cc@{}}1 & 1 \\ 1 & 1\end{array}}
\[
  \begin{bmatrix}
    3 & 2 & 8 \\
    5 & \x & 6 \\
    9 & 4 & 7
  \end{bmatrix}
\]
\end{document}

在第一个 3 x 3 矩阵中,元素\x定义为1。矩阵被复制,元素被\x重新定义为 2 x 2 数组。当然,甚至可以定义一个宏来排版 3 x 3 矩阵本身,并允许指定一个打印 的参数\x

\newcommand{\mymatrix}[1]{%
  \begin{bmatrix}
    3 & 2 & 8 \\
    5 & #1 & 6 \\
    9 & 4 & 7
  \end{bmatrix}
}

装箱是替换物品的另一种选择。例如,使用

\newsavebox{\mybox}% storage box
\savebox{\mybox}{\hbox{$begin{bmatrix}
    3 & 2 & 8 \\
    5 & 1 & 6 \\
    9 & 4 & 7
  \end{bmatrix}$}}

让你现在做

\usebox{\mybox}

类似于使用宏。宏和装箱之间的区别在于,宏通常在上下文中展开,而装箱则在原地设置(或在定义时就格式固定)。

答案2

当 Knuth 设计 TeX 时,他提供了定义宏的功能,这大致相当于其他计算机语言中的函数或过程。在 Plain TeX 中,人们可以使用\def其他构造,或者在 LaTeX 中使用\newcommand(还有许多其他变体,但为了清晰起见,我们在此省略它们)。

LaTeX 还提供了\newenvironment,这是定义环境的一个非常有用的构造。我们将使用此命令创建一种更灵活的方法,使我们能够排版任意数量的单元格和行。

输入将被捕获为,

\SetArray{llll}
\begin{Array}
  \addrow{...}
  ... 
\end{Array}

完整的 MWE 如下所示:

\documentclass{article}
\newcommand\addrow[1]{#1\\}
\newcommand\SetArray[1]{%
   \newcommand\setarray{#1}
}
\newenvironment{Array}{%
\[ \left( \begin{array}{\setarray}}{
\end{array} \right)\]}
\begin{document}
\SetArray{llll}
\begin{Array}
\addrow{1&2&3&10}
\addrow{4&5&6&10}
\addrow{7&8&9&10}
\end{Array}
\end{document}

使用更灵活的命令,可以排版任意数量的单元格和行,并且命令名称可以具有与作者的操作相似的语义。

答案3

除了命令替换之外,如果你真的想用另一个字符串替换一个字符串,可以考虑使用相当新的stringstrings包裹

\convertword{string}{ring}{rong}

将扩展为strong

相关内容