我想更新命令,这可以通过或\t
轻松完成,但如果该定义与 hyperref 一起使用,则会产生错误。如何让我的定义覆盖该定义?这会有什么影响?\RenewDocumentCommand
\renewcommand
hyperref
\documentclass{article}
\RenewDocumentCommand{\t}{ }{foobar}
% \usepackage{hyperref} % Uncommenting this results in errors.
\begin{document}
\t
\end{document}
PS - 我之所以使用它,\RenewDocumentCommand
是因为使用它生成星号变体相对容易。我也需要开发命令的星号变体\t
,因此我需要一个可以轻松完成该任务的命令。
答案1
装好后放上hyperref
:
\usepackage{hyperref}
% ...
\RenewDocumentCommand{\t}{ }{foobar}
导致错误的原因hyperref
似乎是因为它定义\t
为一个需要参数的平局。这会覆盖您的定义,留下\t
抓取\end
作为它的参数...这会导致问题。
我建议使用比更具描述性的内容\t
,因为这些速记单字符宏通常保留用于字母/符号上的变音符号。
答案2
在您自己的文档中,您可以根据自己的意愿重新定义命令,但您正在编写一个包,而包必须注意适应 LaTeX 生态系统。您用覆盖现有命令,然后\Renew
您会收到 hyperref 错误。两者都应该敲响警钟。
原始 tipa 定义\t
如下:
\DeclareTextCommand{\t}{T3}[0]{\@ifstar{\tipaloweraccent[.3ex]{60}}%
{\tipaupperaccent[-.1ex]{62}}}
因此,它是一个依赖于编码的命令。如果您\t
在小文档中尝试,或者检查定义,您会发现 LaTeX 本身只定义了 OML 定义。因此,您可以安全地提供 TU 定义。这可以以与 tipa 类似的方式完成。请注意,hyperref 无法识别书签中的星号,因为这是 tipa 的一项发明,尚未延续(也许无法延续,我没有测试)。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{charissil}
\usepackage{hyperref}
\makeatletter
\newcommand\my@tlowertie[1]{#1^^^^035c}
\newcommand\my@tuppertie[1]{#1^^^^0361}
\DeclareTextCommand{\t}{TU}{\@ifstar{\my@tlowertie}{\my@tuppertie}}
\makeatother
\begin{document}
\section{ \t*a \t a }
\t*a \t a
\end{document}