我想为我的文档制作两种格式。
- 第一种格式将使用颜色。这通常用于在屏幕上阅读。
- 第二种格式将使用灰色进行打印。
我可以使用哪种方法告诉 LaTeX 应该使用哪种格式规则?
这是我正在构建的命令的一个非常小的示例。
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage[x11names, svgnames]{xcolor}
\usepackage{fourier-orns}
\newcommand{\boldit}[1]{%
\mathversion{bold}\textbf{#1}\mathversion{normal} %
}
\newbox\FBox
\NewDocumentCommand\boxit{O{black}O{white}mO{0.5pt}O{0pt}O{0pt}}{%
\setlength\fboxsep{#4}\sbox\FBox{\fcolorbox{#1}{#2}{#3\rule[-#5]{0pt}{#6}}}\usebox\FBox}
% The colored version.
\newcommand{\warning}[1]{\textcolor{Red3}{\raisebox{\depth}{\danger}\boldit{\,#1}}}
% The gray version that must be used instead
% of \warning if the mode is black and white.
\newcommand{\warningBW}[1]{\boxit[black!80][black!30]{\raisebox{\depth}{\danger}\boldit{\,#1}}}
\begin{document}
Let's try one example... \warning{Danger !}
\end{document}
答案1
我会像这样组织文档,其中前两行是关键:
\newif\ifcolored
\coloredtrue
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage[x11names, svgnames]{xcolor}
\usepackage{fourier-orns}
\newcommand{\boldit}[1]{\textbf{\mathversion{bold}#1}}
\newbox\FBox
\NewDocumentCommand\boxit{O{black}O{white}mO{0.5pt}O{0pt}O{0pt}}{%
\setlength\fboxsep{#4}\sbox\FBox{\fcolorbox{#1}{#2}{#3\rule[-#5]{0pt}{#6}}}\usebox\FBox}
\ifcolored
% The colored version.
\newcommand{\warning}[1]{\textcolor{Red3}{\raisebox{\depth}{\danger}\boldit{\,#1}}}
% The gray version.
\else
\newcommand{\warning}[1]{\boxit[black!80][black!30]{\raisebox{\depth}{\danger}\boldit{\,#1}}}
\fi
也就是说,对于依赖于颜色的命令,您有两个版本。如果您注释掉第二行,则将选择“无色”版本。
(请注意,的定义稍微更有效\boldit
。)
答案2
这etoolbox
包裹提供一个“切换”(或开关),可以被认为类似于布尔真/假变量:
\newtoggle{coloured}
现在你可以coloured
使用
\iftoggle{coloured}{<true>}{<false>}
在文档的开头(或在文档前言中,定义切换之后coloured
),您可以使用\toggletrue{coloured}
将切换设置为“开”(为 true),或\togglefalse{coloured}
将切换设置为“关”(为 false,默认启动条件)。
在您的上下文中,根据切换设置,您可以使用
\iftoggle{coloured}{% true
\newcommand{\warning}[1]{\textcolor{Red3}{\raisebox{\depth}{\danger}\boldit{\,#1}}}%
}{% false
\newcommand{\warning}[1]{\boxit[black!80][black!30]{\raisebox{\depth}{\danger}\boldit{\,#1}}}%
}
这类似于定义自己的 if 命令 - 请参阅LaTeX 条件表达式。
答案3
有很多方法可以实现这一点。例如,考虑将以下内容添加到您的文档中:
\newif\ifcolored
\input{config.cfg}
该文件config.cfg
有一行:\coloredfalse
或者\coloredtrue
然后你可以说
\ifcolored
\newcommand{\warning}[1]{\textcolor{Red3}{\raisebox{\depth}{\danger}\boldit{\,#1}}}
\else
\newcommand{\warning}[1]{\boxit[black!80][black!30]{\raisebox{\depth}{\danger}\boldit{\,#1}}}
\fi
ETC。
通过改变行,config.cfg
您可以改变有效的选项。
答案4
正如我在评论中提到的,你也可以使用ifthen
。这是一个简单的代码:
\documentclass[10pt,a4paper]{article}
\usepackage[utf8x]{inputenc}
% \usepackage{ucs}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage[x11names, svgnames]{xcolor}
\usepackage{ifthen}
% \usepackage{fourier-orns}
\newcommand{\boldit}[1]{%
\mathversion{bold}\textbf{#1}\mathversion{normal} %
}
\def\isBW{false}
\newbox\FBox
\NewDocumentCommand\boxit{O{black}O{white}mO{0.5pt}O{0pt}O{0pt}}{%
\setlength\fboxsep{#4}\sbox\FBox{\fcolorbox{#1}{#2}{#3\rule[-#5]{0pt}{#6}}}\usebox\FBox}
\ifthenelse{\equal{\isBW}{false}}{%
\newcommand{\warning}[1]{\textcolor{Red3}{\boldit{\,#1}}}
}
% The gray version.
{%
\newcommand{\warning}[1]{\boxit[black!80][black!30]{\boldit{\,#1}}}
}
\begin{document}
Let's try one example... \warning{Danger !}
\end{document}
尽管我必须承认其他人已经发布了几个更优雅的答案。:)