我试图实现listofsymbol
在带后缀调用时获取生成的列表中列出的变量的结果-dot
。我还试图找到一种dot
使用下标将变量居中的方法(不使用包的下标列表功能)。
为此,我们\checkUnderscore
实现了一个宏,尝试_
在字符串中查找字符,在下标前拆分并插入命令。
但是如果宏有一个\mathbf
指令,那么点就会打印在变量的最左边。
我找不到此行为的解决方案,但我认为这是我的宏中的一个错误。您有什么想法吗?提前致谢。
一个简单的例子:
\documentclass{article}
\usepackage{xstring}
\usepackage[final]{listofsymbols}
\newcommand{\checkUnderscore}[1]{\IfSubStr{#1}{_}{\dot{\StrBefore{#1}{_}}_{\StrBehind{#1}{_}}}{\dot{#1}}}
\makeatletter
\renewcommand{\@createsym}[3]
{\expandafter\newcommand\expandafter{\csname#2\endcsname}{\relax\ensuremath{#3}\spaceaftersym\expandafter\protected@xdef\csname#2isused\endcsname {yes}} %evntl. gdef
\expandafter\newcommand\expandafter{\csname#2doc\endcsname}{#1}
\expandafter\newcommand\expandafter{\csname#2tabdoc\endcsname}{\ensuremath{#3} & #1}
\expandafter\newcommand\expandafter{\csname#2isused\endcsname}{no}
\expandafter\newcommand\expandafter{\csname#2dot\endcsname}{\relax\ensuremath{\expandafter\checkUnderscore#3}\spaceaftersym\expandafter\protected@xdef\csname#2isused\endcsname {yes}}}
\makeatother
\opensymdef
\newsym[Test A]{symA}{x}
\newsym[Test B]{symB}{x_{p}}
\newsym[Test C]{symC}{\mathbf{x}}
\newsym[Test D]{symD}{\mathbf{x}_{p}}
\closesymdef
\begin{document}
\begin{itemize}
\item Here's my symbol $\symAdot$,
\item and the other one with subscript $\symBdot$,
\item and the other one bold $\symCdot$,
\item and the other bold one with subscript $\symDdot$,
\end{itemize}
\listofsymbols
\end{document}
答案1
在所有情况下,只需\dot
在对象前面写上,就行了,只是不要添加额外的括号。下划线测试是不必要的。
\documentclass{article}
\usepackage[final]{listofsymbols}
\makeatletter
\renewcommand{\@createsym}[3]
{\expandafter\newcommand\expandafter{\csname#2\endcsname}{\relax\ensuremath{#3}\spaceaftersym\expandafter\protected@xdef\csname#2isused\endcsname {yes}} %evntl. gdef
\expandafter\newcommand\expandafter{\csname#2doc\endcsname}{#1}
\expandafter\newcommand\expandafter{\csname#2tabdoc\endcsname}{\ensuremath{#3} & #1}
\expandafter\newcommand\expandafter{\csname#2isused\endcsname}{no}
\expandafter\newcommand\expandafter{\csname#2dot\endcsname}{\relax
\ensuremath{\dot #3}\spaceaftersym\expandafter\protected@xdef\csname#2isused\endcsname {yes}}}
\makeatother
\opensymdef
\newsym[Test A]{symA}{x}
\newsym[Test B]{symB}{x_{p}}
\newsym[Test C]{symC}{\mathbf{x}}
\newsym[Test D]{symD}{\mathbf{x}_{p}}
\closesymdef
\begin{document}
\begin{itemize}
\item Here's my symbol $\symAdot$,
\item and the other one with subscript $\symBdot$,
\item and the other one bold $\symCdot$,
\item and the other bold one with subscript $\symDdot$,
\end{itemize}
\listofsymbols
\end{document}