我想使用tikz-qtree
向使用 格式化的书籍添加树tufte-book
。在大多数情况下,它们都可以工作。但是,有一个示例不起作用。请考虑以下最小示例:
\documentclass{tufte-book}
\usepackage{tikz-qtree}
\begin{document}
\Tree [.mabubundok ma- [.bubundok \textsc{red} bundok ] ]
\end{document}
当我编译它时,我收到以下错误消息:
Package tikz Error: Giving up on this path. Did you forget a semicolon?.
但是,如果我将文档类更改为article
,它就可以正常编译:
\documentclass{article}
\usepackage{tikz-qtree}
\begin{document}
\Tree [.mabubundok ma- [.bubundok \textsc{red} bundok ] ]
\end{document}
什么原因导致了这种现象?
答案1
问题不在于 ,而在于树中tikz-qtree
的 使用。该类使用包中的命令重新定义。因此您需要改用。\textsc
tufte-book
\textsc
soul
\textsmallcaps
\documentclass{tufte-book}
\usepackage{tikz-qtree}
\begin{document}
\Tree [.mabubundok ma- [.bubundok \textsmallcaps{red} bundok ] ]
\end{document}
你可以通过比较\textsc
和来清楚地看到这一点\textsmallcaps
。前者是字母间距的,而后者是常规的\scshape
:
\documentclass{tufte-book}
\begin{document}
\textsc{foo}
\textsmallcaps{foo}
\end{document}
此示例为使用语义标记而不是直接格式化元素提供了一个很好的论据。因此,更好的代码版本是定义语法功能标记的宏,然后将其定义为\scshape
直接使用,并且仅在文档中更改一次。
\documentclass{tufte-book}
\usepackage{tikz-qtree}
\DeclareTextFontCommand{\feat}{\scshape}
\begin{document}
\Tree [.mabubundok ma- [.bubundok \feat{red} bundok ] ]
\end{document}