在公式中,我经常需要相同的常量和变量以及大量的“组成”。
我想要有可读且可维护的 LaTeX 代码,所以我想到了编写 \newcommand
如下代码
\newcommand*{\Cref}{C_{\textrm{ref}}} %very short example
..
\[ \Cref \cdot U = Q \]
但已被等\Cref
使用……\usepackage{cleveref}
最后,我很快就用完了简短而漂亮的命令。
我正在寻找遇到过同样问题并且有绝妙想法的人。
答案1
定义\Cref
它在不同上下文中执行不同的事情(例如,它是否有空参数,或者它处于数学或文本模式)绝对是不可取的,因为它会造成混淆。
您可以定义一个“快捷方式”生成命令:
\makeatletter
\newcommand{\scut}[1]{\@nameuse{myscut@#1}}
\newcommand{\defineshortcut}[2]{\global\@namedef{myscut@#1}{#2}}
\makeatother
然后你可以在序言中设置
\defineshortcut{Cref}{C_{\textnormal{ref}}}
\scut{Cref}
并在文档中使用。你甚至可以说
\defineshortcut{C_ref}{C_{\textnormal{ref}}}
\scut{C_ref}
如果您愿意,可以使用。
如果\scut
感觉太长,可以使用较短的序列;\s
是免费的,而\S
打印§(因此可以重新定义它,但要小心,因为有些文档可以使用原始命令)。
可以使用“一个字符的快捷方式”,例如|
或"
(如果babel
未使用);以下定义也允许使用与相同语法的“参数化”快捷方式\newcommand
。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\scut}[1]{\@nameuse{myscut@shortcut@#1}}
\newcommand{\defineshortcut}[1]{\expandafter\newcommand\csname myscut@shortcut@#1\endcsname}
\newcommand{\useshortcutsymbol}[1]{%
\global\expandafter\chardef\csname myscut@catcode@#1\endcsname\catcode`#1\relax
\catcode`#1=\active
\begingroup\lccode`~=`#1\relax
\lowercase{\endgroup\def~##1~}{\@nameuse{myscut@shortcut@##1}}}
\newcommand{\undefineshortcutsymbol}[1]{%
\catcode`#1\csname myscut@catcode@\string#1\endcsname}
\makeatother
\defineshortcut{C}[1]{C_\textnormal{#1}}
\defineshortcut{Cref}{C_\textnormal{ref}}
\begin{document}
\useshortcutsymbol{|}
$\scut{C}{ref}\quad\scut{Cref}$
$|C|{ref}\quad|Cref|$
\undefineshortcutsymbol{|}
$|C|$
\end{document}
但是我不会使用这种“太短”的快捷方式,因为这样很容易出错。该\useshortcut
命令应该收到非特殊ASCII 字符作为其参数;高位设置字符肯定不安全,因为它们在不同的编码中被区别对待。
答案2
这是一种简单的方法:为下标“ref”创建一个命令。
\newcommand*\sref{_{\textrm{ref}}}
这使得“ref”类似于变音符号或运算符:这使得在文本中系统地引用“ref”变量变得更加容易。我经常用同样的方式定义转置和厄米伴随,例如
\newcommand*\trans{^{\textsf{T}}}
\newcommand*\herm{^\dagger}
答案3
在其他编程语言中,这通常使用以下方法解决命名空间对于 LaTeX,有名称提供的包
LaTeX 中类似 C++ 的基本命名空间。
例子:
\documentclass{scrartcl}
\pagestyle{empty}
\usepackage{amsmath}
\usepackage{namespc}
\usepackage{cleveref}
%
\newcommand{\overwritecommand}[1]{\let#1\undefined\newcommand{#1}}
%
\begin{document}
\section{First section}
\label{sec:first}
\namespace{shortcuts}{%
\overwritecommand{\Cref}{mycref}
}{}
This is the original definition: \Cref{sec:first}
\begin{shortcuts}
This is used from within the ``shortcuts'' environment: \Cref
\end{shortcuts}
\begin{align*}
\usingnamespace{shortcuts}
\text{Equation} = \text{\Cref}
\end{align*}
This is to access the macro explicitly: \::shortcuts::Cref::
\end{document}
说实话,我只是通过专门的搜索才找到它的,我以前从未见过它被使用。从现在起,我将用它来解决您描述的问题。