笔记:此贴文已扩充以反映相关问题。请参阅更新以下:
当我使用下面的 MWE 时,我看到以下错误“未定义的控制序列”...
./Fnote.tex:15: 未定义控制序列。\hyper@normalise ...M{ }\catcode `%\active \let % @percentchar \let %@per... l.15 ...t amet.\footnote{\url{https://google.com}}
我正在使用 Scrivener 和 LaTeX。Scrivener 本身不支持尾注,因此我尝试使用以下方法\fnote宏来适应尾注。
- 该宏首先测试尾注是否存在(例如,文本字符串是否以字符 @'at' 符号开头),然后如果存在
- 从尾注开头删除 @'at' 符号,然后
- 使用 @'at' 符号后面的任何文本调用 \endnote 宏,然后
- 如果没有找到@'at'符号,则文本字符串将被视为脚注。
如果宏有效,它将允许使用脚注作为尾注,因为 Scrivener 本身并不支持尾注。
非常感谢任何想法或评论。
\documentclass{article}
\usepackage{endnotes} %
\usepackage{ifthen}
\usepackage{xstring}
\usepackage{hyperref}
\let\fnote\footnote
\renewcommand{\footnote}[1]{
\IfBeginWith{#1}{@}
{\endnote{\StrDel[1]{#1}{@}}} %%
{\fnote{#1}}
}
\begin{document}
Lorem ipsum dolor sit amet.\footnote{\url{https://google.com}}
% Nesting of \footnote{ ... \url{...} ... } throws an error.
\theendnotes %
\end{document}
更新:根据 Domenjoud 的建议,我添加了之前发布的后续项目的结果。Domenjoud 对原始帖子的解决方案(利用开头的 @ 字符从脚注切换到尾注)效果非常好。然而,尝试扩展 Domenjoud 的解决方案以用于 footnotemark+footnotetext 时,出现了一些问题。
在下面的 MWE 中,我强调了当使用初始 @ 字符通过脚注标记 + 脚注文本将脚注移动到尾注时,脚注到尾注的转换如何表现。
\documentclass{article}
\usepackage{endnotes}
\usepackage{hyperref}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage[T1]{fontenc}
% \footnote -> \fnote
\let\fnote\footnote
\renewcommand\footnote[1]{\xfnt#1\empty\xfnt}
\long\def\xfnt#1#2\xfnt{%
\def\tempa{#1}%
\def\tempb{@}%
\ifx\tempa\tempb
\endnote{#2}%
\else
\fnote{#1#2}%
\fi
}
% \footnotetext -> \fnotetext
\let\fnotetext\footnotetext
\renewcommand\footnotetext[1]{\xfntext#1\empty\xfntext}
\long\def\xfntext#1#2\xfntext{%
\def\tempc{#1}%
\def\tempd{@}%
\ifx\tempc\tempd
\endnote{#2}%
\else
\fnotetext{#1#2}%
\fi
}
% Color endnotes red
\makeatletter
\renewcommand*\makeenmark{\hbox{\textcolor{red}{\textsuperscript{\@Alph{\theenmark}}}}}
\makeatother
% Change endnotes to Alph
\makeatletter
\def\enoteformat{%
\rightskip\z@ \leftskip\z@ \parindent=1.8em
\leavevmode{\setbox\z@=\lastbox}\llap{%
\@Alph\theenmark.\enskip}%
}
\makeatother
\begin{document}
\lipsum[1][1-3] (\textcolor{cyan}{1st \textbf{Foot}note} via "\textcolor{purple}{\textbf{footnote -> fnote}}").\,\footnote{This is \textcolor{cyan}{1st \textbf{Foot}note} via "\textcolor{purple}{\textbf{footnote -> fnote}}". Google. \url{http://www.google.com}} Works Great! \par
\par
\lipsum[1][3-4] (\textcolor{cyan}{1st \textbf{End}note} via "\textcolor{purple}{\textbf{footnote -> fnote}}").\,\footnote{@\,This is the \textcolor{cyan}{1st \textbf{End}note} via "\textcolor{purple}{\textbf{footnote -> fnote}}". Google (Germany). \url{http://www.google.de}} Also works great !\par
\par
\lipsum[2][1-3] (\textcolor{cyan}{2nd \textbf{End}note} via "\textcolor{violet}{\textbf{footnotetext -> fnotetext}}").\footnotemark\;\lipsum[2][4-7] Doesn't work so great ... :( \par
\footnotetext{@\,\textcolor{cyan}{2nd \textbf{End}note} via "\textcolor{violet}{\textbf{footnotetext -> fnotetext}}". CNN (US). \url{https://www.cnn.com}} \par
\lipsum[3][1-3] (\textcolor{cyan}{3rd \textbf{End}note} via "\textcolor{violet}{\textbf{footnotetext -> fnotetext}}").\footnotemark \lipsum[3][4-7] Also doesn't work so great ... :( \par
\footnotetext{@\,\textcolor{cyan}{3rd \textbf{End}note} via "\textcolor{violet}{\textbf{footnotetext -> fnotetext}}". CNN Europe. \url{https://www.cnn.com/europe}} \par
\theendnotes % Print the endnotes
\end{document}
当脚注标记+脚注文本与 LaTeX 中的 @ 符号结合使用minipage
以将脚注转换为尾注时,抵消更加明显。
关于如何正确替换 和和和同时保留使用 @ 字符将脚注移至尾注的能力,这将受到赞赏。
谢谢。
答案1
问题是\IfBeginWith
扩展了它的参数,当\url
。使用 时,也会出现相同的错误\edef\foo{\url{whatever}}
。
解决方案是避免使用 xstring。
\documentclass{article}
\usepackage{endnotes}
\usepackage{hyperref}
\let\fnote\footnote
\renewcommand\footnote[1]{\xfnt#1\empty\xfnt}
\long\def\xfnt#1#2\xfnt{%
\def\tempa{#1}%
\def\tempb{@}%
\ifx\tempa\tempb
\endnote{#2}%
\else
\fnote{#1#2}%
\fi
}
\begin{document}
Lorem\footnote{@\url{https://www.ilo.org/wcmsp5/groups/public/---ed_dialogue/---sector/documents/meetingdocument/wcms_741659.pdf}} ipsum dolor sit amet.\footnote{\url{https://www.ilo.org/wcmsp5/groups/public/---ed_dialogue/---sector/documents/meetingdocument/wcms_741659.pdf}}
\theendnotes
\end{document}
为了回答您的最后一个问题并获得与 相同的效果,\footnotetext
您可以简单地模仿 的重新定义\footnote
。虽然\footnote
它本身使用\footnotetext
,但它应该可以工作。
\let\fnotetext\footnotetext
\renewcommand\footnotetext[1]{\xfntext#1\empty\xfntext}
\long\def\xfntext#1#2\xfntext{%
\def\tempa{#1}%
\def\tempb{@}%
\ifx\tempa\tempb
\endnote{#2}%
\else
\fnotetext{#1#2}%
\fi
}