我对一些定理使用了对话框样式,通过使用下面的代码,效果很好。
\documentclass[a4paper,11pt,twoside]{book}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{amsthm}
\usepackage{environ}
\usepackage{tikz}
\usetikzlibrary{shapes,snakes} % Για φάνσι κουτακια
\theoremstyle{plain}
\newtheorem{theo}{Sometheorem}[chapter]
\tikzstyle{BoxDialog} = [draw=black, fill=white, very thick,
rectangle callout, rounded corners, densely dashed,callout relative pointer={(-0.4cm,-0.4cm)}, inner sep=4pt, inner ysep=8pt]
\tikzstyle{TitlTheo} =[fill=white, text=black]
\NewEnviron{dialogtheo}[1]{
\begin{tikzpicture}
\node [BoxDialog] (boxtheo){%
\begin{minipage}{0.9\textwidth}
\BODY
\end{minipage}
};
\node[TitlTheo] at (boxtheo.north) {\textbf{#1}};
\end{tikzpicture}
}
\begin{document}
\begin{dialogtheo}{title theorem}
\begin{theo}
theorem theorem theorem theorem theorem theorem theorem theorem theorem theorem
\end{theo}
\end{dialogtheo}
\end{document}
但是当我像这样将center
环境包裹起来时:dialogtheo
\NewEnviron{dialogtheo}[1]{
\begin{center}
\begin{tikzpicture}
\node [BoxDialog] (boxtheo){%
\begin{minipage}{0.9\textwidth}
\BODY
\end{minipage}
};
\node[TitlTheo] at (boxtheo.north) {\textbf{#1}};
\end{tikzpicture}
\end{center}
}
我有此错误报告:
!LaTeX 错误:出现错误 — — 可能缺少 \item。
这是log
-file。
问题是什么?
PS:如果我有 ceepcenter
环境,但我删除了theo
,一切都又恢复正常了。
答案1
如果您的目标是使对话框居中,而不是使用环境center
,那么您应该尝试在环境内容的末尾\centering
使用:\par
\NewEnviron{dialogtheo}[1]{
\centering
\begin{tikzpicture}
\node[BoxDialog] (boxtheo){
\begin{minipage}{0.9\textwidth}
\BODY
\end{minipage}
};
\node[TitlTheo] at (boxtheo.north) {\textbf{#1}};
\end{tikzpicture}\par
}
这\par
很重要,否则气泡根本不会居中。
答案2
如果您尝试将一个定理放入center
环境中,您会发现它不起作用。
编辑:我的意思是代码:
\begin{center}
\begin{theo}
test
\end{theo}
\end{center}
将导致非中心定理。
因此,我的解决方案是一个“黑客”,只需根据需要缩进您的环境:
\documentclass[a4paper,11pt,twoside]{book}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{amsthm}
\usepackage{lipsum}
\usepackage{environ}
\usepackage{tikz}
\usetikzlibrary{shapes,decorations} % Για φάνσι κουτακια
\theoremstyle{plain}
\newtheorem{theo}{Sometheorem}[chapter]
\tikzstyle{BoxDialog} = [draw=black, fill=white, very thick,
rectangle callout, rounded corners, densely dashed,callout relative pointer={(-0.4cm,-0.4cm)}, inner sep=4pt, inner ysep=8pt]
\tikzstyle{TitlTheo} =[fill=white, text=black]
\newsavebox{\theobox}
\newlength{\theoidentlength}
\NewEnviron{dialogtheo}[1]{
\savebox\theobox{\hbox{
\begin{tikzpicture}
\node [BoxDialog] (boxtheo){%
\begin{minipage}{0.6\textwidth}
\BODY
\end{minipage}
};
\node[TitlTheo] at (boxtheo.north) {\textbf{#1}};
\end{tikzpicture}}}
\setlength\theoidentlength{\dimexpr(\textwidth-\wd\theobox)/2\relax}
\noindent\hspace*{\theoidentlength}\usebox{\theobox}
}
\begin{document}
\lipsum[1]
\begin{dialogtheo}{title theorem}
\begin{theo}
theorem theorem theorem theorem theorem theorem theorem theorem theorem theorem
\end{theo}
\end{dialogtheo}
\end{document}
PS:我的解决方案只是一种替代方案[我认为如果居中失败,它在很多情况下可能会有用],只是添加了这种(替代)方法。