記事をMarkdown構文に手動で数日間変換してきましたが、かなり面倒になっています。これらのいくつかは、3ページまたは4ページであり、イタリックおよびその他の強調されたテキストです。 (.rtf | .doc)ファイルを変換して、Markdown Syntaxをクリーンアップして、利用できるより速い方法はありますか?
Macを使用している場合、textutil
はdoc、docx、rtfをhtmlに変換し、pandocは結果のhtmlをマークダウンに変換します。
$ textutil -convert html file.doc -stdout | pandoc -f html -t markdown -o file.md
私は script を持っているので、textutil、pdf2html、およびpandocを使用して、スローしたものをマークダウンに変換しようとします。
ProgTips は Wordマクロで可能な解決策を持っています (ソースダウンロード) :
A 単純なマクロ (ソースダウンロード) 最も簡単なものを自動的に変換します。このマクロは:
- 太字と斜体を置き換える
- 見出しを置き換える(見出し1-6とマークされている)
- 番号付きリストと箇条書きリストを置き換える
それは非常にバグが多いです、私はそれがより大きなドキュメントでハングすることを信じます、しかし私はそれがとにかく安定したリリースであると述べていません! :-)実験的な使用のみ。必要に応じて再コーディングして再利用し、より良い解決策を見つけた場合はコメントを投稿してください。
ソース: ProgTips
- winWordを開き、
- alt + F11を押してVBAエディターを開きます。
- プロジェクトブラウザで最初のプロジェクトを右クリック
- 挿入->モジュールを選択します
- ファイルからコードを貼り付けます
- マクロエディターを閉じる
- ツール>マクロ>マクロに行く; MarkDownという名前のマクロを実行する
ソース: ProgTips
ProgTipsが投稿を削除した場合やサイトが消去された場合に安全に保管するためのマクロソース:
'*** A simple MsWord->Markdown replacement macro by Kriss Rauhvargers, 2006.02.02.
'*** This tool does NOT implement all the markup specified in MarkDown definition by John Gruber, only
'*** the most simple things. These are:
'*** 1) Replaces all non-list paragraphs to ^p paragraph so MarkDown knows it is a stand-alone paragraph
'*** 2) Converts tables to text. In fact, tables get lost.
'*** 3) Adds a single indent to all indented paragraphs
'*** 4) Replaces all the text in italics to _text_
'*** 5) Replaces all the text in bold to **text**
'*** 6) Replaces Heading1-6 to #..#Heading (Heading numbering gets lost)
'*** 7) Replaces bulleted lists with ^p * listitem ^p* listitem2...
'*** 8) Replaces numbered lists with ^p 1. listitem ^p2. listitem2...
'*** Feel free to use and redistribute this code
Sub MarkDown()
Dim bReplace As Boolean
Dim i As Integer
Dim oPara As Paragraph
'remove formatting from paragraph sign so that we dont get **blablabla^p** but rather **blablabla**^p
Call RemoveBoldEnters
For i = Selection.Document.Tables.Count To 1 Step -1
Call Selection.Document.Tables(i).ConvertToText
Next
'simple text indent + extra paragraphs for non-numbered paragraphs
For i = Selection.Document.Paragraphs.Count To 1 Step -1
Set oPara = Selection.Document.Paragraphs(i)
If oPara.Range.ListFormat.ListType = wdListNoNumbering Then
If oPara.LeftIndent > 0 Then
oPara.Range.InsertBefore (">")
End If
oPara.Range.InsertBefore (vbCrLf)
End If
Next
'italic -> _italic_
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceOneItalic 'first replacement
While bReplace 'other replacements
bReplace = ReplaceOneItalic
Wend
'bold-> **bold**
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceOneBold 'first replacement
While bReplace
bReplace = ReplaceOneBold 'other replacements
Wend
'Heading -> ##heading
For i = 1 To 6 'heading1 to heading6
Selection.HomeKey Unit:=wdStory
bReplace = ReplaceH(i) 'first replacement
While bReplace
bReplace = ReplaceH(i) 'other replacements
Wend
Next
Call ReplaceLists
Selection.HomeKey Unit:=wdStory
End Sub
'***************************************************************
' Function to replace bold with _bold_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'***************************************************************
Function ReplaceOneBold() As Boolean
Dim bReturn As Boolean
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Font.Bold = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Text = "**" & Selection.Text & "**"
Selection.Font.Bold = False
Selection.Find.Execute
Wend
ReplaceOneBold = bReturn
End Function
'*******************************************************************
' Function to replace italic with _italic_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'********************************************************************
Function ReplaceOneItalic() As Boolean
Dim bReturn As Boolean
Selection.Find.ClearFormatting
With Selection.Find
.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Font.Italic = True
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Text = "_" & Selection.Text & "_"
Selection.Font.Italic = False
Selection.Find.Execute
Wend
ReplaceOneItalic = bReturn
End Function
'*********************************************************************
' Function to replace headingX with #heading, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'*********************************************************************
Function ReplaceH(ByVal ipNumber As Integer) As Boolean
Dim sReplacement As String
Select Case ipNumber
Case 1: sReplacement = "#"
Case 2: sReplacement = "##"
Case 3: sReplacement = "###"
Case 4: sReplacement = "####"
Case 5: sReplacement = "#####"
Case 6: sReplacement = "######"
End Select
Selection.Find.ClearFormatting
Selection.Find.Style = ActiveDocument.Styles("Heading " & ipNumber)
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
bReturn = False
While Selection.Find.Execute = True
bReturn = True
Selection.Range.InsertBefore (vbCrLf & sReplacement & " ")
Selection.Style = ActiveDocument.Styles("Normal")
Selection.Find.Execute
Wend
ReplaceH = bReturn
End Function
'***************************************************************
' A fix-up for paragraph marks that ar are bold or italic
'***************************************************************
Sub RemoveBoldEnters()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Font.Italic = True
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = False
Selection.Find.Replacement.Font.Italic = False
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Font.Bold = True
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Font.Bold = False
Selection.Find.Replacement.Font.Italic = False
With Selection.Find
.Text = "^p"
.Replacement.Text = "^p"
.Forward = True
.Wrap = wdFindContinue
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
'***************************************************************
' Function to replace bold with _bold_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'***************************************************************
Sub ReplaceLists()
Dim i As Integer
Dim j As Integer
Dim Para As Paragraph
Selection.HomeKey Unit:=wdStory
'iterate through all the lists in the document
For i = Selection.Document.Lists.Count To 1 Step -1
'check each paragraph in the list
For j = Selection.Document.Lists(i).ListParagraphs.Count To 1 Step -1
Set Para = Selection.Document.Lists(i).ListParagraphs(j)
'if it's a bulleted list
If Para.Range.ListFormat.ListType = wdListBullet Then
Para.Range.InsertBefore (ListIndent(Para.Range.ListFormat.ListLevelNumber, "*"))
'if it's a numbered list
ElseIf Para.Range.ListFormat.ListType = wdListSimpleNumbering Or _
wdListMixedNumbering Or _
wdListListNumOnly Then
Para.Range.InsertBefore (Para.Range.ListFormat.ListValue & ". ")
End If
Next j
'inserts paragraph marks before and after, removes the list itself
Selection.Document.Lists(i).Range.InsertParagraphBefore
Selection.Document.Lists(i).Range.InsertParagraphAfter
Selection.Document.Lists(i).RemoveNumbers
Next i
End Sub
'***********************************************************
' Returns the MarkDown indent text
'***********************************************************
Function ListIndent(ByVal ipNumber As Integer, ByVal spChar As String) As String
Dim i As Integer
For i = 1 To ipNumber - 1
ListIndent = ListIndent & " "
Next
ListIndent = ListIndent & spChar & " "
End Function
ソース: ProgTips
.docx
形式を使用する場合は、このPHPスクリプトを使用してXMLを抽出し、いくつかのXSL変換を実行して、かなり適切なMarkdownを出力します。同等:
https://github.com/matb33/docx2md
コマンドラインから機能することを意図しており、そのインターフェースはかなり基本的であることに注意してください。しかし、それは仕事を成し遂げるでしょう!
スクリプトが十分に機能しない場合は、.docx
ファイルを送って、問題を再現して修正できるようにしてください。 GitHubに問題を記録するか、ご希望の場合は直接ご連絡ください。
Pandoc は優れたコマンドライン変換ツールですが、繰り返しになりますが、最初に、Pandocが読み取れる形式に入力を取得する必要があります。
Word文書をマークダウンに変換しなければならないという同じ問題がありました。いくつかは、数式や画像などを備えた、より複雑で(非常に)大きなドキュメントでした。だから私はいくつかの異なるツールを使用して変換するこのスクリプトを作りました: https://github.com/Versal/Word2markdown
いくつかのツールのチェーンを使用するため、少しエラーが発生しやすくなりますが、より複雑なドキュメントがある場合は、出発点として適しています。お役に立てれば幸いです。 :)
更新:これは現在Mac OS Xでのみ機能し、いくつかの要件をインストールする必要があります(Word、Pandoc、HTML Tidy、git、node/npm )。それが適切に機能するためには、空のWord文書を開き、次の操作を行う必要もあります。[ファイル]-> [Webページとして保存]-> [互換性]-> [エンコード]-> [UTF-8]。次に、このエンコードがデフォルトとして保存されます。設定方法の詳細については、READMEを参照してください。
次に、これをコンソールで実行します。
$ git clone [email protected]:Versal/Word2markdown.git
$ cd Word2markdown
$ npm install
(copy over the Word files, for example, "document.docx")
$ ./doc-to-md.sh document.docx document_files > document.md
次に、Markdownをdocument.md
で、画像をdocument_files
で検索できます。
これはおそらく少し複雑になっているので、これを簡単にしたり、他のオペレーティングシステムでこれを機能させるための貢献を歓迎します! :)
これを試しましたか?機能の豊富さはわかりませんが、単純なテキストで機能します。 http://markitdown.medusis.com/
大学の一部として、Rubyコースの一環として、openofficeのWordファイル(.odt)をマークダウンに変換できるツールを開発しました。正しいフォーマットに変換するためには、多くの前提が必要です。たとえば、見出しと見なす必要のあるテキストのサイズを決定するのは困難です。ただし、この変換で失う可能性があるのは、一致するテキストのフォーマットが常にマークダウンドキュメントに追加されることだけです。ツールI開発したリスト、太字および斜体テキスト、およびテーブルの構文をサポートしています。
http://github.com/bostko/doc2text 試してみて、フィードバックをお寄せください。