我正在尝试创建一个与该{\bfseries }
命令类似的新环境。
例如:
\documentclass{report}
\usepackage{rotating}
\newenvironment{stext}
{\begin{sideways} \bfseries \raggedleft }
{\end{sideways}}
\begin{document}
\begin{stext}
This is an example environment.
\end{stext}
\end{document}
在上面的例子中,我想重新定义stext
环境,使其按如下方式工作:
{\stext This is an example environment.}
以下是这个新环境的用例:
\documentclass{article}
\usepackage{rotating}
\usepackage{array}
\newcolumntype{$}{>{\global\let\currentrowstyle\relax}}
\newcolumntype{^}{>{\currentrowstyle}}
\newcommand{\rowstyle}[1]{\gdef\currentrowstyle{#1}%
#1\ignorespaces
}
\begin{document}
\begin{tabular}{$l^c^r}
\rowstyle{\rotatebox{-90}}% <- I know, the usage is wrong.
abc & abc & abc\\
b & b & b \\
c & c & c \\
\end{tabular}
\end{document}
这里的目的是让第一行的文本横向排列,这样它们就不会占用太多的宽度。为了让命令\rowstyle
正常工作,我需要一个可以像这样调用的环境:
{\rotatetext Rotated text}
答案1
这是一个使用 Herbert 的答案稍微修改后的版本的选项改进的 \rowstyle,以单元格内容作为参数:
\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{array}% http://ctan.org/pkg/array
\newsavebox\TBox
\newif\ifrotate\rotatefalse
\newcolumntype{C}{%
>{\begin{lrbox}{\TBox}}
c
<{\end{lrbox}\ifrotate\rotatebox{90}{\usebox\TBox}\else\usebox\TBox\fi}}
\begin{document}
\begin{tabular}{*3C}
\global\rotatetrue abc & abc & abc \\ \global\rotatefalse
b & b & b \\
c & c & c \\
\end{tabular}
\end{document}
该解决方案背后的想法是将内容装箱,\TBox
并根据\ifrotate
布尔值设置为 true ( \rotatetrue
) 或 false ( \rotatefalse
) 有条件地旋转或不旋转。
从这个例子中可以清楚地看出它的用法 -\global\rotatetrue
在该行中放置要旋转的第一个条目,然后\global\rotatefalse
后最后一项。为了方便起见,您也可以使用以下方法将它们定义为“开关”
\newcommand{\rotateon}{\global\rotatetrue}% rotate switch ON
\newcommand{\rotateoff}{\global\rotatefalse}% rotate switch OFF
如果您希望各个列采用不同的对齐方式,则可以定义一个L
和R
列(比如说),类似于我的C
。
graphicx
提供\rotatebox{<angle>}{<stuff>}
旋转<stuff>
一定角度的命令<angle>
。