\MakeUppercase 和 \bibleref

\MakeUppercase 和 \bibleref

考虑以下 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(你似乎与维护者关系很好,所以也许你可以问问他 ;-))。

为了解决这个问题,我们必须确保以下几点

  1. \bibleverse必须\protect对其进行编辑或使其坚固,以便它在写入.aux文件时不会中断。
    • 在 MWE 中我使用了\protect,但\robustify如果你愿意的话你也可以使用整个内容。
  2. 的论点\bibleverse一定不能被触及\MakeUppercase
    • 在实现的 MWE 中textcase\NoCaseChange。请注意,\NoCaseChange还需要一个\protect,以便在.aux写入文件时它不会扩展。
  3. 生成的文本\bibleverse必须再次大写。
    • 这是比较棘手的部分。根据手册第 2.2 节中的建议,titlecaseMWE 重新定义\BRbooktitlestyle为注意是否启用了大写。为此,我们定义了一个可检测的版本,用于\MakeTextUppercase设置切换。然后我们可以在\BRbooktitlestyle
\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}

The header reads "HERE A REFERENCE WITHIN A TITLE: ISAIAH 1:1–3", the corresponding section heading is "Here a reference within a title: Isaiah 1:1–3"

相关内容