【问题标题】:How to print text as italicized on a text file?如何在文本文件上打印斜体文本?
【发布时间】:2021-08-23 02:33:20
【问题描述】:

我正在制作一个程序,要求用户输入引文信息(即作者姓名、文章标题、期刊标题、卷号)作为字符串。然后它将处理该信息以将其转换为正确的 APA 第 7 版引文,并最终将其打印到文本文件中(这将使用 fprintf 完成)。问题是某些信息——即期刊名称和卷号——需要斜体,但据我所知,fprintf 无法打印格式化文本,因此斜体是完全不可能的。

我的问题是,有什么方法可以使特定字符串在文本文件中显示为斜体? C 甚至可以通过其标准库做到这一点吗?

【问题讨论】:

  • 您想对输出文件使用什么编码?你想要某种 unicode 编码吗?还是您想使用 HTML 格式或类似的东西?你显然不想要 ASCII,所以你需要做出选择。
  • 这与 printf 没有能力无关。纯常规文本文件不能存储斜体文本。您需要不同的格式,例如 HTML 或 Markdown。
  • 对于Epson FXprintf("\x1B\x34%s\x1B\x35", title);
  • fprintf 可以将任何内容写入文件,包括斜体文本。问题是您需要一种能够存储格式化文本的文件格式。简单的文本文件不能。您可以使用 RTF 或 PDF 或 DOC/DOCX 文件格式。
  • 为了完整性,与 DOC/DOCX 竞争:ODT。

标签: c string text printf file-processing


【解决方案1】:

我想通了。首先,我用写操作打开(或者更确切地说是创建)了一个名为“citations.html”的文件。然后,我添加了多个 fprintf 语句来编写文件,以便以 HTML 格式读取文件。这是下面的代码sn-p:

fp = fopen("citations.html", "w");

    fprintf(fp, "<!DOCTYPE HTML>\n");
    fprintf(fp, "<html>\n");
    fprintf(fp, "<body>\n");

    for(i=0;i<articleNum;i++)
        fprintf(fp, "<p>%s (%d). %s. <i>%s, %d</i>(%d), %d-%d. %s</p>\n", articles[i].authors_list, articles[i].year, articles[i].articleTitle, 
                                                            articles[i].periodicalTitle, articles[i].volNum, articles[i].issNum,
                                                            articles[i].pageMin, articles[i].pageMax, articles[i].link);

    fprintf(fp, "</body>\n");
    fprintf(fp, "</html>");

    fclose(fp);

请注意,将打印的字符串和整数存储为结构数组的成员。

在调用包含此代码的函数时,程序现在会生成一个可以用浏览器打开的 html 文件。浏览器将显示文本 - 完整的斜体 - 甚至可以以完整的格式复制粘贴到 MS Word。

感谢大家的澄清。看来我完全误解了文本文件的工作原理,但至少现在一切都清楚了。

【讨论】:

  • 警告:如果authors_listvalue 类似于“Peter AKA ”,它将无法正确显示。
【解决方案2】:

这是使用fprintf 创建带有斜体文本的文件 的代码示例。该文件位于Rich Text Format,可以使用许多文字处理应用程序(包括写字板和Word)打开。

该文件将包含(注意斜体部分):

这是文本的一个示例

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char* fn = "e:\\temp\\document1.rtf";
    FILE* fp = fopen(fn, "w");
    if (fp == NULL) {
        perror(fn);
        return 1;
    }
    fprintf(fp, "%s\n", "{\\rtf1\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang1036");
    fprintf(fp, "%s\n", "{ \\fonttbl");
    fprintf(fp, "%s\n", "{\\f0\\fnil\\fcharset0 Calibri; }");
    fprintf(fp, "%s\n", "}");
    fprintf(fp, "%s\n", "\\viewkind4\\uc1");
    fprintf(fp, "%s\n", "\\pard\\sa200\\sl276\\slmult1\\f0\\fs22\\lang12 ");
    fprintf(fp, "%s\n", "This is \\i an example \\i0 of text.\\par");
    fprintf(fp, "%s\n", "\\par");
    fprintf(fp, "%s\n", "}");

    fclose(fp);
    printf("Document \"%s\" generated\n", fn);
}

找出要使用哪个 RTF 代码的最简单方法是使用写字板创建一个文档,然后使用记事本查看它。记事本将显示您创建的文档的 RTF 源代码,而写字板将呈现 RTF 代码以显示格式。

【讨论】:

  • 我们有类似的解决方案,但我决定使用 HTML 而不是 RTF。
  • 好的,很好。你本可以接受我的回答:公平,因为我给了你这个想法。
猜你喜欢
  • 2016-05-27
  • 2022-12-24
  • 2017-02-03
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多