我正在尝试编写一个参考书目,它不会接受包含 ogonek 的人的名字。我没有使用\k
,我需要它来做其他事情,所以我使用了\let\ogonek\k
,\newcommand{\eogonek}{\ogonek{e}}
因为 BibTeX 曾经遇到过以 开头的任何内容的问题\o
。.bbl
生成的文件以
\begin{thebibliography}{{St{\}}02}
以人名开头(无意义的{\}
是 e-ogonek 应该出现的位置),然后书目将无法编译,因为它缺少}
。我知道这应该是开头的宽度参数,我可以用另一个名称替换它,以及\bibitem
同样损坏的 ,但我只想能够正常编译,而不必.bbl
每次都手动编辑 。我确实有\usepackage[T1]{fontenc}
其他各种东西。这曾经在另一个系统上运行过。我目前正在使用 MacTeX。
编辑:我终于整理出了一个 MWE。这是 .tex 文件:
\documentclass{article}
\usepackage[T1]{fontenc}
\let\ogonek\k
\newcommand{\eogonek}{\ogonek{e}}
\renewcommand {\k} {k}
\bibliographystyle{alphaurl}
\begin{document}
St{\ogonek{e}}pie{\'n}~\cite{stepien2002formal} showed...
\bibliography{bibshort}
\end{document}
以下是 .bib 文件的相关部分:
@article{stepien2002formal,
author = "{St{\eogonek}pie{\'n}}, Zofia",
journal = "Geom. Dedicata",
number = "1",
pages = "37--45",
publisher = "Springer",
title = "{On formality of a class of compact homogeneous spaces}",
volume = "93",
year = "2002",
doi = "10.1023/A:102031393"
}
我用路径编译它txs:///pdflatex | txs:///bibtex | txs:///pdflatex | txs:///pdflatex | txs:///view-pdf
。
生成的.bbl 文件如下。
\begin{thebibliography}{{St{\}}02}
\bibitem[{St{\}}02]{stepien2002formal}
Zofia {St{\eogonek}pie{\'n}}.
\newblock {On formality of a class of compact homogeneous spaces}.
\newblock {\em Geom. Dedicata}, 93(1):37--45, 2002.
\newblock \href {http://dx.doi.org/10.1023/A:102031393}
{\path{doi:10.1023/A:102031393}}.
\end{thebibliography}
括号数量不匹配会导致这些错误,如 .log 中记录的那样:
(./bib_ogonek_min.bbl)
Runaway argument?
{{St{\}}02} \par \bibitem [{St{\}}02]{stepien2002formal} Zofia {St{\eogonek \ET
C.
! File ended while scanning use of \thebibliography.
<inserted text>
\par
l.9 \bibliography{bibshort}
I suspect you have forgotten a `}', causing me
to read past where you wanted me to stop.
I'll try to recover; but if the error is serious,
you'd better type `E' or `X' now and fix your file.
! LaTeX Error: \begin{thebibliography} on input line 1 ended by \end{document}.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.10 \end{document}
感谢您的耐心等待。
答案1
\k
无论如何,重新定义都是一个坏主意。
如果你喜欢冒险,
author = "{St{\eogonek}pie{\'n}}, Zofia",
应该
author = "St{\eogonek}pie{\'n}, Zofia",
更好的是,使用
author = {St{\eogonek}pie{\'n}, Zofia},
现在你知道为什么重新定义\k
是一个坏主意了。事实上,在文档中,
[Stke02]
而不是参考书目中预期的 [Stę02]。
有什么解决方法吗?是的,不重新定义\k
。
问题在于hyperref
在于期望所有 LICR 命令(LaTeX 内部字符表示)不是需要重新定义,因为其内部必须进行多次编码切换。如果你这样做
\show\ogonek
之后\begin{document}
,你会看到
> \ogonek=macro:
->\PD1-cmd \k \PD1\k .
如果你不加载hyperref
,那么你的方法可能会有效。