新环境问题

新环境问题

我正在尝试创建一个与该{\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

如果您希望各个列采用不同的对齐方式,则可以定义一个LR列(比如说),类似于我的C

graphicx提供\rotatebox{<angle>}{<stuff>}旋转<stuff>一定角度的命令<angle>

相关内容