整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

使用 Pandoc 将你的书转换成网页和电子书

使用 Pandoc 将你的书转换成网页和电子书

译自: https://opensource.com/article/18/10/book-to-website-epub-using-pandoc

作者: Kiko Fernandez-reyes

译者: jlztan

通过 Markdown 和 Pandoc,可以做到编写一次,发布两次。

Pandoc 是一个命令行工具,用于将文件从一种标记语言转换为另一种标记语言。在我 对 Pandoc 的简介 一文中,我演示了如何把 Markdown 编写的文本转换为网页、幻灯片和 PDF。

在这篇后续文章中,我将深入探讨 Pandoc ,展示如何从同一个 Markdown 源文件生成网页和 ePub 格式的电子书。我将使用我即将发布的电子书《 面向对象思想的 GRASP 原则 》为例进行讲解,这本电子书正是通过以下过程创建的。

首先,我将解释这本书使用的文件结构,然后介绍如何使用 Pandoc 生成网页并将其部署在 GitHub 上;最后,我演示了如何生成对应的 ePub 格式电子书。

你可以在我的 GitHub 仓库 Programming Fight Club 中找到相应代码。

设置图书结构

我用 Markdown 语法完成了所有的写作,你也可以使用 HTML 标记,但是当 Pandoc 将 Markdown 转换为 ePub 文档时,引入的 HTML 标记越多,出现问题的风险就越高。我的书按照每章一个文件的形式进行组织,用 Markdown 的 H1 标记(#)声明每章的标题。你也可以在每个文件中放置多个章节,但将它们放在单独的文件中可以更轻松地查找内容并在以后进行更新。

元信息遵循类似的模式,每种输出格式都有自己的元信息文件。元信息文件定义有关文档的信息,例如要添加到 HTML 中的文本或 ePub 的许可证。我将所有 Markdown 文档存储在名为 parts 的文件夹中(这对于用来生成网页和 ePub 的 Makefile 非常重要)。下面以一个例子进行说明,让我们看一下目录,前言和关于本书(分为 toc.md、preface.md 和 about.md 三个文件)这三部分,为清楚起见,我们将省略其余的章节。

关于本书这部分内容的开头部分类似:

# About this book {-}

## Who should read this book {-}

Before creating a complex software system one needs to create a solid foundation.

General Responsibility Assignment Software Principles (GRASP) are guidelines to assign

responsibilities to software classes in object-oriented programming.

每一章完成后,下一步就是添加元信息来设置网页和 ePub 的格式。

生成网页

创建 HTML 元信息文件

我创建的网页的元信息文件(web-metadata.yaml)是一个简单的 YAML 文件,其中包含 <head> 标签中的作者、标题、和版权等信息,以及 HTML 文件中开头和结尾的内容。

我建议(至少)包括 web-metadata.yaml 文件中的以下字段:

---

title: <a href="/grasp-principles/toc/">GRASP principles for the Object-oriented mind</a>

author: Kiko Fernandez-Reyes

rights: 2017 Kiko Fernandez-Reyes, CC-BY-NC-SA 4.0 International

header-includes:

- |

```{=html}

<link href="https://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet">

<link href="https://fonts.googleapis.com/css?family=Gentium+Basic|Inconsolata" rel="stylesheet">

```

include-before:

- |

```{=html}

<p>If you like this book, please consider

spreading the word or

<a href="https://www.buymeacoffee.com/programming">

buying me a coffee

</a>

</p>

```

include-after:

- |

```{=html}

<div class="footnotes">

<hr>

<div class="container">

<nav class="pagination" role="pagination">

<ul>

<p>

<span class="page-number">Designed with</span> ?? <span class="page-number"> from Uppsala, Sweden</span>

</p>

<p>

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="http://www.hmttv.cn/uploadfile/2024/1012/20241012032002517.png" /></a>

</p>

</ul>

</nav>

</div>

</div>

```

---

下面几个变量需要注意一下:

  • header-includes 变量包含将要嵌入 <head> 标签的 HTML 文本。
  • 调用变量后的下一行必须是 - |。再往下一行必须以与 | 对齐的三个反引号开始,否则 Pandoc 将无法识别。{=html} 告诉 Pandoc 其中的内容是原始文本,不应该作为 Markdown 处理。(为此,需要检查 Pandoc 中的 raw_attribute 扩展是否已启用。要进行此检查,键入 pandoc --list-extensions | grep raw 并确保返回的列表包含名为 + raw_html 的项目,加号表示已启用。)
  • 变量 include-before 在网页开头添加一些 HTML 文本,此处我请求读者帮忙宣传我的书或给我打赏。
  • include-after 变量在网页末尾添加原始 HTML 文本,同时显示我的图书许可证。

这些只是其中一部分可用的变量,查看 HTML 中的模板变量(我的文章 Pandoc简介 中介绍了如何查看 LaTeX 的模版变量,查看 HTML 模版变量的过程是相同的)对其余变量进行了解。

将网页分成多章

网页可以作为一个整体生成,这会产生一个包含所有内容的长页面;也可以分成多章,我认为这样会更容易阅读。我将解释如何将网页划分为多章,以便读者不会被长网页吓到。

为了使网页易于在 GitHub Pages 上部署,需要创建一个名为 docs 的根文件夹(这是 GitHub Pages 默认用于渲染网页的根文件夹)。然后我们需要为 docs 下的每一章创建文件夹,将 HTML 内容放在各自的文件夹中,将文件内容放在名为 index.html 的文件中。

例如,about.md 文件将转换成名为 index.html 的文件,该文件位于名为 about(about/index.html)的文件夹中。这样,当用户键入 http://<your-website.com>/about/ 时,文件夹中的 index.html 文件将显示在其浏览器中。

下面的 Makefile 将执行上述所有操作:

# Your book files

DEPENDENCIES=toc preface about

# Placement of your HTML files

DOCS=docs

all: web

web: setup $(DEPENDENCIES)

@cp $(DOCS)/toc/index.html $(DOCS)

# Creation and copy of stylesheet and images into

# the assets folder. This is important to deploy the

# website to Github Pages.

setup:

@mkdir -p $(DOCS)

@cp -r assets $(DOCS)

# Creation of folder and index.html file on a

# per-chapter basis

$(DEPENDENCIES):

@mkdir -p $(DOCS)/$@

@pandoc -s --toc web-metadata.yaml parts/$@.md \

-c /assets/pandoc.css -o $(DOCS)/$@/index.html

clean:

@rm -rf $(DOCS)

.PHONY: all clean web setup

选项 - c /assets/pandoc.css 声明要使用的 CSS 样式表,它将从 /assets/pandoc.cs 中获取。也就是说,在 <head> 标签内,Pandoc 会添加这样一行:

<link rel="stylesheet" href="/assets/pandoc.css">

使用下面的命令生成网页:

make

根文件夹现在应该包含如下所示的文件结构:

.---parts

| |--- toc.md

| |--- preface.md

| |--- about.md

|

|---docs

|--- assets/

|--- index.html

|--- toc

| |--- index.html

|

|--- preface

| |--- index.html

|

|--- about

|--- index.html

部署网页

通过以下步骤将网页部署到 GitHub 上:

  1. 创建一个新的 GitHub 仓库
  2. 将内容推送到新创建的仓库
  3. 找到仓库设置中的 GitHub Pages 部分,选择 Source 选项让 GitHub 使用主分支的内容

你可以在 GitHub Pages 的网站上获得更多详细信息。

我的书的网页 便是通过上述过程生成的,可以在网页上查看结果。

生成电子书

创建 ePub 格式的元信息文件

ePub 格式的元信息文件 epub-meta.yaml 和 HTML 元信息文件是类似的。主要区别在于 ePub 提供了其他模板变量,例如 publisher 和 cover-image 。ePub 格式图书的样式表可能与网页所用的不同,在这里我使用一个名为 epub.css 的样式表。

---

title: 'GRASP principles for the Object-oriented Mind'

publisher: 'Programming Language Fight Club'

author: Kiko Fernandez-Reyes

rights: 2017 Kiko Fernandez-Reyes, CC-BY-NC-SA 4.0 International

cover-image: assets/cover.png

stylesheet: assets/epub.css

...

将以下内容添加到之前的 Makefile 中:

epub:

@pandoc -s --toc epub-meta.yaml \

$(addprefix parts/, $(DEPENDENCIES:=.md)) -o $(DOCS)/assets/book.epub

用于产生 ePub 格式图书的命令从 HTML 版本获取所有依赖项(每章的名称),向它们添加 Markdown 扩展,并在它们前面加上每一章的文件夹路径,以便让 Pandoc 知道如何进行处理。例如,如果 $(DEPENDENCIES 变量只包含 “前言” 和 “关于本书” 两章,那么 Makefile 将会这样调用:

@pandoc -s --toc epub-meta.yaml \

parts/preface.md parts/about.md -o $(DOCS)/assets/book.epub

Pandoc 将提取这两章的内容,然后进行组合,最后生成 ePub 格式的电子书,并放在 Assets 文件夹中。

这是使用此过程创建 ePub 格式电子书的一个 示例 。

过程总结

从 Markdown 文件创建网页和 ePub 格式电子书的过程并不困难,但有很多细节需要注意。遵循以下大纲可能使你更容易使用 Pandoc。

  • HTML 图书:
  • 使用 Markdown 语法创建每章内容
  • 添加元信息
  • 创建一个 Makefile 将各个部分组合在一起
  • 设置 GitHub Pages
  • 部署
  • ePub 电子书:
  • 使用之前创建的每一章内容
  • 添加新的元信息文件
  • 创建一个 Makefile 以将各个部分组合在一起
  • 设置 GitHub Pages
  • 部署

via: https://opensource.com/article/18/10/book-to-website-epub-using-pandoc

作者: Kiko Fernandez-Reyes 选题: lujun9972 译者: jlztan 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

量是什么

一个变量,就是一个用于存放数值的容器。这个数值可能是一个用于累加计算的数字,或者是一个句子中的字符串。变量的独特之处在于它存放的数值是可以改变的。让我们看一个简单的例子:

Press me

var button=document.querySelector('button');

button.onclick=function() {

var name=prompt('What is your name?');

alert('Hello ' + name + ', nice to see you!'); }

在上面的例子中,点击按钮之后,第一行代码会在屏幕上弹出一个对话框,让你输入名字,然后存储输入的名字到一个变量。第二行代码将会显示包含你名字的欢迎信息,你的名字就是从之前的变量里面读取的。

变量的另一个特性就是它们能够存储任何的东西 -- 不只是字符串和数字。变量可以存储更复杂的数据,甚至是函数。你将在后续的内容中体验到这些用法。

我们说,变量是用来存储数值的,那么有一个重要的概念需要区分。变量不是数值本身,它们仅仅是一个用于存储数值的容器。你可以把变量想象成一个个用来装东西的纸箱子。




声明变量

要想使用变量,你需要做的第一步就是创建它 -- 更准确的说,是声明一个变量。声明一个变量的语法是在var关键字之后加上这个变量的名字

var myName;

var myAge;

提示: 在JavaScript中,所有代码指令都会以分号结尾 (;) — 如果忘记加分号,你的单行代码可能执行正常,但是在多行代码在一起的时候就可能出错。所以,最好是养成主动以分号作为代码结尾的习惯。提示: 千万不要把两个概念弄混淆了,“一个变量存在,但是没有数值”和“一个变量并不存在” — 他们完全是两回事 — 在前面你看到的盒子的类比中,不存在意味着没有可以存放变量的“盒子”。没有定义的值意味着有一个“盒子”,但是它里面没有任何值。


初始化变量

一旦你定义了一个变量,你就能够初始化它. 方法如下,在变量名之后跟上一个“=”,然后是数值:

myName='Chris';

myAge=37; //你还可以向下面这样

var myName='Chris';

更新变量

一旦变量赋值,您可以通过简单地给它一个不同的值来更新它。试试在你的控制台中输入

关于变量命名的规则:

你可以给你的变量赋任何你喜欢的名字,但有一些限制。 一般你应当坚持使用拉丁字符(0-9,a-z,A-Z)和下划线字符。

  • 你不应当使用规则之外的其他字符,因为它们可能引发错误,或对国际用户来说难以理解。
  • 变量名不要以下划线开头—— 以下划线开头的被某些JavaScript设计为特殊的含义,因此可能让人迷惑。
  • 变量名不要以数字开头。这种行为是不被允许的,并且将引发一个错误
  • 一个可靠的命名约定叫做 "小写驼峰命名法",用来将多个单词组在一起,小写整个命名的第一个字母然后大写剩下单词的首字符。我们已经在文章中使用了这种命名方法
  • 让变量名直观,它们描述了所包含的数据。不要只使用单一的字母/数字,或者长句。
  • 变量名大小写敏感——因此myage与myAge是2个不同的变量。
  • 最后也是最重要的一点—— 你应当避免使用JavaScript的保留字给变量命名。保留字,即是组成JavaScript的实际语法的单词!因此诸如 var, function, let和 for等,都不能被作为变量名使用。浏览器将把它们识别为不同的代码项,因此你将得到错误。

age

myAge

init

initialColor

finalOutputValue

audio1

audio2


变量类型

可以为变量设置不同的数据类型。 ps:数据类型与数据结构并不是一回事

Number

你可以在变量中存储数字,不论这些数字是像30(也叫整数)这样,或者像2.456这样的小数(也叫做浮点数)。与其他编程语言不同,在 JavaScript 中你不需要声明一个变量的类型。当你给一个变量数字赋值时,不需要用引号括起来。

var myAge=17;

String

字符串是文本的一部分。当你给一个变量赋值为字符串时,你需要用单引号或者双引号把值给包起来,否则JavaScript将会把这个字符串值理解成别的变量名。

var dolphinGoodbye='So long and thanks for all the fish';

Boolean

Boolean 的值有2种:true或false。它们通常被用于在适当的代码之后,测试条件是否成立。举个例子,一个简单的示例如下

var iAmAlive=true;

通常更加常用的是

var test=6 < 9;

这是使用“小于”操作符(<)来测试6小于3。正如你所料的,将会返回true

Array-数组

数组是一个单个对象,其中包含很多值,方括号括起来,并用逗号分隔。尝试在您的控制台输入以下行

var myNameArray=['Chris', 'Bob', 'Jim'];

当数组被定义以后,您可以使用以下所示的语法来访问相对应的值

myNameArray[0]; // should return 'Chris'

myNumberArray[2]; // should return 40

此处的方括号包含一个索引值,该值指定要返回的值的位置。 您可能已经注意到,计算机从0开始计数,而不是像我们人类那样的1。

Object

在编程中,对象是现实生活中的模型的一种代码结构。您可以有一个简单的对象,代表一个停车场,并包含有关其宽度和长度的信息,或者您可以有一个代表一个人的对象,并包含有关他们的名字,身高,体重,他们说什么语言,如何说 你好,他们,等等。

动态类型

JavaScript是一种“动态类型语言”,这意味着不同于其他一些语言(译者注:如C、JAVA),您不需要指定变量将包含什么数据类型(例如number或string)

例如,如果你声明一个变量并给它一个带引号的值,浏览器就会知道它是一个字符串;

var myNumber='500'; // oops, this is still a string

typeof myNumber;

myNumber=500; // much better — now this is a number

typeof myNumber

尝试依次将上述代码输入您的控制台,看看结果是什么(无须输入//之后的注释)。 我们使用了一个名为typeof()的特殊函数 ——它会返回所传递给它的变量的数据类型。 第一次在上面的代码中调用它,它应该返回string,因为此时myNumber变量包含一个字符串'500'。 看看它第二次将返回什么。


JavaScript中的基础数学 - 数字与操作符

好吧,可能不是。有些人喜欢数学,有些人可能从在学校必须学习乘法表和长除法时就讨厌数学,还有人介于两者之间。但我们都不能否认,数学是生活的基本组成部分,我们离不了它。尤其如此,当我们学习编写 JavaScript 程序(或任何其他语言),我们所做的很多事情都依赖于处理数值数据,计算新值等。你将不会惊讶地认识到 JavaScript 有一套可用的全功能的数学功能。

数字类型

  • 整数 例如:100,50,-8
  • 浮点数 有小数点的或者有小数位的 例如:12.3,5.4;
  • 双精度 这是一种特殊的浮点数,他们具有较高的精度,
  • 我们甚至有不同类型的数字系统! 十进制是基数10(意味着它在每列使用0-9),但是我们也有这样的东西:
  • 二进制
  • 八进制
  • 十六进制
  • 十进制 我们经常用的
  • 1.首先声明一个变量,分别是浮点数与整数,再输入输入变量名来检查是否正确

var myInt=5; var myFloat=6.667

2.在JavaScript中有一个 typeof 的运算符,是用来检查所属对象的类型的

typeof myInt;

typeof myFloat;

算数运算符

算术运算符是我们用来做和的基本运算符

运算符名称作用示例

  • 加法两个数相加。6 + 9
  • 减法从左边减去右边的数。20 - 15
  • 乘法两个数相乘。3 * 7
  • /除法用右边的数除左边的数10 / 5
  • %求余(有时候也叫取模)
  • 在你将左边的数分成同右边数字相同的若干整数部分后,返回剩下的余数

8 % 3 (返回 2,将8分成3份,余下2 。)

运算符优先级

这是因为运算符优先级 - 一些运算符将在计算总和的结果(在编程中称为表达式)时被应用于其他运算符。 JavaScript中的运算符优先级与学校的数学课程相同 - 乘法和除法总是先完成,然后加法和减法(总和总是从左到右进行评估)。

如果要覆盖运算符优先级,可以首先对要显式处理的部分进行括号。

具体的查看这个

递增递减运算符

它们最常用于循环中,您将在以后的课程中了解。 例如,假设您想循环查看价格表,并为每个价格增加销售税。 您可以使用循环依次查看每个值,并在每种情况下进行必要的计算,以添加销售税。 当需要时,增量器用于移动到下一个值。 我们实际上提供了一个简单的例子,显示了如何完成 —— 在线查看效果,并 查看源代码,看看是否可以发现增量器! 我们稍后将会详细介绍循环。

num++;num--;

您可以使浏览器以其他方式进行操作 - 递增/递减变量,然后返回值 - 将操作符放在变量的开头,而不是结束。 再次尝试上面的例子,但这次使用++ num1和--num2。

操作运算符

运算符名称作用示例等价于

+=递增赋值右边的数值加上左边的变量,然后再返回新的变量。x=3;

x +=4;x=3;

x=x + 4;

-=递减赋值左边的变量减去右边的数值,然后再返回新的变量。x=6;

x -=3;x=6;

x=x - 3;

*=乘法赋值左边的变量乘以右边的数值,然后再返回新的变量。x=2;

x *=3;x=2;

x=x * 3;

/=除法赋值左边的变量除以右边的数值,然后再返回新的变量。x=10;

x /=5;x=10;

x=x / 5;

比较运算符

运算符名称作用示例

===严格等于测试左右值是否相同5===2 + 4

!==严格不等于测试左右值是否相同5 !==2 + 3

<小于测试左值是否小于右值。10 < 6

大于测试左值是否大于右值10 > 20

<=小于或等于测试左值是否小于或等于右值。3 <=2

=大于或等于测试左值是否大于或等于正确值。5 >=4

: 您可能会看到有些人在他们的代码中和!=来判断相等和不相等,这些都是JavaScript中的有效运算符,但它们与=/!==不同,前者测试值是否相同, 但是数据类型可能不同,而后者的严格版本测试值和数据类型是否相同。 严格的版本往往导致更少的错误,所以我们建议您使用这些严格的版本。

文本处理-JavaScript中的字符串

接下来,我们将把注意力转向字符串——这是在编程中调用的文本片段。在本文中,我们将了解在学习JavaScript时,您应该了解的所有常见的事情,例如创建字符串、在字符串中转义引号、并将它们连接在一起。

字符串-基本知识

就像我们处理数字一样,我们声明一个变量,用一个字符串值初始化它,然后返回值。这里惟一的区别是,在编写字符串时,我们需要在字符串上加上双引号。

var badString=This is a test;

var badString='This is a test;

var badString=This is a test';

这些行不起作用,因为没有引号的任何文本字符串都被假定为变量名、属性名、保留字或类似。如果浏览器不能找到它,那么将会引发语法错误(例如:"missing ; before statement")。

如果浏览器能够识别字符串从哪里开始,但是不能找到字符串的结尾符,如第二行所示,那么它则会提示这样的错误(“unterminated string literal”)。如果您写的程序目前也引发这样的错误,那么请你回过头来仔细检查你的代码,看是否漏写了引号

在引用字符串中引号应该是统一的。

转义字符串中的字符

一般是用来确保一些文本能够使用,而不是被解释器错误的解释为代码,而产生错误。

在JavaScript中,我们通过在字符之前放一个反斜杠来实现这一点。试试这个:

var bigmouth='I've got no right to take my place...';


连接字符串

连接是一个很花哨的编程词,意思是“连接在一起”。在JavaScript中连接字符串使用加号(+)操作符,我们用它来将数字加在一起,但是在这种情况下,它做了一些不同的事情。让我们在控制台中尝试一个例子。

var one='Hello, ';

var two='how are you?';

var joined=one + two;

joined;

变量 joined 的值的结果,它包含的值为 "Hello, how are you?"。

最后一个例子中, 我们只是把两个字符串连接在一起,但是你可以喜欢连接多少就多少个, 只需要在它们之间加上 + 操作符。试试这个:

var multiple=one + one + one + one + two;

multiple;

你还能用真实的字符串和变量来混合。试试这个:

var response=one + 'I am fine — ' + two;

response;

注意: 当您在您的代码中输入一个实际的字符串时,用单引号或双引号括起来,它被称为字符串文字。

数字与字符

当我们尝试添加(或连接)一个字符串和一个数字时,会发生什么?你可能认为他会报错,但是她并没有。在遇到这种情况下,解释器重名的将数字转换为字符串。你可以通过typeof测试一下这个变量类型究竟是数字还是字符串。

让我们在我们的控制台中尝试一下:

'Front ' + 242;

var myDate='19' + '67';

typeof myDate;

如果您有一个数值变量,您想要将其转换为字符串,但不改变其他方式,或者您想要转换为一个数字而不改变的字符串变量,那么您可以使用以下两个构造:

如果可以的话, Number 对象将把传递给它的任何东西转换成一个数字。

试一试:

var myString='123';

var myNum=Number(myString);

typeof myNum;

另一方面,每个数字都可以用一个名为 toString() 的方法,它将把它转换成等价的字符串。

试试这个:

var myNum=123;

var myString=myNum.toString();

typeof myString;


有用的字符串方法

现在我们重申一遍—在javascript中,一切东西都可以被当作对象。例如我们创建一个字符串。

var string='This is my string';

  • 获取字符串的长度 采用length方法 var browserType='mozilla'; browserType.length;
  • 检索特定的字符串字符
  • 在相关的注释中,您可以使用方括号表示法返回字符串中的任何字符 - 这意味着您可以在变量名的末尾包含方括号([])。 在方括号内,您可以包含要返回的字符的编号,例如,您要检索第一个字母,可以这样做:

browserType[0];

电脑从0开始,不是1! 要检索任何字符串的最后一个字符,我们可以使用下面这行,将这种技术与我们上面看到的length属性相结合起来:

browserType[browserType.length-1];

mozilla”的长度为7,但由于计数从0开始,所以字符位置为6,因此需要长度为1。 例如,您可以使用它来查找一系列字符串的第一个字母,并按字母顺序排列。

  • 在字符串中查找子字符串并提取它
  • 有时候你会想要找出一个较小的字符串是否存在于一个较大的字符串中(我们通常会说一个字符串中存在一个子字符串)。 这可以使用indexOf()方法来完成,该方法需要一个parameter — 你想要搜索的子字符串。 尝试以下:
  • browserType.indexOf('zilla');
  • 结果是2,因为子字符串“zilla”从“mozilla”内的位置2(0,1,2 - 所以3个字符)开始。 这样的代码可以用来过滤字符串。 例如,假设我们有一个Web地址列表,但我们只想打印出包含“mozilla”的那些地址。
  • 这可以用另一种可能更有效的方式来实现。 尝试以下:
  • browserType.indexOf('vanilla');
  • 这应该会得到-1的结果 - 当在主字符串中找不到子字符串(在本例中为“vanilla”)时返回-1。

您可以使用它来查找不包含子串“mozilla”的所有字符串实例,或者如果使用否定运算符,请执行以下操作。 你可以这样做:

if(browserType.indexOf('mozilla') !==-1) {

// do stuff with the string

}

当你知道字符串中的子字符串开始的位置,以及想要结束的字符时,slice()可以用来提取 它。 尝试以下:

browserType.slice(0,3);

这时返回"moz"——第一个参数是开始提取的字符位置,第二个参数是提取的最后一个字符的后一个位置。所以提取从第一个位置开始,直到但不包括最后一个位置。(此例中)你也可以说第二个参数等于被返回的字符串的长度。

此外,如果您知道要在某个字符之后提取字符串中的所有剩余字符,则不必包含第二个参数,而只需要包含要从中提取的字符位置 字符串中的其余字符。 尝试以下:

browserType.slice(2);

这返回“zilla” - 这是因为2的字符位置是字母z,并且因为没有包含第二个参数,所以返回的子字符串是字符串中的所有剩余字符。

  • 转换大小写
  • 字符串方法toLowerCase()和toUpperCase()字符串并将所有字符分别转换为小写或大写。 例如,如果要在将数据存储在数据库中之前对所有用户输入的数据进行规范化,这可能非常有用。
  • 替换字符串的某部分
  • 您可以使用replace()方法将字符串中的一个子字符串替换为另一个子字符串。在基础的层面上, 这个工作非常简单。你当然可以用它做一些更高级的事情,但目前我们不会涉及到。

它需要两个参数 - 要被替换下的字符串和要被替换上的字符串。 尝试这个例子:

browserType.replace('moz','van');

注意,在实际程序中,想要真正更新browserType变量的值,您需要设置变量的值等于刚才的操作结果;它不会自动更新子串的值。所以事实上你需要这样写:browserType=browserType.replace('moz','van');。

数组

数组通常被描述为“像列表一样的对象”; 简单来说,数组是一个包含了多个值的对象。数组对象可以存储在变量中,并且能用和其他任何类型的值完全相同的方式处理,区别在于我们可以单独访问列表中的每个值,并使用列表执行一些有用和高效的操作,如循环 - 它对数组中的每个元素都执行相同的操作。 也许我们有一系列产品和价格存储在一个数组中,我们想循环遍历所有这些产品,并将它们打印在发票上,同时将所有产品的价格统计在一起,然后将总价格打印在底部。

如果我们没有数组,我们必须将每个产品存储在一个单独的变量中,然后调用打印的代码,并为每个产品单独添加。 花费的时间要长得多,效率很低,而且也容易出错。 如果我们有 10 个产品需要添加发票,那就只是有点麻烦而已,但是 100 个,或者 1000 个呢? 我们稍后将在文章中使用这个例子。

创建数组

数组由方

括号构成,其中包含用逗号分隔的元素列表。

假设我们想在一个数组中存储一个购物清单 - 我们会做一些像下面这样的事情。 在您的控制台中输入以下行:

var shopping=['bread', 'milk', 'cheese', 'hummus', 'noodles'];

shopping;

在这种情况下,数组中的每个项目都是一个字符串,但请记住,您可以将任何类型的元素存储在数组中 - 字符串,数字,对象,另一个变量,甚至另一个数组。 您也可以混合和匹配项目类型 - 它们并不都是数字,字符串等。尝试下面这些:

var sequence=[1, 1, 2, 3, 5, 8, 13];

var random=['tree', 795, [0, 1, 2]];

访问和修改数组

然后,您可以使用括号表示法访问数组中的元素,与 访问字符串中的字符 的方法相同。

在您的控制台中输入以下内容:

shopping[0];

// returns "bread"

您还可以简单地为单个数组元素提供新值来修改数组中的元素。 例如:

shopping[0]='tahini';

shopping;

PS:我们以前说过,但还是提醒一下 - 电脑从 0 开始计数!

请注意,数组中包含数组的话称之为多维数组。 您可以通过将两组方括号链接在一起来访问数组内的另一个数组。 例如,要访问数组中的另一个数组内第三个元素的值(见上一节),我们可以这样做:

random[2][2];

获取数组长度

你可以通过使用 length 属性获取数组的长度(数组中有多少项元素)。 尝试以下代码:

sequence.length;

// should return 7

虽然 length 属性也有其他用途,但最常用于循环(循环遍历数组中的所有项)。 例如:

var sequence=[1, 1, 2, 3, 5, 8, 13];

for (var i=0; i < sequence.length; i++) {

console.log(sequence[i]);

}

字符串与数组之间的转换

通常,您会看到一个包含在一个长长的字符串中的原始数据,您可能希望将有用的项目分成更有用的表单,然后对它们进行处理,例如将它们显示在数据表中。 为此,我们可以使用 split() 方法。 在其最简单的形式中,这需要一个参数,您要将字符串分隔的字符,并返回分隔符之间的子串,作为数组中的项。

我们来玩一下这个方法,看看它是如何工作的。 首先,在控制台中创建一个字符串:

var myData='Manchester,London,Liverpool,Birmingham,Leeds,Carlisle';

现在我们用每个逗号分隔它:

var myArray=myData.split(',');

myArray;

最后,尝试找到新数组的长度,并从中检索一些项目:

myArray.length;

myArray[0]; // the first item in the array

myArray[1]; // the second item in the array

myArray[myArray.length-1]; // the last item in the array

您也可以使用 join() 方法进行相反的操作。 尝试以下:

var myNewString=myArray.join(',');

myNewString;

将数组转换为字符串的另一种方法是使用 toString() 方法。 toString()可以比join()更简单,因为它不需要一个参数,但更有限制。 使用 join() 可以指定不同的分隔符(尝试使用与逗号不同的字符运行步骤4)。

var dogNames=["Rocket","Flash","Bella","Slugger"];

dogNames.toString(); //Rocket,Flash,Bella,Slugger

添加和删除数组项

我们还没有涵盖添加和删除数组元素,现在让我们来看看。 我们将使用在上一节中最后提到的 myArray 数组。 如果您尚未遵循该部分,请先在控制台中创建数组:

var myArray=['Manchester', 'London', 'Liverpool', 'Birmingham', 'Leeds', 'Carlisle'];

首先,要在数组末尾添加或删除一个项目,我们可以使用 push() 和 pop()。

让我们先使用 push() - 注意,你需要添加一个或多个要添加到数组末尾的元素。 尝试下面的代码:

myArray.push('Cardiff');

myArray;

myArray.push('Bradford', 'Brighton');

myArray;

当方法调用完成时,将返回数组的新长度。 如果要将新数组长度存储在变量中。例如:

var newLength=myArray.push('Bristol');

myArray;

newLength;

从数组中删除最后一个元素的话直接使用 pop() 就可以。 例如:

myArray.pop();

当方法调用完成时,将返回已删除的项目。 你也可以这样做:

var removedItem=myArray.pop();

myArray;

removedItem;

迎观看indesign自学教程,小编带大家学习 InDesign 的基本工具和使用技巧,了解如何向 InDesign 项目添加文本。

在本文中,将使用类型工具添加和处理此明信片或文件中的文本,并应用一些简单的文本格式。首先,绘制一个文本框并键入一些文本。在左侧的「工具」面板中选择「文字工具」。

来到文档前,按住并拖动以创建一个称为文本框的文本区域。绘制文本框后,光标将出现在文本框中。

使用大写字母键入 DESIGN TALKS 。

如果在其他程序中创建了文本,可以通过多种不同的方式将该文本带入InDesign文档,包括复制和粘贴或选择「文件」-「置入」…以放置Word文档、RTF或其他文件格式。

如果您还不知道此处将显示什么文本,也可以通过选择「文字」-「用假字填充」填充文本框。

创建文本后,通过拖动文本框将该文本移动到位。在左侧的「工具」面板中选择「选择工具」,并将指针移到文本上。拖动文本,使其在橙色线的左边缘对齐。

指针变为白色,框架的左边缘可能会出现一条绿线,告诉您它与该线对齐。这条绿线是一个智能指南,它对对齐内容很有用。

默认情况下,智能辅助线处于打开状态,可以通过选择「视图」-「网络和参考线」-「智能参考线」来关闭和打开智能辅助线。

这个复选标记意味着他们已经开始了。如果此菜单处于打开状态,可以按ESC键隐藏此菜单。

单击并拖动文本框的右下角,如果在释放鼠标按钮时使其足够窄,则文本将在其中环绕。

如果拖动并使文本框太小而无法容纳文本,则右下角将显示一个红色加号,表示文本不再适合。这称为重叠文本。

拖动同一个角点,使框架变大,以便可以看到所有文本,并使右边缘与其下方线条的右边缘对齐,如下所示。

接下来,更改一些简单的文本格式。首先,选择框架中的文本,将指针向右移动到文本上,然后双击以切换到「文字工具」。

光标现在应该位于文本中。现在可以拖动文本来选择它,但需要小心。注意指针,如果指针位于文本上方,并显示类似于此的眼线,则可以在文本上拖动以选择它,但如果将指针移离框架外的文本,指针的外观将发生变化。

如果看到此指针时拖动,将创建一个新的文本框。指针位于文本框中时,拖动文本以将其选中。

在文档右侧的「属性」面板中,可以看到一系列文本格式选项。转到「字体大小」选项并在字段中选择值,键入29,然后按Return键进行更改。

现在,如果文本不适合文本框,如果在文本框的右下角看到红色加号,尝试在「属性」面板中键入较小的字体。

要更改文本的颜色以使其更具可读性,在文档右侧的「属性」面板中单击「填色」并确保选中此处的「色板」选项。

此选项显示与名为样例的文档一起保存的一系列默认颜色。选择可用作白色的[纸色],按ESC键隐藏此面板。

如果不再选择文本,选择「编辑」,选择「全部取消选择」。

现在已经知道如何将文本添加到所有类型的项目中,例如小册子的描述性文本或目录中的副本,然后应用一些简单的格式更改,如字体大小和颜色。

以上就是在 InDesign 中添加文本的方法。

https://www.macz.com/mac/7645.html?id=NzY4OTYwJl8mMjcuMTg2LjguMTUy