如何在 LaTeX 中使用 if-then-else 结构?我需要奇数页和偶数页的示例。
if odd then
command 1
else
command 2
答案1
您可以使用changepage
包中,一个最小的工作示例是
\documentclass{article}
\usepackage[strict]{changepage}
\begin{document}
\checkoddpage
\ifoddpage odd\else even\fi
\newpage
\checkoddpage
\ifoddpage odd\else even\fi
\newpage
\checkoddpage
\ifoddpage odd\else even\fi
\end{document}
如果您使用该类memoir
,那么此功能将自动内置,但您应该\strictpagecheck
在序言中写入以使测试更加健壮。
请注意,如果\checkoddpage
介于两页之间,即使启用了严格模式,测试结果仍可能错误。例如,您写完一个段落,位于第 4 页末尾,写入内容,\checkoddpage
结果为 false,然后插入内容,结果跳转到下一页。在这种情况下,您需要写入\leavevmode\checkoddpage
或以某种方式将检查放入接下来要排版的内容中,而不是在它之前。
然而,大多数时候\checkoddpage
这种情况并不是什么问题,所以不应该成为一个主要问题。
答案2
为了完整起见:KOMA 脚本提供命令\ifthispageodd{<true>}{<false>}
。它可以通过加载在标准类中使用它scrextend
:
\documentclass{article}
\usepackage{scrextend}
\begin{document}
\pagenumbering{roman}
\ifthispageodd{I'm odd}{I'm even}% I'm odd
\newpage
\ifthispageodd{I'm odd}{I'm even}% I'm even
\newpage
\pagenumbering{arabic}
\ifthispageodd{I'm odd}{I'm even}% I'm odd
\newpage
\ifthispageodd{I'm odd}{I'm even}% I'm even
\end{document}
memoir
还提供了类似的条件\ifoddpage ... \else ... \fi
,需要在前面加上\checkoddpage
。另外还应调用\strictpagecheck
以便将页码写入aux
文件。
\documentclass{memoir}
\strictpagecheck
\makeatletter
\newcommand*\ifthispageodd{%
\checkoddpage
\ifoddpage
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\makeatother
\begin{document}
\pagenumbering{roman}
\ifthispageodd{I'm odd}{I'm even}% I'm odd
\newpage
\ifthispageodd{I'm odd}{I'm even}% I'm even
\newpage
\pagenumbering{arabic}
\ifthispageodd{I'm odd}{I'm even}% I'm odd
\newpage
\ifthispageodd{I'm odd}{I'm even}% I'm even
\end{document}
答案3
正如 Harald 已经指出的那样,使用\thepage
并不能万无一失地确定我们是在偶数页还是奇数页。试试 Ryan 示例的这个扩展版本:
\documentclass{article}
\usepackage{ifthen}
\newcounter{mycount}
\begin{document}
\noindent\whiledo{\themycount<130}{%
\ifthenelse{\isodd{\thepage}}%
{Odd\\}%
{Even\\}%
\stepcounter{mycount}%
}
\end{document}
你会在每一页上看到“奇怪”这个词。
相反,使用\label
+\pageref
方法更安全:
\documentclass{article}
\usepackage{ifthen}
\newcounter{mycount}
\begin{document}
\noindent\whiledo{\themycount<130}{%
\label{mylabel\themycount}%
\ifthenelse{\isodd{\pageref{mylabel\themycount}}}%
{Odd\\}%
{Even\\}%
\stepcounter{mycount}%
}
\end{document}
答案4
\label
也可以使用-方法检查页码\ref
。下面我使用可扩展\getpagerefnumber
的refcount
以页码为条件:
\documentclass{article}
\usepackage{refcount}% http://ctan.org/pkg/refcount
\newcounter{oddpagecheck}
\makeatletter
\newcommand{\ifoddpage}{% \ifoddpage{<odd>}{<even>}
\stepcounter{oddpagecheck}% For unique labels
\label{opc-\theoddpagecheck}% Place label
\ifodd\getpagerefnumber{opc-\theoddpagecheck}
\expandafter\@firstoftwo% Page is odd
\else
\expandafter\@secondoftwo% Page is not odd (even)
\fi}
\makeatother
\begin{document}
\ifoddpage{odd}{even}
\end{document}
由于这使用了\label
-\ref
系统,您需要至少编译两次每当标签移动的时候。