表格环境中 \renewcommand 的作用域

表格环境中 \renewcommand 的作用域

我正在通过 pandoc 从 markdown 创建 tex 文件,为了克服固有的标记限制,我想尝试重新定义latex 模板中的\emph\textbf宏,以便更好地控制格式。例如,在文档的特定部分,我希望**text**变成{\bfseries\scshape text}。它运行良好,但\renewcommand在表格环境中范围非常有限:我最终不得不将它添加到每一行。这是正常行为吗?有没有解决方法可以将范围扩展到整个表格环境?

\documentclass{article}
\newcommand{\fb}[1]{{\scshape#1}}

\begin{document}
\begin{tabular}{l}
\textbf{a}a\\
\renewcommand*{\textbf}[1]{\fb{#1}}\textbf{a}a\\
\textbf{a}a\\
\textbf{a}a
\end{tabular}
\end{document}

笔记:我知道我可以在 markdown 源中简单地使用原始 tex 标记,但为了以作者为中心的易读性,我想避免这种替代策略。

答案1

所有单元格都将其内容保存在本地。\global全局定义它:

\documentclass{article}
\newcommand\fb[1]{{\scshape#1}}

\begin{document}
\begin{tabular}{l}
\textbf{a}a\\
\global\let\textbf\fb  \textbf{a}a\\
\textbf{a}a\\
\textbf{a}a
\end{tabular}
\end{document}

但是,覆盖现有的 LaTeX 宏并不是一个好主意

答案2

正如 Zarko 所说,如果可以的话最好不要弄乱标准的乳胶宏,但是,我意识到如果您想修改自动生成的输出(例如 pandoc 的输出),有时您别无选择。

我不确定这是否是一种选择,但最简单的方法是使用tabular“本地”重新定义的自定义环境\textbf。使用此方法,这是您修改后的 MWE:

\documentclass{article}
\newcommand{\fb}[1]{{\scshape#1}}

\newenvironment{Tabular}[1]%
  {\renewcommand*{\textbf}[1]{\fb{##1}}\tabular{#1}}%
  {\endtabular}

\begin{document}
  \begin{Tabular}{l}
    \textbf{a}a\\
    \textbf{a}a\\
    \textbf{a}a
  \end{Tabular}

  \textbf{a}
\end{document}

产生预期的结果

在此处输入图片描述

要以最少的努力将其应用于所有表格环境,您可以使用:

\documentclass{article}
\newcommand{\fb}[1]{{\scshape#1}}

\let\realTabular\tabular% save real tabular environment
\let\realEndTabular\endtabular% save end real tabular environment
\renewenvironment{tabular}[1]%
   {\renewcommand*{\textbf}[1]{\fb{##1}}\realTabular{#1}}
   {\realEndTabular}

\begin{document}
  \begin{tabular}{l}
    \textbf{a}a\\
    \textbf{a}a\\
    \textbf{a}a
  \end{tabular}

  \textbf{a}
\end{document}

输出是一样的。

顺便说一句,\renewcommand*{\textbf}[1]{\fb{##1}}你可以使用\let\textbf\fb

相关内容