请帮我找出如何将值传递给命令,该命令具有括在(...)中的附加参数。
\usepackage{bibleref}
\usepackage{xstring}
\begin{document}
\bibleverse{Gen}(9:9)
\bibleverse{Gen}(\StrBehind{Gen 9:9}{Gen })
\end{document}
这会出现错误:
! Paragraph ended before \@bibleverse was complete.
答案1
在 中发生的赋值\StrBehind
不可扩展,因此不能直接传递给\bibleverse
。此外,如果没有完全展开, (内部) 捕获的参数\bibleverse
将无法正确拆分。您需要先存储该值,然后将扩展版本传递给\bibleverse
:
\documentclass{article}
\usepackage{bibleref,xstring}% http://ctan.org/pkg/{bibleref,xstring}
\begin{document}
\bibleverse{Gen}(9:9)
\StrBehind{Gen 9:9}{Gen }[\chapverse]
\expandafter\bibleverse\expandafter{\expandafter G\expandafter e\expandafter n\expandafter}\expandafter(\chapverse)
\end{document}
\StrBehind{<stringA>}{<stringB>}[<cmd>]
将 中的所有内容存储<stringB>
在<stringA>
中<cmd>
。适当放置的\expandafter
s 确保\chapverse
在 括号内的参数解析\bibleverse
执行之前展开。
答案2
如果您的目的是仅指定\macro{Gen 9:9}
并格式化它,就像您写的那样\bibleverse{Gen}(9:9)
,那么xstring
就不需要了:
\documentclass{article}
\usepackage{bibleref}
\makeatletter
\newcommand{\shortbibleverse}[1]{\@shortbibleverse#1\@nil}
\def\@shortbibleverse#1 #2\@nil{\bibleverse{#1}(#2)}
\makeatother
\begin{document}
\bibleverse{Gen}(9:9)
\shortbibleverse{Gen 9:9}
\end{document}
根据您的喜好重命名\shortbibleverse
。
该宏的工作原理是在(第一个)空格处拆分参数,将之前的内容作为强制参数传递,\bibleverse
将之后的内容作为括号中的可选参数传递。