精华内容
下载资源
问答
  • MSGReader 是一个 C# .NET 4.6.1 和标准 2.1 库,用于读取 Outlook MSG 和 EML(Mime 1.0)文件。 几乎支持 Outlook 中的所有常见对象: 电子邮件 约定 任务 联系卡 粘滞便笺 它支持 MSG 文件中的所有身体类型,...
  • MATLAB-CDI 是一组 MATLAB 函数,它们通过遵循统一语法的高级函数调用来导入/读取 GRIB 和 netCDF 文件。 该软件包支持通常由气候模型生成的完整 GRIB 和 netCDF 格式规范的子集。 从技术上讲,MATLAB-CDI 由读取 ...
  • 阅读器的分页实现

    千次阅读 2018-04-22 22:34:02
    最近在写一个阅读器app,命名为Light,代码已经开源,点击查看Light源代码。 本项目基于Flutter,了解更多请点击flutter.io。 本方案的核心原理是利用了TextPainter特性,通过多次渲染来找到当前页面能够显示的...

    最近在写一个阅读器app,命名为Light,代码已经开源,点击查看Light源代码
    本项目基于Flutter,了解更多请点击flutter.io
    本方案的核心原理是利用了TextPainter特性,通过多次渲染来找到当前页面能够显示的最大字符数。

    文字描述:获得一段内容后调用TextPainter.layout(),如果发生行溢出则减少字符数量,如果未溢出则增加字符数量,不断循环这个过程,直到这些字符恰好能够填满整个页面且不溢出,那么就完成了一次分页计算。以防万一,对循环设置一个次数上限。

    程序流程图如下:
    这里写图片描述

    
      /// 获取带样式的文本对象
      TextSpan getTextSpan(String text) {
        return new TextSpan(text: text, style: _textStyle);
      }
    
      /// 接收内容
      /// 追加内容返回false
      /// 计算完毕返回true
      bool load(String text) {
        if (layout(text)) {
          return false;
        }
    
        int start = 0;
        int end = text.length;
        int mid = (end + start) ~/ 2;
    
        // 最多循环20次
        for (int i = 0; i < 20; i++) {
          if (layout(text.substring(0, mid))) {
            if (mid <= start || mid >= end) break;
            // 未越界
            start = mid;
            mid = (start + end) ~/ 2;
          } else {
            // 越界
            end = mid;
            mid = (start + end) ~/ 2;
          }
        }
        length = mid;
        return true;
      }
    
      /// 计算待绘制文本
      /// 未超出边界返回true
      /// 超出边界返回false
      bool layout(String text) {
        times++;
        text = text ?? '';
        textPainter
          ..text = getTextSpan(text)
          ..layout(maxWidth: pageSize.width);
        return !didExceed;
      }
    
      /// 是否超出边界
      bool get didExceed {
        return textPainter.didExceedMaxLines ||
            textPainter.size.height > pageSize.height;
      }
    

    完成一次计算的平均时间为23毫秒,在阅读时几乎感觉不到卡顿,但是对于整书的分页计算来说还是很耗时。
    这里写图片描述

    如果有问题欢迎即时交流,期待您更精彩的方案。

    Flutter中文文档
    编程技术交流

    Avenge应用商店

    avenge.app

    展开全文
  • 用VC++实现一个文本文件阅读器

    千次阅读 2016-03-23 16:40:03
    首先新建一个MFC exe,基于对话框工程; 设计界面如下; 添加按钮单击函数; 为对话框类添加成员函数; 为列表框添加一个成员变量; 添加列表框单击函数;...TCHAR pszPath[MAX_PATH];  对话框类

    用VC++实现一个文本文件阅读器,用户选定目录,列出该目录下的所有.txt,单击某个txt,在右侧显示内容;

    首先新建一个MFC exe,基于对话框工程;

    设计界面如下;



    添加按钮单击函数;



    为对话框类添加成员函数;



    为列表框添加一个成员变量;



    添加列表框单击函数;(选中条目后执行的函数;)



    对话框类头文件手动添加

    private:
    TCHAR pszPath[MAX_PATH]; 


    对话框类实现文件中新增函数代码

    void CTxtreaderDlg::OnOK() 
    {
    // TODO: Add extra validation here
    BROWSEINFO bi;   
    bi.hwndOwner      = this->GetSafeHwnd();  
    bi.pidlRoot       = NULL;  
    bi.pszDisplayName = NULL;   
    bi.lpszTitle      = TEXT("请选择文件夹");   
    bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;  
    bi.lpfn           = NULL;   
    bi.lParam         = 0;  
    bi.iImage         = 0;   


    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);  
    if (pidl == NULL)  
    {  
    return;  
    }  


    if (SHGetPathFromIDList(pidl, pszPath))  
    {  
    //AfxMessageBox(pszPath);  
    SetDlgItemText(IDC_STATIC, pszPath);
    FindTxtFile(pszPath);
    }
    //CDialog::OnOK();
    }


    void CTxtreaderDlg::FindTxtFile(CString strFoldername)
    {
    CFileFind fileFind;  
    int i = 0;    
    CString strdir = strFoldername + _T("\\*.txt");  
    m_list1.ResetContent();
    if(fileFind.FindFile(strdir,0))  
    {  
    BOOL bRet = TRUE;  
    while(bRet)  
    {  
    bRet = fileFind.FindNextFile();  
    if(fileFind.IsDots())  
    {  
    continue;  
    }  
    if(fileFind.IsDirectory())  
    {  
    //str.push_back(fileFind.GetFilePath());  
    //strDir[i++] = fileFind.GetFilePath();  
    }  
    else  
    {  
    m_list1.AddString(fileFind.GetFileName());
    }  
     
    }  
    fileFind.Close();  



        return;
    }


    void CTxtreaderDlg::OnSelchangeList1() 
    {
    // TODO: Add your control notification handler code here
    SetDlgItemText(IDC_EDIT1,"");
    int n=m_list1.GetCurSel();
    CString content;
    TCHAR filename[32];
    CString szLine="";
    m_list1.GetText(n,filename);

    CStdioFile file;
    // file.Open(pszPath+_T("\\")+filename,CFile::modeRead);   error C2110: cannot add two pointers
    strcat(pszPath,_T("\\"));
    strcat(pszPath,filename);
    //pszPath+=_T("\\");
    //pszPath+=filename;
    file.Open(pszPath,CFile::modeRead);
    //逐行读取字符串
    while(file.ReadString(szLine))
    {
    content+=szLine;
    content+="\r\n";
    }


    file.Close();

    SetDlgItemText(IDC_EDIT1,content);

    }

    效果:



    展开全文
  • 使用vuejs+epubjs实现电子书阅读器的基本功能阅读器的基本功能源码下载地址 这是我第一次写博客,e 有点紧张,新手还不太会操作,如果不合理的地方希望大佬指点 谢谢。下面是项目需要,然后我在网上学习的如何使用...

    这是我第一次写博客,有点紧张,新手还不太会操作,如果不合理的地方希望大佬指点 谢谢。下面是项目需要,然后我在网上学习的如何使用epubjs制作简单阅读器的大体过程(网上有个老师讲的感觉还是不错的,他使用的是纯vue开发,而我使用的html+jq并引用了vuejs的,还是有些区别的 哈哈。不过还是给大家推荐一下这个教程)。简单的记录一下。(^ __^)

    阅读器的基本功能

    首先来介绍一下电子书阅读器的基本功能:翻页、字体大小设置、背景主题色、进度等功能。完成这些功能,基本可以实现一个简单的阅读器了。下面就开始一一介绍各个功能的具体实现。

    引入js文件
    首先要引入epubjs文件(这好像是废话),此文件可以在网上搜搜下载,我在最后也添加了源码供大家下载,里面也有此文件。

    <script src="../../js/epub.min.js"></script>
    

    既然已经引入js文件了,那接下来就开搞,实现阅读器功能。

    渲染电子书
    首先html代码如下,用来盛放电子书。

    <div id="reader" class="reader"></div>
    

    有了盛放电子书的容器了,那我们就得解析电子书,然后放进去。下面是对电子书进行初始化解析:

    vm.book = ePub(url);
    

    这里url是图书的路径,这样可以得到图书的基本信息了。
    然后对图书进行渲染,使用book.renderTo()方法控制图书在屏幕所占位置。

    vm.rendition = vm.book.renderTo("reader", {
       width: window.innerWidth,
        height: vm.winHeight
    });
    vm.book.rendition.display();
    

    renderTo有两个参数,第一个参数为div的id,将生成的dom挂在该div下面,第二个参数指定宽高。返回值是一个rendition对象,使用该对象对图书进行渲染操作。

    完成上述操作,已经在网页中得到电子书的第一页了(如果有封面,第一页就是一张图)。

    添加翻页功能

    翻页功能使用rendition对象的prev()方法和next()方法实现翻上下页。
    html代码

    <div class="read-wrapper">
        <div id="reader" class="reader"></div>
        <a id="prev" href="#prev" @click="prevPage()" class="arrow" style="width: 11%;"></a>
        <a id="next" href="#next" @click="nextPage()" class="arrow" style="width: 11%;"></a>
    </div>
    

    js代码

    prevPage: function () {
        vm.rendition.prev();
    },
    nextPage: function () {
        vm.rendition.next();
    }
    

    此处添加的点击翻页,两个按钮放在左右两侧,也可滑动翻页(看自己需求)。翻页的两个方法会返回一个promise对象,可进行后续操作,如翻页时进度变化(下面会介绍)。到这里已经可以正常的预览电子书了。是不是感觉很简单。

    添加字号大小设置

    字题大小设置也很简单,使用epubjs的themes对象即可实现,该对象提供了一个方法fontSize(),将参数传入即可修改字体大小。

    //设置字体大小
    setFontSize: function (fontSize) {
        vm.defaultFontSize = fontSize;
        //设置Theme对象
        if (vm.rendition.themes) {
            vm.rendition.themes.fontSize(fontSize + 'px');
        }
    }
    

    背景主题色修改

    与字体大小设置类似,也有现成方法,使用themes.select()方法即可对自定义的主题进行切换。
    主题可以自定义颜色,代码如下
    自定义主题:

    themeList: [
         {
             name: '默认',
             style: {
                 body: {
                     'color': '#000', 'background': '#fff'
                 }
             }
         },
         ......
     ]
    

    修改主题色:
    添加个修改的按钮即可

    setTheme: function (index) {
        vm.rendition.themes.select(vm.themeList[index].name);
        vm.defaultTheme = index;
    }
    

    添加进度功能

    使用html的input标签的range控件实现
    html代码:

    <div class="progress-wrapper">
        <input class="progress" type="range" max="100" min="0" step="0.01"
               @change="onProgressChange($event.target.value)"
               @input="onProgressInput($event.target.value)" :value="progress"
               :disabled="!bookAvailable" ref="progress">
    </div>
    

    介绍一下里面每个东西的大致意思。

    1. 类型是range的滑动控件,绑定值为progress,max是指progress最大值为100,min指progress最小值为0,step指定按照0.01的幅度进行增长。滑动一个,增长0.01。
    2. @change事件,修改完成后触发的事件,即你点到那个进度后触发的,$event.target.value可以获取到最新的progress值。
    3. @input是修改过程时触发的事件,即拖动滑块会触发(比如拖动滑块的时候,百分比进行变化)。

    当然要实现进度改变,前提首先要进行分页(分页我理解的就是要得到整本书才能进行进度跳转),使用epubjs的location对象实现,写在book对象的钩子函数ready内。

    vm.book.ready.then(() => {
        //执行分页
        return vm.book.locations.generate(750 * (window.innerWidth / 375));
    }).then(result => {
        console.log(result);
        //获取locations对象
        vm.locations = vm.book.locations;
    })
    

    以上操作已完成分页,然后通过location.cfiFromPercentage()方法获取百分比对应的epubcfi(epubcfi可定位到电子书任意一个字符),将epubcfi渲染即可跳到相应位置。注:在进度条可操作之前,必须是分页执行完之后得到location对象才可对进度条进行操作。(可添加一标识,判断location对象是否得到,未得到时提示进度条加载中,完成后显示在操作)。

    //progress 进度条的数值(0-100)
    onProgressChange: function (progress) {
        vm.progress = progress;
        var percentage = progress / 100;
        vm.location = percentage > 0 ? vm.locations.cfiFromPercentage(percentage) : 0
        vm.rendition.display(vm.location);
    },
    onProgressInput: function (progress) {
        var percentage = progress / 100;
        vm.location = percentage > 0 ? vm.locations.cfiFromPercentage(percentage) : 0
        this.$refs.progress.style.backgroundSize = `${progress}% 100%`;
    }
    

    下面这个方法是修改进度数值。
    以上已经完成进度了。上面说到翻页的时候进度也想实现变化,我们可以反过来考虑,获取当前页的百分比即可。首先通过rendition.currentLocation()获取当前页的信息,然后通过currentLocation.start.cfi获取当前页开始位置的epubcfi,将得到的结果传到locations.percentageFromCfi()内获取百分比,最后在调用改变进度数值的那个方法即可实现翻页进度变化。代码如下:

    prevPage: function () {
        vm.rendition.prev().then(() => {
            vm.hideTitleAndMenu();
            var currentLocation = vm.rendition.currentLocation();
            var progress = Math.floor(((vm.locations.percentageFromCfi(currentLocation.start.cfi)).toFixed(5)) * 10000) / 100;
            vm.progress = progress;
            vm.onProgressInput(progress);
        })
    },
    nextPage: function () {
        vm.rendition.next().then(() => {
            vm.hideTitleAndMenu();
            var currentLocation = vm.rendition.currentLocation();
            var progress = Math.floor(((vm.locations.percentageFromCfi(currentLocation.start.cfi)).toFixed(5)) * 10000) / 100;
            vm.progress = progress;
            vm.onProgressInput(progress);
        })
    }
    

    电子书目录

    此功能也需要在book对象的钩子函数中添加,

    vm.book.ready.then(() => {
        vm.navigation = vm.book.navigation;//目录
        console.log(vm.navigation);
        //执行分页
        return vm.book.locations.generate(750 * (window.innerWidth / 375));
    }).then(result => {
        console.log(result);
        //获取locations对象
        vm.locations = vm.book.locations;
        console.log(vm.locations);
    })
    

    首先得到了navigation。
    Navigation结构如下:
    在这里插入图片描述

    Navigation.toc表示电子书的目录结构,toc下的每一个元素对应一个目录,toc.href表示目录路径(链接),toc.label是当前目录的名字。还有一个toc.subitems里面包含的是该目录下还有其他的二级(三级)目录,可根据需要使用几级目录。

    将目录的路径渲染即可跳转到指定目录下。

    //根据链接跳转到指定位置
    jumpTo: function (href) {
        vm.rendition.display(href);
    }
    

    以上就完成了基本的阅读器功能,基本的实现方法都已经列出,剩下的就是在阅读器中样式和点击事件的添加了,大佬可以自行添加尝试一下,如有什么问题或者错误请指出,然后大家讨论一下,新手请多关照。o(∩_∩)o

    源码下载

    代码下载

    展开全文
  • 这是一个简单的TCX解析/读取,可以读取Garmin TCX文件扩展名文件。 该程序包当前不支持单圈运动,并将整个运动合并为一个运动对象。 当前解析以下数据:经度,纬度,海拔,时间,距离,hr_value,节奏,瓦特,...
  • 如果你想学习如何使用Markdown编辑, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑进行了一些功能拓展与语法支持,除了标准的Markdown编辑功能,我们增加了如下几...

    小记:这是刚开始写博客,准备为了学习qt的同时也分享下自己在qt上的得失,以及遇到的问题
    正文:1编译环境选择目前用的是vs2013+qt5.6.1开发的,计划是这样的准备初步做成C/S端的形式,Client采用qt开发,sever准备还是运用c++去开发,第三方库准备用boost。
    2.第一步主要是做了初始的界面搭建,为client的搭建做准备实现的主要功能是初始化界面,实现无边框窗口和一些系统的按钮包括最大化最小化关闭
    3头文件,以后会陆续更新功能记录自己的学习
    class MyTxtRead : public QMainWindow
    {
    Q_OBJECT

    public:
    MyTxtRead(QWidget *parent = 0);
    ~MyTxtRead();

    private:
    Ui::MyTxtReadClass ui;
    private:
    QRect m_areaMovable;//可移动窗口的区域,鼠标只有在该区域按下才能移动窗口
    bool m_Drag; //记录鼠标是否按下
    QPoint m_DragPosition;//记录鼠标位置
    QToolButton * tbtn_show_min;
    QToolButton * tbtn_show_max;
    QToolButton * tbtn_show_close;
    QLabel *lab_winodow_Icon;
    QLabel * lab_window_title;
    bool windowIsMax;
    public slots:
    void ShowWindowMax();
    void ShowWindowMin();
    void ShowWindowClose();

    private:
    virtual void mousePressEvent(QMouseEvent *event);
    virtual void mouseMoveEvent(QMouseEvent *event);
    virtual void mouseReleaseEvent(QMouseEvent *event);
    void InitWindow();
    void ResizeWindow();
    void WindowMax();
    };
    cpp实现文件
    MyTxtRead::MyTxtRead(QWidget *parent)
    : QMainWindow(parent)
    {
    ui.setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint);//无边框
    InitWindow();

    }

    MyTxtRead::~MyTxtRead()
    {

    }

    void MyTxtRead::InitWindow()
    {
    QDesktopWidget* pDesktopWidget = QApplication::desktop();
    QRect deskRect = pDesktopWidget->availableGeometry();
    int px = deskRect.width() / 6;
    int py = deskRect.height() / 6;
    int width = deskRect.width() / 3 * 2;
    int highth = deskRect.height() / 3 * 2;
    setGeometry(QRect(px, py, width, highth));
    m_areaMovable = geometry();
    m_Drag = false;
    tbtn_show_min = new QToolButton(ui.f_WindowCloseTool);
    tbtn_show_max = new QToolButton(ui.f_WindowCloseTool);
    tbtn_show_close = new QToolButton(ui.f_WindowCloseTool);
    QPixmap minPix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);
    QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
    QPixmap maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton);
    tbtn_show_min->setIcon(minPix);
    tbtn_show_max->setIcon(maxPix);
    tbtn_show_close->setIcon(closePix);
    int wide = ui.f_WindowCloseTool->rect().width();
    tbtn_show_close->setGeometry(wide - 25, 5, 20, 20);
    tbtn_show_max->setGeometry(wide - 55, 5, 20, 20);
    tbtn_show_min->setGeometry(wide - 85, 5, 20, 20);
    tbtn_show_min->setStyleSheet(“background-color:transparent;”);
    tbtn_show_max->setStyleSheet(“background-color:transparent;”);
    tbtn_show_close->setStyleSheet(“background-color:transparent;”);
    connect(tbtn_show_min, SIGNAL(clicked()), this, SLOT(ShowWindowMin()));
    connect(tbtn_show_max, SIGNAL(clicked()), this, SLOT(ShowWindowMax()));
    connect(tbtn_show_close, SIGNAL(clicked()), this, SLOT(ShowWindowClose()));
    QPixmap title_icon(":/MyTxtRead/Resources/img/tubiao1.png");
    lab_winodow_Icon = new QLabel(ui.f_WindowName);
    lab_winodow_Icon->setGeometry(2, 2, 20, 20);
    title_icon.scaled(lab_winodow_Icon->size(), Qt::KeepAspectRatio);
    lab_winodow_Icon->setScaledContents(true);
    lab_winodow_Icon->setPixmap(title_icon);
    windowIsMax = false;
    }

    void MyTxtRead::mousePressEvent(QMouseEvent *e)
    {
    //鼠标左键
    if (e->button() == Qt::LeftButton)
    {
    m_DragPosition = e->pos();
    m_Drag = m_areaMovable.contains(m_DragPosition);
    }
    }

    void MyTxtRead::mouseMoveEvent(QMouseEvent *e)
    {
    if (m_Drag)
    {
    move(pos() + e->pos() - m_DragPosition);
    }
    }

    void MyTxtRead::mouseReleaseEvent(QMouseEvent *)
    {
    m_Drag = false;
    }

    void MyTxtRead::ShowWindowMax()
    {
    if (!windowIsMax)
    {
    windowIsMax = true;
    WindowMax();
    }
    else
    {
    windowIsMax = false;
    ResizeWindow();
    }

    }

    void MyTxtRead::ShowWindowMin()
    {
    this->showMinimized();
    }

    void MyTxtRead::ShowWindowClose()
    {
    this->close();
    }

    void MyTxtRead::ResizeWindow()
    {
    QDesktopWidget* pDesktopWidget = QApplication::desktop();
    QRect deskRect = pDesktopWidget->availableGeometry();
    int px = deskRect.width() / 6;
    int py = deskRect.height() / 6;
    int width = deskRect.width() / 3 * 2;
    int highth = deskRect.height() / 3 * 2;
    setGeometry(QRect(px, py, width, highth));
    }

    void MyTxtRead::WindowMax()
    {
    QDesktopWidget* pDesktopWidget = QApplication::desktop();
    QRect deskRect = pDesktopWidget->availableGeometry();
    int width = deskRect.width();
    int highth = deskRect.height();
    setGeometry(QRect(0, 0, width, highth));
    }

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t &ThinSpace; . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • PDF Office Max 是一款Mac上优秀强大的PDF文档处理工具,集成了 PDF 编辑器、PDF 阅读器、PDF 转换器和 PDF 生成器多个功能于一身,支持编辑原始PDF文本,原始PDF图像,原始PDF表单,创建自己的PDF表单,签名,填写...
  • 根据提示猜测解决方案应该就是改大php.ini文件里upload_max_filesize的数值, 于是去到主机服务商的帮助中心查看文档 处理方案如下: 到cPanel面板找选项 多PHP INI编辑,点开 页面选择基本模式,再选择对应的...
  • 3d max插件的基本知识和安装方法

    万次阅读 2015-10-08 20:47:53
    3D Max插件的知识要学习下,先学怎么用,再学怎么做 3D MAX 插件的基本知识和安装方法 首先,本文的内容不包括商业插件的破解或解密,只是就 MAX 插件的一般安装规律作一简单说明。 同许多优秀的设计软件一样,...
  • 脚本执行、如何控制渲染、如何执行外部命令或程序以及如何退出和重置 3ds max 系统等方面的问题。 本书的最大特点是用实例程序对 MAXScript 脚本语言的功能进行演示,实用性强,特别适合有一定 3ds max 使用基础的...
  • 基于mupdf的PDF阅读器

    千次阅读 2018-09-27 17:42:29
    上一篇讲了基于poppler库的PDF阅读器的开发,这一篇来讲基于mupdf的PDF阅读器的开发。 在上一篇的篇尾我有附效果图,可以很明显的看出来这个效果是非常差的,网络上有童鞋同样遇到了这个问题,并且做了修正,但是,...
  • ConnectionError at /data/booking/hanyue/...HTTPConnectionPool(http://): Max retries exceeded with url: / (Caused by <class ‘socket.gaierror’>: [Errno -2] Name or service not known) Requ...
  • 使用方法,包括Brazil超级渲染系统、CAT多足动物骨骼系统、Thinking Particles超级粒子系统和 DreamScape梦幻景观系统。书中采用循序渐进的教学方式并精心地安排了51个精彩案例,深入剖析了目 前在电影特效、电视...
  • PID控制构造完毕,我们需要通过r(k)和y(k)得到e(k),再通过e(k)得出u(k),进而再求解出y(k),再结合r(k)求解出e(k),…以此循环,求解出离散的响应点。 详细的代码如下: ts = 0.005 ; % 采样时间 = 0.005 s ...
  • 就会出现这个界面,执行结果显示在这个界面中 补充一点: 如果在IDLE中编辑.py文件,记得修改后要保存(ctrl+s),再运行(F5) 四:使用资源管理运行hello.py hello.py文件在桌面 import random print("hello,...
  • DBC文件阅读方法

    千次阅读 2020-06-11 15:52:26
    第一个文件就是apollo官方可以通过工具直接生成protocol文件的,第二个文件主要是说明如何使用这个协议的,第三个文件是第一个文件的延展,具体到每个位或字节代表什么。但是可能部分厂家偷懒就只有第一个和第二个...
  • 3ds max VRay

    2013-01-11 12:10:09
    特别适合希望快速在建筑效果图渲染方面提高渲染技巧的人员阅读,也可以作为大、中专院校或相关社会类培训班的学习用书。 目录: 第1章 VRay基础知识 1.1 VRay渲染简介 1.2 设置VRay渲染 1.3 VRay渲染...
  • 【应用】Markdown 在线阅读器

    千次阅读 2017-01-10 17:39:13
    前言一款在线的 Markdown 阅读器,主要用来展示 Markdown 内容。支持 HTML 导出,同时可以方便的添加扩展功能。在这个阅读器的基础又做了一款在线 Github Pages 页面生成器,可以方便的生成不同主题风格的 GitHub ...
  • 3ds Max 2021最初发布于2020年3月24日。6月3日,3ds Max 2021.1正式发布。 关键更改:PBR材质3ds Max 2021对软件的材质和渲染工具集进行了重大更改,其中尤其重要的一点是更好地支持了游戏和实时工作的PBR(基于物理...
  • MinnowBoard MAX 硬件开发板

    千次阅读 2015-06-26 18:01:07
    Minnowboard MAXMinnowBoard MAX是一款紧凑型,经济实惠,而且功能强大的开发板为专业人士和制造商。开放式的硬件设计使无尽的定制和集成的潜力。它采用64位英特尔®凌动™E38xx系列SoC的CPU,集成英特尔高清显卡。...
  • 今天要用到3dmax和Unity3d进行建模实验,因此安装了3dmax,安装中发现了一个网上的安装教程中很少提及但是又非常重要...1、首先将安装文件下载到电脑本地,安装程序双击即可自动解压,选择好解压存放文件夹。解压完...
  • 文件查看(C语言)

    千次阅读 2017-02-05 15:50:11
    直接,代码如下: #include #include #include #define MAXLEN 100 const int DISPLAY = 80; const int PAGE_LENGTH = 20;...int main(int argc,char *argv[]){ ... char filename[FILENAME_MAX]; FILE *pfile = NULL;
  • 3ds max maxscript python 入门--执行python的三种途径 一、maxscript直接执行python命令 python.Execute<python command/expression> python.Execute后面跟的是要执行的python命令,命令用双...
  • Python内置函数

    万次阅读 多人点赞 2019-05-10 15:10:36
    Python max() 函数 Python min() 函数 Python next() 函数 Python object()函数 Python oct() 函数 Python open() 函数 Python ord() 函数 Python pow() 函数 Python print() 函数 Python property() 函数 Python ...
  • 前端面试题

    万次阅读 多人点赞 2019-08-08 11:49:01
    你做的页面在哪些流览测试过?这些浏览器的内核分别是什么? 21 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗? 21 Quirks模式是什么?它和Standards模式有什么区别 21 div+css的布局较...
  • 全书共分为7章,其中第1章和第4章分别对3ds Max和VRay灯光、材质、渲染方面的功能命令进行了系统的讲解:第2章和第3章介绍如何利用3ds Max默认渲染进行室内空间表现。第5章至第7章通过3个场景,介绍了VRav室内表现...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    进销存价格 127 2.5.Windows文件命名 127 总结 128 边界值 129 第十四章 系统测试执行 129 测试环境搭建文档: 130 用例执行: 130 填BUG报告: 130 第十五章 QC(Quality Center) 131 QC后台: 133 QC前台: 134 ...
  • 3dMax Plugin

    千次阅读 2013-04-06 20:47:41
    MAX 中安装插件以后,如果你对这个插件不是很熟悉的话,找到它恐怕也要费一番周折。通常你可以根据插件的类型(可以参考上面的表格),在 MAX 的不同位置发现它。 建模类插件(DLO),在建立命令面版能够找到它,...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    C#基础教程-c#实例教程,适合初学者。...当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。 1.1 C#语言特点 Microsoft.NET(以下简称.NET)框...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,067
精华内容 28,426
关键字:

max文件阅读器