将文本旋转 -90 度

将文本旋转 -90 度

使用软件包lscape中的graphics旋转功能,可以将所有文本旋转\begin{landscape}90\end{landscape}度,同时允许文本跨页显示。有没有办法以相同的方式旋转文本,但旋转 90 度?

更新:

期望的结果是旋转页面正文中的所有文本,但不旋转页面本身,也不旋转脚注。使用与这个问题有关:使用 XeTeX 的竖排中文文本但是,使用minipage并不是一个好选择,因为较长的材料无法在页面末尾正确换行。然而,该lscape解决方案将文本沿错误方向旋转了 90 度。

lscape下面是将文本旋转 90 度的代码示例:

\documentclass{article}
\usepackage{lscape}
\begin{document}
    \begin{landscape}
        This is some text.
    \end{landscape}
\end{document}

请注意,使用上述代码,脚注和标题不会发生变化。使用 进行编译xelatex并在 PDF 阅读器中查看时,页面不会转换为横向模式。我希望可以复制此行为,但只能将文本旋转 -90 度。

答案1

重新定义景观

我错了。这里应该使用lscape而不是pdflscape,因为文本也会旋转。然后像 Stefan Kottwitz 那样修补命令。

您可以定义一个新的环境来将页面旋转 -90 度,而无需更改landscape环境的定义。为此,您可以使用

\let\antilandscape\landscape
\let\endantilandscape\endlandscape
\def\LS@antirot{%
  \setbox\@outputbox\vbox{\hbox{\rotatebox{-90}{\box\@outputbox}}}}
\patchcmd{\antilandscape}{\LS@rot}{\LS@antirot}{}{} % require etoolbox package

竖排版示例

在竖排模式下,想要把所有东西都弄好,还是比较困难的。下面的例子展示了如何为竖排中文文本制作正确的脚注。还有很多事情要做,你可以尝试一下。

\documentclass[UTF8]{ctexart}
\usepackage{etoolbox}
\usepackage{lscape}
\makeatletter
\let\antilandscape\landscape
\let\endantilandscape\endlandscape
\def\LS@antirot{%
  \setbox\@outputbox\vbox{\hbox{\rotatebox{-90}{\box\@outputbox}}}}
\patchcmd{\antilandscape}{\LS@rot}{\LS@antirot}{}{}

\newfontlanguage{Chinese}{CHN}
\setCJKfamilyfont{songvert}[Script=CJK,Language=Chinese,Vertical=RotatedGlyphs]{SimSun}
\newcommand*\songvert{\CJKfamily{songvert}\punctstyle{plain}\CJKmove}

\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{#1}}
\newcommand*\CJKmove{\punctstyle{plain}% do not modify the spacing between punctuations
  \let\CJKsymbol\CJKmovesymbol
  \let\CJKpunctsymbol\CJKsymbol}

\newenvironment{CJKvert}
  {\antilandscape
   \appto{\normalfont}{\songvert}\songvert
   \let\oldfootnote\footnote
   \renewcommand\footnote[1]{\oldfootnote{\songvert##1}}%
   \renewcommand\thefootnote{[\chinese{footnote}]}%
   \def\vert@makefnmark{\hbox{\normalfont\@thefnmark\space}}%
   \let\old@makefntext\@makefntext
   \long\def\@makefntext##1{{%
     \let\@makefnmark\vert@makefnmark
     \old@makefntext{##1}}}%
  }
  {\endantilandscape}

\makeatother

\usepackage{lipsum}

\begin{document}

\lipsum[1]

\begin{CJKvert}
\parindent=0pt
『朝发轫于苍梧兮,\\
夕余至乎县圃。\\
欲少留此灵琐兮,\\
日忽忽其将暮。\\
吾令羲和弭节兮,\\
望崦嵫而勿迫。』\footnote{屈原《离骚》}
\end{CJKvert}

\lipsum[2]

\end{document}

答案2

您可以重新定义\LS@rot

\makeatletter
\renewcommand*{\LS@rot}{%
  \setbox\@outputbox\vbox{\hbox{\rotatebox{-90}{\box\@outputbox}}}}
\makeatother

最初,它使用 90 作为参数\rotatebox\makeatletter\makeatother因为@宏的名称中有而被使用。

也许您不使用 pdfTeX,因为您使用的lscape是 ,而不是pdflscape。但是,如果您将 pdfTeX 与 一起使用lscape,您可以考虑\pdfpageattr{/Rotate 270}在环境末尾进行设置landscape,可能通过重新定义或修补\endlandscape

答案3

\documentclass{article}
\usepackage{pdflscape}
\begin{document}

\begin{landscape}
 foo
\end{landscape}

\makeatletter
\g@addto@macro{\landscape}{\PLS@Rotate{-90}}
\makeatother

\begin{landscape}
 foo
\end{landscape}

\end{document}

相关内容