DITA技巧:给文字加颜色

news2024/11/15 17:23:01

- 1 -

场景

在文档中,我们有时候会在文字中使用颜色。

比如:

在文档中,使用在文字上加颜色来代表一定意义。使用MS Word编写文档的时候,直接在文字上加颜色就可以了。转换成DITA以后,大家会发现在XML编辑器的工具栏中并没有加字体颜色的工具栏,怎样在DITA文档中给文字加颜色呢?

- 2 -

分析

DITA采用内容与样式分离的思想。文字的颜色属于样式,放在样式文件中,并不在DITA文件中。XML编辑器中编辑的是文档的DITA Topic内容,不能直接编辑样式。这就是在XML编辑器中的工具栏中没有给文字加颜色的工具的原因 (菜单中也没有)。

怎么解决这个问题呢?

上例中,如果按照DITA的设计思想,最好是给内容加语义标签,然后使用样式来将标签渲染成不同的颜色。比如将内容设计成这样:

注:是具体的禁止、指令、警告和提示的文字用这些标签包裹

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="doc123">
    <title>国家规定的安全色中表示警告注意的颜色</title>
    <body>
        <p>法律分析:</p>
        <p>国家规定的安全色有红、蓝、黄、绿四种颜色,其含义是:<stop>红色</stop>表示禁止,停止 (也表示防火);<instruction>蓝色</instruction>
            表示指令或必须遵守的规定;<warning>黄色</warning>表示警告、注意;<tip>绿色</tip>表示提示、安全状态、通行</p>
    </body>
</topic>

 这需要在DITA里通过专有化机制,即:Specialization,加入<stop>、<instruction>、<warning>和<tip>标签来实现。这会导致一系列的改动,比如:所有输出样式、处理程序。同时,以后DITA升级了也要单独升级这部分专有化处理。变动和维护成本比较高。

一种折中的方案是,通过DITA中已有的标签和属性来标识数据,然后在样式中根据自定义属性值来用颜色显示内容。比如将内容设计成这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="doc123">
    <title>国家规定的安全色中表示警告注意的颜色</title>
    <body>
        <p>法律分析:</p>
        <p>国家规定的安全色有红、蓝、黄、绿四种颜色,其含义是:<ph outputclass="color_red">红色</ph>表示禁止,停止 (也表示防火);<ph
                outputclass="color_blue">蓝色</ph>表示指令或必须遵守的规定;<ph outputclass="color_yellow"
                >黄色</ph>表示警告、注意;<ph outputclass="color_green">绿色</ph>表示提示、安全状态、通行</p>
    </body>
</topic>

然后在样式中根据outputclass来给文字加颜色。

这种方案的好处是使用DITA已有的标签和属性即可,不必使用专有化来创建新的标签,只需要在样式中加一些代码就可以实现。 变动和以后维护的成本相对较低。

- 3 -

方案实现

上边的分析部分已经描述了DITA内容可以做成的样子。那样式这部分怎么实现呢?这部分来说一说。 

如果使用的是CSS来发布HTML和PDF,可以使用如下代码:

*[outputclass~="color_red"]{
    color: red;
}

*[outputclass~="color_blue"]{
    color: blue;
}

*[outputclass~="color_yellow"]{
    color: yellow;
}

*[outputclass~="color_green"]{
    color: green;
}

将这些代码放到一个文件中,比如叫style.css,然后在发布的时候引用这个样式文件即可(使用DITA-OT是指定args.css属性,将它的值设置成style.css文件的路径)。 

输出效果如下:

如果使用XSLT/XSL-FO来发布PDF,要复杂一些,可以使用下边的代码实现:

<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    version="2.0">

    <xsl:template match="*[contains(@outputclass, 'color_red')]">
        <fo:inline color="red">
            <xsl:apply-templates />
        </fo:inline>
    </xsl:template>

    <xsl:template match="*[contains(@outputclass, 'color_blue')]">
        <fo:inline color="blue">
            <xsl:apply-templates />
        </fo:inline>
    </xsl:template>

    <xsl:template match="*[contains(@outputclass, 'color_yellow')]">
        <fo:inline color="yellow">
            <xsl:apply-templates />
        </fo:inline>
    </xsl:template>

    <xsl:template match="*[contains(@outputclass, 'color_green')]">
        <fo:inline color="green">
            <xsl:apply-templates />
        </fo:inline>
    </xsl:template>

</xsl:stylesheet>

需要根据DITA-OT定制XSLT/XSL-FO的方法进行配置。 

输出效果如下:

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/706467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

css实现大屏效果的背景div

实现大屏效果的背景div, 效果如下: html <div class"box">1111111</div>css .box {width: 200px;height: 80px;background: linear-gradient(270deg, #00cda2, #00cda2) 0 0 no-repeat,linear-gradient(180deg, #00cda2, #00cda2) 0 0 no-repeat,line…

JUC高并发编程-初篇(后续发布高阶篇)

JUC高并发编程 1.JUC概述 1.1 什么是JUC JUC就是java.util.concurrent工具包的简称。这是一个处理线程的工具包&#xff0c;JDK1.5开始出现的。 1.2 线程和进程概念 进程&#xff1a;指在系统中正在运行的一个应用程序&#xff1b;程序一旦运行就是进程&#xff1b;进程—…

数据结构--队列的基本概念

数据结构–队列的基本概念 队列的定义 队列其实是一种受限制的线性表 队列(Queue)&#xff1a;是 只允许在一端进行插入或删除操作 \color{red}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作的线性表 重要术语: 队头、队尾、空队列 队列的特点: 先进先出 \…

表格检测识别技术面临的挑战和发展趋势

第四章 表格检测识别技术面临的挑战和发展趋势 现在表格区域检测的准确率已经很高了。但检测和识别是相辅相成的&#xff0c;单独的检测不够完善。如何利用检测和结构识别的结果互相提高效果&#xff0c;是未来的研究方向和重点。 由于表格应用场景较为广泛&#xff0c;表格形…

【MySQL学习笔记】(三)操作表(结构)

表 1 创建表2 查看表结构3 修改表4 删除表 注&#xff1a;本篇文章操作的是表的结构&#xff0c;并不是表的内容。 属于笔记&#xff08;一&#xff09;中的SQL分类中的DDL 1 创建表 语法&#xff1a; CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 d…

线程同步器:CountDownLatch、CyclicBarrier、Semaphore

CountDownLatch 日常开发中经常遇到一个线程需要等待一些线程都结束后才能继续向下运行的场景&#xff0c;在CountDownLatch出现之前通常使用join方法来实现&#xff0c;但join方法不够灵活&#xff0c;所以开发了CountDownLatch。场景&#xff1a;一个等其他多个线程&#xf…

消息中间件进阶学习

文章目录 1、RabbitMQ1.1、如何保证消息不丢失&#xff1f;小总结面试快速答法 1.2、消息的重复消费问题面试快速答法 1.3、死信交换机小总结面试快速答法 1.4、消息堆积怎么解决小总结面试快速答法 1.5、集群小总结面试快速答法 2、Kafka2.1、Kafka是如何保证消息不丢失小总结…

Linux中Docker详细安装说明

1.准备环境 说明&#xff1a;准备Linux系统centos7版本(以上) 2.切换管理模式 说明&#xff1a;输入一下命令&#xff0c;然后回车&#xff0c;输入密码。 su – 3.更新yum 说明&#xff1a;为了保证doker能够给顺利安装&#xff0c;那么更新一下&#xff1b;如果没有也可以…

单相智能电量多用户远程预付费控系统优化的设计及应用

摘要&#xff1a;由于现有系统仅对电表数据进行读取操作&#xff0c;存在成本较高和耗时较长的问题&#xff0c;为此对单相智能多用户远程预付费控系统优化设计进行研究。选择电能表子系统作为优化对象&#xff0c;选取78KO527A微控制器作为电能表子系统的控制核心&#xff0c;…

文献阅读:中国物理海洋学研究70 年-发展历程、学术成就概览

摘要 本文概略评述新中国成立70 年来物理海洋学各分支研究领域的发展历程和若干学术成就。中国物理海洋学研究起步于海浪、潮汐、近海环流与水团&#xff0c;以及以风暴潮为主的海洋气象灾害的研究。随着国力的增强&#xff0c;研究领域不断拓展&#xff0c;涌现了大量具有广泛…

Linux踢掉远程登录用户

Linux踢掉远程登录用户 安装psmisc yum install -y psmisc查看远程登录用户 who得到以下结果 [rootcentos7 ~]# w10:58:13 up 0 min, 2 users, load average: 0.12, 0.03, 0.01 USER TTY FROM LOGIN IDLE JCPU PCPU WHAT lhz pts/0 19…

mysql——数据库设计

前言 之前我们已经了解了 mysql 的基本增删改查mysql 从入门到放弃——基本约束以及语法 现在我们系统的进行一遍数据库的设计 直接进入主题 来个例子&#xff1a;下面我们将围绕这个例子来进行数据库的设计 我们就来简单的模拟 大学教务处的选课 系统 中的 选课功能 注意…

十大排序算法(Java实现)

文章目录 零、总览 / 前言一、冒泡排序1.算法描述2.代码&复杂度 二、选择排序1.算法描述2.代码&复杂度 三、插入排序1.算法描述2.代码&复杂度分析 四、希尔排序1.算法步骤2.代码&复杂度分析 五、归并排序1.算法描述2.代码&复杂度分析 六、快速排序1.算法描…

《强化学习的数学原理》思维导图,供初学者参考

对应课程&#xff1a; 【强化学习的数学原理】课程&#xff1a;从零开始到透彻理解&#xff08;完结&#xff09;_哔哩哔哩_bilibili

Linux 系统下 CMake 示 例

CMake 是一个开源的跨平台工具&#xff0c;可以构建、测试和打包软件。 它具有如下特性&#xff1a; 自动搜索可能需要的程序、库和头文件的能力&#xff1b;独立的构建目录&#xff08;如build&#xff09;&#xff0c;可以安全清理&#xff1b;支持复杂的自定义命令&#xf…

一文了解什么什么是加密货币及其工作原理

加密货币是基于区块链技术并由密码学保护的去中心化数字货币。要理解加密货币&#xff0c;首先需要理解三个术语——区块链、去中心化和密码学。 一、加密货币如何运作 简而言之&#xff0c;加密货币中的区块链是一种数字分类账&#xff0c;其访问权限分布在授权用户之间。该分…

hello算法学习笔记之排序

概述&#xff1a;排序算法 在排序算法中&#xff0c;数据类型可以是整数、浮点数、字符或字符串等&#xff1b;顺序的判断规则可根据需求设定&#xff0c;如数字大小、字符 ASCII 码顺序或自定义规则。 评价维度&#xff1a; 运行效率、就地性、稳定性、自适应性&#xff08…

21.RocketMQ源码之NameServer的路由管理和架构设计

highlight: arduino-light NameServer 路由管理 Broker消息服务器在启动的时向所有NameServer注册。 消息生产者Producer在发送消息之前先从NameServer获取Broker服务器地址列表然后根据负载均衡算法从列表中选择一台服务器进行发送。 NameServer与每台Broker保持长连接&#x…

单频/双频gps北斗模块相关应用领域详解_SKYLAB GPS+北斗模块

以“时空数据&#xff0c;赋能未来”为主题的第十二届中国卫星导航年会在江西南昌正式开幕&#xff0c;据悉&#xff0c;本届年会是北斗系统开启全球化、产业化的第一届年会。2020年&#xff0c;北斗三号全球卫星定位系统正式服务全球&#xff0c;作为北斗产业链中的一员&#…

小黑厦门极限神游,通宵环岛骑行,鼓浪屿徒步赏景的leetcode之旅:剑指 Offer 48. 最长不含重复字符的子字符串

小黑代码(与官方题解思路一致&#xff0c;比其可读性更强) class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 字符串长度n len(s)# 定义双指针head 0tail 0# 中间变量&#xff0c;存放窗口中的元素set_ set()# 结果变量length 0while tail < n…