使用软件包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}