如果我使用以“if”开头的 \def 名称会怎样

如果我使用以“if”开头的 \def 名称会怎样

按照此回答是否可以在 LaTeX 中使用某种国际化?我正在建立自己的词典。

编译文件时出现此错误:

! Use of \if doesn't match its definition.

我想这就是为什么我命名了一个学期作为if_foreign_buyer

\def \if_foreign_buyer{You can only...}

删除启动if即可解决问题

除了不以 if

此外,我想用下划线开头所有术语_,以便我可以使用命令抓取它们sed并根据主文件中的术语创建字典。

这似乎也是不允许的。真的吗?

答案1

这里的问题是,_宏名称中不允许使用非字母,例如,不能将其视为名称的一部分。任何在和之后的\def\themacro文本{视为参数文本必须与实际输入相匹配。使用您的代码,您将 TeX 原语(重新)定义\if为一个宏,该宏等待并_foreign_buyer在其后删除并将其替换为You can only...。然后第一次使用\if(在包或 LaTeX 核心宏内)而后面没有跟随时_foreign_buyer会引发 TeX 错误。

你不应该使用_宏名称的一部分,如果你这样做,你需要确保它们具有正确的猫码,即11”",在定义和使用时。这可以使用\catcode`\_=11\relax但不推荐,并且会破坏依赖_于数学模式下下标命令的默认含义的代码。

if在宏名称前面有不是问题,完全没问题。唯一的限制是\ifxxxs ,由 定义\newif,假定它们以 开头if。然后总是去掉前两个字母以产生\xxxtrue\xxxfalse。但这不会影响宏定义。

答案2

_如果你在命令名称中使用,几乎没有什么不好的,只要你有

\catcode`\_=11

在开始定义这些命令之前,永远不要恢复选择。

_您甚至可以通过添加继续在数学公式中使用

\mathcode`\_=\string"8000
\begingroup
\catcode`\_=\active
\global\let_\sb
\endgroup

然而,这样的命名方案是非标准的,绝对不值得推荐。对于某些babel语言来说,它甚至可能会出错。

我不知道如何

\command_with_underscore

将提高可读性

\NEcommand

这很容易搜索。

举个例子,只是为了说明这是如何工作的。

\documentclass{article}

% Start of document commands
\catcode`\_=11
\mathcode`\_=\string"8000
\begingroup
\catcode`\_=\active
\global\let_\sb
\endgroup

\newcommand{\foreign_buyer}{whatever}

\begin{document}
Here we use \foreign_buyer, and also a formula $a_{1}$.
\end{document}

在此处输入图片描述

以...开头的命令名\if绝对不是好习惯,除非它是一个真实的条件,以 引入\newif


请注意,如果没有\catcode`\_=11,当你说

\def\if_foreign_buyer{...}

你实际上(重新)定义了非常重要的原始命令\if,这肯定会导致灾难任何文档。


注意:该命令\sb由 LaTeX 内核定义\let\sb=_,因此当修改下划线字符的类别代码时,其含义不会改变。因此它始终可以替代下划线字符。

在这个应用程序中,我们告诉 TeX_在数学模式下应该像命令一样运行,它会扩展为\sb,也就是说它会做正确的事情。但是,依赖于 的存在的宏_会被欺骗,因此某些包或宏可能会失败(不常用,但我见过一些宏测试以下 的情况_)。

答案3

使用连字符会更简单:

\documentclass{minimal}
\makeatletter
\@namedef{if-foreign-buyer}{You can only...}
\makeatother
\begin{document}

\csname if-foreign-buyer\endcsname

\end{document}  

答案4

\documentclass{article}
\makeatletter
\let\mydef\@namedef
\let\myuse\@nameuse
\makeatother

\begin{document}

\mydef{foreign_buyer}{jfbu}
\mydef{foreign_seller}{egreg}


The foreign seller \myuse{foreign_seller} is definitely infinitely more of a
\TeX pert than the foreign buyer \myuse{foreign_buyer}.


\end{document} 

相关内容