代码
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \a in {0,45,...,315}%
{\node[line width = 0pt,
rotate = \a,
anchor = west,
inner sep = 0pt,
opacity = .5]{\rule{.5cm}{.1cm}};}%
\end{tikzpicture}
\end{document}
\rotatebox
我想用和得到相同的结果,\put
但是无需 TikZ 即可使用其他有趣的方法。
第一个代码的一些解释:
anchor = west
如果我们想把规则放在同一点,这是最重要的inner sep = 0pt
删除规则周围的空白(> 0pt -> 漂亮的图片)line width = 0p
微妙!如果没有这个,中心会出现一个小白点opacity = .5
只是观察规则是如何制定的。
第一次尝试
\documentclass{article}
\usepackage{tikz} % I keep TikZ because `foreach` is useful
\begin{document}
\begin{picture}(0,0)
\foreach \a in {0,45,...,315}%
{\put(0,0){\rotatebox[origin=l]{\a}{\mbox{\rule{.5cm}{.1cm}}}}}%
\end{picture}
\end{document}
这是正常的,因为盒子放错了地方,我们可以看看为什么如果我们删除put
:
我是一个认真的人,所以我发现 这个问题以及一些好的和有用的答案所以......
第二次尝试
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand{\somespecialrotate}[3][]{%
\begingroup
\sbox\@tempboxa{\rotatebox[#1]{#2}{#3}}%
\@tempdima=-\wd\@tempboxa
\advance\@tempdima by 0.09cm % this is one of the problem
\mbox{\hskip\@tempdima\usebox\@tempboxa}%
\endgroup}%
\makeatother
\begin{document}
\begin{picture}(0,0)
\foreach \a in {-90,-45,...,90}%
{\put(0,0){\rotatebox[origin=l]{\a}{\mbox{\rule{.5cm}{.1cm}}}}}%
\put(0,0){\somespecialrotate[origin=l]{180}{\mbox{\rule{.5cm}{.1cm}}}}%
\put(0,0){\somespecialrotate[origin=l]{135}{\mbox{\rule{.5cm}{.1cm}}}}%
\put(0,0){\somespecialrotate[origin=l]{225}{\mbox{\rule{.5cm}{.1cm}}}}%
\end{picture}
\end{document}
这看起来不错,但\advance\@tempdima by 0.09cm
并不严重,如果我与第一个代码进行比较
\documentclass{article}
\usepackage{tikz}
\makeatletter
\newcommand{\somespecialrotate}[3][]{%
\begingroup
\sbox\@tempboxa{\rotatebox[#1]{#2}{#3}}%
\@tempdima=-\wd\@tempboxa
\advance\@tempdima by 0.09cm % this is one of the problem
\mbox{\hskip\@tempdima\usebox\@tempboxa}%
\endgroup}%
\makeatother
\begin{document}
\begin{picture}(0,0)
\foreach \a in {-90,-45,...,90}%
{\put(0,0){\rotatebox[origin=l]{\a}{\mbox{\rule{.5cm}{.1cm}}}}}%
\put(0,0){\somespecialrotate[origin=l]{180}{\mbox{\rule{.5cm}{.1cm}}}}%
\put(0,0){\somespecialrotate[origin=l]{135}{\mbox{\rule{.5cm}{.1cm}}}}%
\put(0,0){\somespecialrotate[origin=l]{225}{\mbox{\rule{.5cm}{.1cm}}}}%
\end{picture}%
\color{red}%
\begin{tikzpicture} [overlay]
\foreach \a in {0,45,...,315}%
{\node[rotate=\a,anchor=west,inner sep=0pt,opacity=.5]{\rule{.5cm}{.1cm}};}%
\end{tikzpicture}
\end{document}
我的问题put
如何用和 得到相同的图片rotatebox
?
答案1
非 tikz 尝试解决方案(但\foreach
为了方便而保留)。
首先,最好使用一个空的框,因为这样更容易想象。
为此,我将使用\fbox
带有 的fboxsep
,提供一些空填充。我们还将使用旋转package
。
\documentclass{article}
\usepackage{pgffor} % I keep TikZ because `foreach` is useful
\usepackage{rotating}
\fboxsep10pt
\def\transparentbox{\fbox{\hbox to 3cm{}}}
\parindent0pt
\begin{document}
\foreach \a in {0,45,...,315}{%
\turnbox{\a}{\transparentbox}}%
\end{document}
答案2
部分回答,因为我遇到了一些其他问题。我尝试了 Martin 提出的这个代码,
\mbox{\hskip\dimexpr -.5\wd\bxb+.5\bxc\relax\usebox\bxc}
但遇到了两个问题。第一个我引入了一些错误,因为结果非常糟糕,但如果我使用经典方法
\@tempdima=\wd\bxb
\advance\@tempdima by -\wd\bxc % this is one of the problem
\@tempdima=-0.5\@tempdima
\mbox{\hskip\@tempdima\usebox\bxc}%
更新在 Werner 的帮助下采用了 Martin 的建议。`dimexpr' 非常有用。现在我需要减少此代码(三个循环,三个不同的宏)。
\documentclass{article}
\usepackage{picture}
\usepackage{tikz}
\makeatletter
\newbox\bxb
\newbox\bxc
\newcommand{\somespecialrotate}[3][]{%
\begingroup
\sbox\bxb{#3}
\sbox\bxc{\rotatebox[#1]{#2}{#3}}%
\mbox{\hskip\dimexpr -.5\wd\bxb+.5\wd\bxc\relax\usebox\bxc}
\endgroup}%
\newcommand{\somespecialrotatei}[3][]{%
\begingroup
\sbox\bxb{#3}
\sbox\bxc{\rotatebox[#1]{#2}{#3}}%
\mbox{\hskip\dimexpr 0.5\wd\bxb-1.5\wd\bxc\relax\usebox\bxc}
\endgroup}%
\newcommand{\somespecialrotateii}[3][]{%
\begingroup
\sbox\bxb{#3}
\sbox\bxc{\rotatebox[#1]{#2}{#3}}%
\mbox{\hskip\dimexpr -0.5\wd\bxc\relax\usebox\bxc}
\endgroup}%
\makeatother
\begin{document}
\setlength{\fboxsep}{0pt}
\begin{picture}(0,0)
\foreach \a in {-45,0,45}%
{\put(0,0){%
\somespecialrotate[origin=l]{\a}{%
\tikz \node[minimum width =2cm,%
minimum height=4mm,%
inner sep =0pt,draw,%
line width=.4pt]{};%
}}}%
\foreach \a in {135,180,225}%
{\put(0,0){%
\somespecialrotatei[origin=l]{\a}{%
\tikz \node[minimum width =2cm,%
minimum height=4mm,%
inner sep =0pt,draw,%
line width=.4pt]{};%
}}}%
\foreach \a in {90,-90}%
{\put(0,0){%
\somespecialrotateii[origin=l]{\a}{%
\tikz \node[minimum width =2cm,%
minimum height=4mm,%
inner sep =0pt,draw,%
line width=.4pt]{};%
}}}%
\end{picture}%
\end{document}