![\MakeUppercase 和 \bibleref](https://linux22.com/image/380094/%5CMakeUppercase%20%E5%92%8C%20%5Cbibleref.png)
考虑以下 MWE
\documentclass[a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{bibleref}
\usepackage{etoolbox}
\robustify{\bibleverse}
\begin{document}
Is : \bibleverse{Is}(1:1-3)
IS : \bibleverse{IS}(1:1-3)
\section{Here a reference within a title: \bibleverse{Is}(1:1-3)} % Don't work
\end{document}
如您所见,标题中有两个问题。1. Is 已被 \MakeUppercase 转换为 IS,因此 Isaiah 变成了 I Samuel!2. 书名未使用大写字母。
有什么想法吗?我认为这是一个扩展的问题,但我没有得到任何解决方案。
答案1
如果\bibleverse
可扩展,那么整个东西就可以按照开箱即用的方式工作。我不确定这是否可行,但也许值得进行简短调查,看看是否\bibleverse
可以实现可扩展bibleref
(你似乎与维护者关系很好,所以也许你可以问问他 ;-))。
为了解决这个问题,我们必须确保以下几点
\bibleverse
必须\protect
对其进行编辑或使其坚固,以便它在写入.aux
文件时不会中断。- 在 MWE 中我使用了
\protect
,但\robustify
如果你愿意的话你也可以使用整个内容。
- 在 MWE 中我使用了
- 的论点
\bibleverse
一定不能被触及\MakeUppercase
。- 在实现的 MWE 中
textcase
的\NoCaseChange
。请注意,\NoCaseChange
还需要一个\protect
,以便在.aux
写入文件时它不会扩展。
- 在实现的 MWE 中
- 生成的文本
\bibleverse
必须再次大写。- 这是比较棘手的部分。根据手册第 2.2 节中的建议,
titlecase
MWE 重新定义\BRbooktitlestyle
为注意是否启用了大写。为此,我们定义了一个可检测的版本,用于\MakeTextUppercase
设置切换。然后我们可以在\BRbooktitlestyle
- 这是比较棘手的部分。根据手册第 2.2 节中的建议,
\documentclass[a4paper]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcase}
\usepackage{bibleref}
\newtoggle{mtc@uppercase}
\newrobustcmd*{\MakeTextUppercaseDetectable}[1]{%
\MakeTextUppercase{\NoCaseChange{\toggletrue{mtc@uppercase}}#1}%
}
\let\MakeUppercase\MakeTextUppercaseDetectable
\renewcommand{\BRbooktitlestyle}[1]{%
\iftoggle{mtc@uppercase}
{\MakeTextUppercase{#1}}
{#1}}
\begin{document}
Is : \bibleverse{Is}(1:1-3)
IS : \bibleverse{IS}(1:1-3)
\section{Here a reference within a title: \protect\NoCaseChange{\protect\bibleverse{Is}(1:1-3)}}
Is : \bibleverse{Is}(1:1-3)
IS : \bibleverse{IS}(1:1-3)
\end{document}