我曾经重新定义了该命令\c
,因为我需要为一些我经常使用的公式添加快捷方式。不幸的是,我现在需要引用一位名字中带有 的土耳其作家。因此,我所做的就是使用 将\c{C}
的旧定义保存\c
到新命令中。考虑以下 MWE:\turc
\let\turc\c
\documentclass{scrartcl}
\usepackage{natbib}
\let\turc\c
\renewcommand{\c}{\ensuremath{c^\pi}}
\begin{document}
\citep{ABC}
\bibliographystyle{plainnat}
\bibliography{lit}
\end{document}
lit.bib:
@Book{ABC,
Title="Test",
Author="{\turc{C}}enk",
Year="2015",
Publisher="Me"
}
在参考文献中,名称正确显示,并带有相应的土耳其字符。然而,在实际参考文献中\citep
,土耳其字符被新的定义替换\c
,即被替换c^\pi
。
我猜测这与扩展问题有关,但我不知道如何解决这个问题。
答案1
答案2
当你这样做时\let\turc\c
你实际上是在定义
\def\turc{\OT1-cmd \c \OT1\c}
请注意,\OT1-cmd
是一个单一控制序列,以及\OT1\c
;它们通常不能在没有特殊技巧的情况下被编写或使用。
简单来说, 的目的\OT1-cmd
有两个:在正常排版时,它忽略后面的\c
标记并使用\OT1\c
,这会使重音符号变为变音符,但在写入文件时,它会让 LaTeX 写入\c
并忽略\OT1\c
。
因此,当看到时,LaTeX 被指示在文件\citep{ABC}
中写入.aux
\bibcite{ABC}{{1}{2015}{{{\c {C}}enk}}{{}}}
事实上,.aux
文件中的条目显示
\bibcite{ABC}{{1}{2015}{{{\c {C}}enk}}{{}}}
你就会知道哪里出了问题。
解决方案:不要重新定义\c
。您需要检查每个书目文件以进行更改\c
,\turc
如果您有一个文档未使用,c^\pi
您最终会陷入麻烦,除非您添加合适的定义以\turc
解决问题。
如果你喜欢惹麻烦,这里有一个正确定义的方法\turc
:
\def\turc#1\c#2\turc{\def\turc{#1\turc#2}}
\expandafter\turc\c\turc
请注意,如果您最终碰巧重复使用 UTF-8 编码的文件,其中出现ç
、或,Ç
则每次出现时您都会得到,除非您还重新定义了对应关系:ş
Ş
c^\pi
\DeclareUnicodeCharacter{00C7}{\turc C}
\DeclareUnicodeCharacter{00E7}{\c c}
\DeclareUnicodeCharacter{015E}{\c S}
\DeclareUnicodeCharacter{015F}{\c s}
列出可能遇到的麻烦是否足以让您明白最好不要\c
管它?