在 \ifdefined 中为 KOMA 和 xelatex 激活了两列的自己的类

在 \ifdefined 中为 KOMA 和 xelatex 激活了两列的自己的类

我想做类似的事情https://stackoverflow.com/questions/1465665/passing-command-line-arguments-to-latex-document
为了更好地解释,我将展示一个最小的运行示例:
我的test.cls

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2012/01/11 helper class]
\ifdefined\bastitwocolumns%
\LoadClass[DIV14,parskip=full,twocolumns,landscape]{scrartcl}%
\else
\LoadClass[DIV14,parskip=full]{scrartcl}%
\fi

现在我的test.tex

\listfiles
\def\bastitwocolumns{}
\documentclass{test}
%\ifdefined\bastitwocolumns\documentclass[DIV14,parskip=full,landscape,twocolumn]    {scrartcl}\else\documentclass[DIV14,parskip=full]{scrartcl}\fi
\usepackage{polyglossia}\setdefaultlanguage[spelling=new,babelshorthands=true]{german} 
\usepackage{blindtext}
\begin{document}
\blindtext\blindtext\blindtext\\
\blindtext
\par
\blindtext\blindtext\blindtext\\
\blindtext
\end{document}

首先按照xelatex文件的方式进行编译,结果是一个单列文档 a4。激活第 4 行并注释掉第 3 行,结果是一个双列(太可悲的肖像)a4 文档。方向问题可能会被忽略。
有人能解释一下,为什么我无法在我的课程中启用这个双列设置吗?

好的,这里是另一个最小的运行示例,它更精确地显示了问题:

XeLaTeX 文件:

\listfiles
\def\bastitwocolumns{}
\documentclass{ebelinguebung}
%\ifdefined\bastitwocolumns\documentclass[DIV14,parskip=full,landscape,twocolumn]    {scrartcl}\else\documentclass[DIV14,parskip=full]    {scrartcl}\fi\usepackage{beamerarticle}\usepackage{oldebelinguebung}
\usepackage{blindtext}
\begin{document}
\blindtext\\ \blindtext \par \blindtext
\end{document}

类文件:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{ebelinguebung}[2012/01/11 helper class]
\ifdefined\bastitwocolumns%
\LoadClass[DIV14,parskip=full,landscape,twocolumn]{scrartcl}%
\else
\LoadClass[DIV14,parskip=full]{scrartcl}%
\fi
\RequirePackage{beamerarticle}
\RequirePackage[l2tabu,orthodox]{nag}
\RequirePackage{polyglossia}\setdefaultlanguage[spelling=new,babelshorthands=true]    {german} 
\RequirePackage{hyperref}

样式文件:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{ebelinguebung}[2012/01/11]
\RequirePackage[l2tabu,orthodox]{nag}
\RequirePackage{polyglossia}\setdefaultlanguage[spelling=new,babelshorthands=true]{german} 
\RequirePackage{hyperref}

现在切换活动线 3 或 4 我得到了不同的结果(一个肖像,一个风景),我喜欢了解这一点。

好吧,经过多次尝试,我找到了一个解决方案——我不太明白——但顺便说一句:
在我的类 typearea 的 twocolumn 编译日志文件中,显示了(当然)纸张的肖像尺寸。但在包解决方案的日志文件中,typearea 还告诉

Package typearea Info: You've used standard option `landscape'.
(typearea)             This is correct!
(typearea)             Internally I'm using `paper=landscape'.
(typearea)             If you'd like to set the option with \KOMAoptions,
(typearea)             you'd have to use `paper=landscape' there
(typearea)             instead of `landscape', too.

首先尝试paper=landscape直接进入类选项只会删除这些提示。其次尝试\KOMAoptions{paper=landscape,twocolumn}%在 if 子句中设置(并删除类选项)可以实现我想要的效果。
有人能解释一下吗?

答案1

test.cls加载时,它会遵循条件的“true”部分,因为文档的第 2 行定义了\bastitwocolumns,但它当然会忽略该twocolumns选项,因为正确的名称是twocolumn

事实上,转换twocolumnstwocolumnintest.cls会生成一个两列的文档。

为了获得横向格式,可以test.cls按如下方式修改:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2012/01/11 helper class]
\ifdefined\bastitwocolumns
  \PassOptionsToPackage{landscape}{typearea}
  \LoadClass[DIV14,parskip=full,twocolumn]{scrartcl}
  \RequirePackage[pass]{geometry} % this ensures the correct paper orientation
\else
  \LoadClass[DIV14,parskip=full]{scrartcl}
\fi

如果您注释掉第 2 行test.tex,那么您将得到一个单列肖像文档。

相关内容