在引文中使用重新定义的 \c 和土耳其语字符

在引文中使用重新定义的 \c 和土耳其语字符

我曾经重新定义了该命令\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

我认为重新定义这样的重音命令不是一个好主意。但对于你的情况,你可以让 \turc 更强大:

\documentclass{scrartcl}

\usepackage{natbib}

\let\turc\c
\usepackage{etoolbox}
\robustify\turc

\renewcommand{\c}{\ensuremath{c^\pi}}

\begin{document}
    \citep{ABC}

    \bibliographystyle{plainnat}
    \bibliography{lit}
\end{document}

在此处输入图片描述

答案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管它?

相关内容