使我的文档拥有两种格式的最佳方法是什么?

使我的文档拥有两种格式的最佳方法是什么?

我想为我的文档制作两种格式。

  1. 第一种格式将使用颜色。这通常用于在屏幕上阅读。
  2. 第二种格式将使用灰色进行打印。

我可以使用哪种方法告诉 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}

尽管我必须承认其他人已经发布了几个更优雅的答案。:)

相关内容