ERROR - Doktorarbeit.bcf is malformed, last biblatex run probably failed. Deleted Doktorarbeit.bbl INFO - ERRORS: 1 - bibliography

I have Biber 2.17 and TexLive 2022.
I tried to update biber, latex, bibtex, trash aux-files - nothing helps.
Everything worked very well (including references and bibliography) and I suddenly got this error.
There is an error when I try to compile:
INFO - This is Biber 2.17
INFO - Logfile is '.blg'
ERROR - .bcf is malformed, last biblatex run probably failed. Deleted .bbl
INFO - ERRORS: 1
My .log file is:
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex 2022.6.22) 22 JUN 2022 11:47
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
%&-line parsing enabled.
**.tex
(./.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-02-24>
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/fix-cm.sty
Package: fix-cm 2020/11/24 v1.1t fixes to LaTeX
...
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/exscale.sty
Package: exscale 2018/09/24 v2.1i Standard LaTeX package exscale
LaTeX Font Info: Redeclaring symbol font `largesymbols' on input line 57.
LaTeX Font Info: Overwriting symbol font `largesymbols' in version `normal'
(Font) OMX/cmex/m/n --> OMX/cmex/m/n on input line 57.
LaTeX Font Info: Overwriting symbol font `largesymbols' in version `bold'
(Font) OMX/cmex/m/n -->
...
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption.sty
Package: caption 2022/03/01 v3.6b Customizing captions (AR)
(/usr/local/texlive/2022/texmf-dist/tex/latex/caption/caption3.sty
Package: caption3 2022/03/17 v2.3b caption3 kernel (AR)
\caption#tempdima=\dimen164
\captionmargin=\dim
3. My .tex file begins as:
\RequirePackage{fix-cm}
\documentclass[9.5pt,openright,a4paper,twoside,BCOR=20mm,cleardoublepage=plain, headsepline, bibliography=totoc, version=first, enabledeprecatefontcommands, headings=huge]{extreport}
\usepackage[fontsize=9.3pt]{scrextend}
\usepackage[headsepline=0.2pt, automark]{scrlayer-scrpage}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman, english]{babel}
\usepackage[final]{graphicx} %
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{nicefrac}
\usepackage{fancyvrb}
\usepackage[pdftex, table]{xcolor}
\usepackage{wrapfig}
\usepackage{subcaption}
\usepackage[locale=DE, product-units=power]{siunitx}
\usepackage{lscape}
\usepackage{mathrsfs}
\usepackage[margin=12pt,format=plain, labelformat=simple, labelsep=colon, labelfont={bf, rm}, indention=0.2cm, font=small]{caption}
\usepackage{cite}
\usepackage{caption}
\captionsetup{font=large}
%\usepackage[backend=biber, natbib=true,style=numeric,sorting=none]{biblatex}
\addbibresource{ref.bib}
\usepackage{url}
\usepackage{doi}
\usepackage{braket}
\usepackage{setspace}
\usepackage{float}
\usepackage{bibgerm}
\usepackage{sidecap}
\usepackage{transparent}
\usepackage[backend=biber, eprint = false, giveninits=true, style=numeric-comp,sorting=none,backrefstyle=two, url=false]{biblatex}
\usepackage{csquotes}
\usepackage{textcomp}
\usepackage{rotating}
\usepackage{totcount}
\usepackage{totpages}
\usepackage{xltabular}
\usepackage{longtable}
\usepackage[figure,table]{totalcount}
\usepackage{xifthen}
\usepackage[version = 3]{acro}
\usepackage{setspace}
\pagestyle{headings}
\usepackage{gensymb}
%\usepackage{filecontents}
%\usepackage{natlib}
%\usepackage[nottoc,numbib]{tocbibind}
\usepackage{cleveref}
\acsetup{ format = \mdseries}
\newboolean{Test}
\setboolean{Test}{true}
\regtotcounter{page}
\renewcommand\newblockpunct{}
\renewcommand\newunitpunct{; }
\DefineBibliographyStrings{ngerman}{
andothers = {{et\,al\adddot}}}
\AtEveryBibitem{%
\ifentrytype{Online}{\printfield{url}\clearfield{urldate}}{}%
}
\DeclareMathOperator{\Div}{div}
\DeclareMathOperator{\Rot}{rot}
\newtotcounter{citenum}
\AtEveryBibitem{\stepcounter{citenum}}
\setlength{\abovecaptionskip}{-0.025cm}
\raggedbottom
\sisetup{locale = DE, separate-uncertainty,
list-final-separator= {\ \linebreak[0]\text{und}\ } ,
list-separator = {,\ \linebreak[0]\ },
list-pair-separator= {\ \linebreak[0]\text{und}\ },
range-phrase= {\ \linebreak[0]\text{bis}\ },
range-units=repeat}
\setlength{\parindent}{0.5cm}
\renewcommand\thesubfigure{(\alph{subfigure})}
\captionsetup[figure]{name=Abb.,belowskip = 2pt, aboveskip = 2pt}
\captionsetup[subfigure]{font=large, labelformat = simple, position = top,belowskip=-3pt}
\captionsetup[table]{font=large, labelformat = simple, position = top, aboveskip=5pt, belowskip = 2pt}
\renewcommand{\floatpagefraction}{0.9} % damit Bild nicht auf einzelner Seite landet
\newcommand{\Chi}{\mbox{\large$\chi$}}
\newcommand{\myfootnote}[1]{%
\renewcommand{\thefootnote}{}%
\footnotetext{\normalsize{#1}}%
\renewcommand{\thefootnote}{\arabic{footnote}}%
}
\interfootnotelinepenalty=10000
\linespread{1.0}
\definecolor{gruen}{rgb}{0.23, 0.78, 0.23}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} % linksbündig mit Breitenangabe
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} % zentriert mit Breitenangabe
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}} % rechtsbündig mit Breitenangabe
\newcommand{\mytitle}{Titel}
\newcommand{\datum}{Datum}
\onehalfspacing
\begin{document}
\addtocontents{toc}{\protect\setcounter{topdepth}{-1}}
\tableofcontents
\addtocontents{toc}{\protect\setcounter{topdepth}{3}}
\pagenumbering{gobble}
\cleardoublepage
\pagenumbering{arabic}
\chapter{Introduction}
......

Related

How to format this code so that flake8 is happy?

This code was created by black:
def test_schema_org_script_from_list():
assert (
schema_org_script_from_list([1, 2])
== '<script type="application/ld+json">1</script>\n<script type="application/ld+json">2</script>'
)
But now flake8 complains:
tests/test_utils.py:59:9: W503 line break before binary operator
tests/test_utils.py:59:101: E501 line too long (105 > 100 characters)
How can I format above lines and make flake8 happy?
I use this .pre-commit-config.yaml
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: 'https://github.com/pre-commit/pre-commit-hooks'
rev: v3.2.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files
- repo: 'https://gitlab.com/pycqa/flake8'
rev: 3.8.4
hooks:
- id: flake8
- repo: 'https://github.com/pre-commit/mirrors-isort'
rev: v5.7.0
hooks:
- id: isort
tox.ini:
[flake8]
max-line-length = 100
exclude = .git,*/migrations/*,node_modules,migrate
# W504 line break after binary operator
ignore = W504
(I think it is a bit strange that flake8 reads config from a file which belongs to a different tool).
from your configuration, you've set ignore = W504
ignore isn't the option you want as it resets the default ignore (bringing in a bunch of things, including W503).
If you remove ignore=, both W504 and W503 are in the default ignore so they won't be caught
as for your E501 (line too long), you can either extend-ignore = E501 or you can set max-line-length appropriately
for black, this is the suggested configuration:
[flake8]
max-line-length = 88
extend-ignore = E203
note that there are cases where black cannot make a line short enough (as you're seeing) -- both from long strings and from long variable names
disclaimer: I'm the current flake8 maintainer

How to configure VIM Ale to use the Tidy linter for HTML?

I'm trying to configure the vim Ale plugin to use Tidy to lint HTML code.
I added to my .vimrc file:
let g:ale_linters = {
\ 'css': ['csslint'],
\ 'html': ['tidy'],
\ 'javascript': ['eslint'],
\ 'php': [''],
\ 'python': ['flake8'],
\}
I got the linters working for CSS, JavaScript, and Python, but not HTML.
:ALEInfo outputs:
Current Filetype: html
Available Linters: ['alex', 'fecs', 'htmlhint', 'proselint', 'stylelint', 'tidy', 'writegood']
Linter Aliases: 'writegood' -> ['write-good']
Enabled Linters: ['tidy']
. . . at the end of the information . . .
Command History: (executable check - success) tidy
It looks like the Tidy linter is available and configured, but I can't get it to work. The html files seem to have no linting at all.
I am able to run Tidy successfully in the terminal:
> tidy test.html
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 1 column 1 - Warning: plain text isn't allowed in <head> elements
line 1 column 2 - Warning: discarding unexpected <html>
line 2 column 5 - Warning: <body> unexpected or duplicate quote mark
line 2 column 5 - Warning: discarding unexpected <body>
line 4 column 7 - Error: <bdy> is not recognized!
line 4 column 7 - Warning: discarding unexpected <bdy>
line 1 column 1 - Warning: inserting missing 'title' element
line 3 column 7 - Warning: trimming empty <p>
Info: Document content looks like HTML 3.2
8 warnings, 1 error were found!
How can I get Tidy to work with Ale in vim?
You also need to tell vim where to find the tidy executable, e.g., tidy on Linux, or tidy.exe on Windows.
In my case, I added this to my vimrc:
let g:ale_html_tidy_executable = "D://TidyHtml//tidy-5.6.0-vc14-64b//bin//tidy.exe"
In vim, to get Ale help for tidy: :h ale-html-tidy

Why read.clipboard is not working in R

Why is read.clipboard() not working on my system?
> library(psych)
> read.table(text=read.clipboard(), sep="\t", header=T, stringsAsFactors=F, strip.white=T)
Error in textConnection(text, encoding = "UTF-8") :
invalid 'text' argument
In addition: Warning message:
In read.table(file("clipboard"), header = TRUE, ...) :
incomplete final line found by readTableHeader on 'clipboard'
> read.table(text=readClipboard(), sep="\t", header=T, stringsAsFactors=F, strip.white=T)
Error in textConnection(text, encoding = "UTF-8") :
could not find function "readClipboard"
The version information:
> packageVersion('psych')
[1] ‘1.4.8.11’
> R.version
_
platform i486-pc-linux-gnu
arch i486
os linux-gnu
system i486, linux-gnu
status
major 3
minor 1.1
year 2014
month 07
day 10
svn rev 66115
language R
version.string R version 3.1.1 (2014-07-10)
nickname Sock it to Me
>
EDIT:
As suggested by #RichardScriven, I used following:
read.table('clipboard', sep="\t", header=T)
If I copy some cells in a spreadsheet and try above command, it does not work. Following is the error:
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : clipboard cannot be opened or contains no text
But if I paste first to a text editor, and copy it again from there, then the above command works well.
How can I directly use the data after copying from a spreadsheet?
Following command also shows same problem, works when copied from text editor but not when copied from spreadsheet. I produces same error.
> read.clipboard(sep="\t", header=T)
Error in open.connection(file, "rt") : cannot open the connection
In addition: Warning message:
In open.connection(file, "rt") :
clipboard cannot be opened or contains no text
read.clipboard(sep="\t",header = T)
The above code should work. Also please note that you need to copy [from excel / libreoffice etc] , go to R script and run the command in R. If you perform any other commands in between, this might not work. Hope this helps.

filename completion in gnuplot does not complete the boundary

I am using gnuplot for long time, and one problem that I always feel is it is not closing the " on tab completion of filename.
e.g.
gnuplot> p 'fo<Tab>
will give me:
gnuplot> p 'fort.10 <cursor here, see the missing '>
while I would expect to have:
gnuplot> p 'fort.10' <cursor here>
I am using the rpm from fedora, which gives:
show version long
G N U P L O T
Version 4.6 patchlevel 3 last modified 2013-04-12
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2013
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Compile options:
-READLINE +LIBEDITLINE +HISTORY
-BACKWARDS_COMPATIBILITY +BINARY_DATA
+GD_PNG +GD_JPEG +GD_TTF +GD_GIF +ANIMATION
-USE_CWDRC +X11 +X11_POLYGON +MULTIBYTE +X11_EXTERNAL +USE_MOUSE +HIDDEN3D_QUADTREE
+DATASTRINGS +HISTOGRAMS +OBJECTS +STRINGVARS +MACROS +IMAGE +USER_LINETYPES +STATS
GNUPLOT_DRIVER_DIR = "/usr/libexec/gnuplot/4.6"
GNUPLOT_PS_DIR = "/usr/share/gnuplot/4.6/PostScript"
HELPFILE = "/usr/share/gnuplot/4.6/gnuplot.gih"
After compiling
-READLINE +LIBEDITLINE +HISTORY
-BACKWARDS_COMPATIBILITY +BINARY_DATA
+GD_PNG +GD_JPEG +GD_TTF +GD_GIF +ANIMATION
-USE_CWDRC +X11 +X11_POLYGON +MULTIBYTE +X11_EXTERNAL +USE_MOUSE +HIDDEN3D_QUADTREE
+DATASTRINGS +HISTOGRAMS +OBJECTS +STRINGVARS +MACROS +IMAGE +USER_LINETYPES +STATS
GNUPLOT_DRIVER_DIR = "/usr/libexec/gnuplot/4.6"
GNUPLOT_PS_DIR = "/usr/share/gnuplot/4.6/PostScript"
HELPFILE = "/usr/share/gnuplot/4.6/gnuplot.gih"
That is a problem with gnuplot's command-line editing. The same happens with Debian's gnuplot binary.
If you compile gnuplot yourself against libreadline, the completion works fine. This is a license issue: gnuplot isn't licensed under the GPL so that it is forbidden to distribute gnuplot binaries which are linked against it, see https://lists.debian.org/debian-devel/1998/06/msg01162.html
Its fine if you compile gnuplot yourself and link it against GNU libreadline, but you're not allowed to distribute the resulting binary.

Converting PDF to CMYK (with identify recognizing CMYK)

I am having much trouble to get ImageMagick's identify to, well, identify a PDF as CMYK.
Essentially, let's say I'm building this file, test.tex, with pdflatex:
\documentclass[a4paper,12pt]{article}
%% https://tex.stackexchange.com/questions/13071
\pdfcompresslevel=0
%% http://compgroups.net/comp.text.tex/Making-a-cmyk-PDF
%% ln -s /usr/share/color/icc/sRGB.icm .
% \immediate\pdfobj stream attr{/N 4} file{sRGB.icm}
% \pdfcatalog{%
% /OutputIntents [ <<
% /Type /OutputIntent
% /S/GTS_PDFA1
% /DestOutputProfile \the\pdflastobj\space 0 R
% /OutputConditionIdentifier (sRGB IEC61966-2.1)
% /Info(sRGB IEC61966-2.1)
% >> ]
% }
%% http://latex-my.blogspot.com/2010/02/cmyk-output-for-commercial-printing.html
%% https://tex.stackexchange.com/questions/9961
\usepackage[cmyk]{xcolor}
\begin{document}
Some text here...
\end{document}
If I then try to identify the resulting test.pdf file, I get it as RGB, no matter what options I've tried (at least according to the links in the source) - and yet, the colors in it would be saved as CMYK; for the source above:
$ grep -ia 'cmyk\|rgb\| k' test.pdf
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
0 0 0 1 k 0 0 0 1 K
FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-1.40.11-2.2 (TeX Live 2010) kpathsea version 6.0.0)
$ identify -verbose 'test.pdf[0]'
...
Type: Palette
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
...
Green:
...
Blue:
...
Histogram:
5: (12593,11565,11822) #31312D2D2E2E rgb(49,45,46)
4: (16448,15420,15677) #40403C3C3D3D rgb(64,60,61)
9: (20303,19275,19532) #4F4F4B4B4C4C rgb(79,75,76)
25: (23901,23130,23387) #5D5D5A5A5B5B rgb(93,90,91)
...
The same pretty much happens if I also uncomment that \immediate\pdfobj stream ...
part; and yet, if there is only one color (black) in the document, I don't see where does identify come up with a histogram of RGB values (although, arguably, all of them close to gray) ?!
So nevermind this, then I though I'd better try to use ghostscript to convert the test.pdf into a new pdf, which would be recognized as CMYK by identify - but no luck even there:
$ gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile=test-gs.pdf -dUseCIEColor -sProcessColorModel=DeviceRGB -dProcessColorModel=/DeviceCMYK -sColorConversionStrategy=/CMYK test.pdf
GPL Ghostscript 9.01 (2011-02-07)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
$ identify -verbose 'test-gs.pdf[0]'
...
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
...
So the only thing that identify perceived as a change, is Type: Grayscale (from previous Type: Palette); but otherwise it still sees an RGB colorspace!
Along with this, note that identify is capable of correctly reporting a CMYK pdf - see CMYK poster example: fitting pdf page size to (bitmap) image size? #17843 - TeX - LaTeX - Stack Exchange for a command line example of generating such a PDF file using convert and gs. In fact, we can execute:
convert test.pdf -depth 8 -colorspace cmyk -alpha Off test-c.pdf
... and this will result with a PDF that will be identifyed as CMYK - however, the PDF will also be rasterized (default at 72 dpi).
EDIT: I have just discovered, that if I create an .odp presentation in OpenOffice, and export it to PDF; that PDF will by default be RGB, however, the following command (from ghostscript Examples | Production Monkeys):
# Color PDF to CMYK:
gs -dSAFER -dBATCH -dNOPAUSE -dNOCACHE -sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK \
-sOutputFile=output.pdf input.pdf
... actually will produce a CMYK pdf, reported as such by identify (although, the black will be rich, not plain - on all four channels); however, this command will work only when the slide has an added image (apparently, it is the one triggering the color conversion?!)! Funnily, I cannot get the same effect from a pdflatex PDF.
So I guess my question can be asked two ways:
Are there any command-line conversion methods in Linux, that will convert an RGB pdf into a CMYK pdf while preserving vectors, which is recognized as such in identify (and will consequently build a correct histogram of CMYK colors)
Are there any other command-line Linux tools similar to identify, which would recognize use of CMYK colors correctly even in the original test.pdf from pdflatex (and possibly build a color histogram, based on an arbitrarily chosen PDF page, like identify is supposed to)?
Thanks in advance for any answers,
Cheers!
Some references:
adobe - Script (or some other means) to convert RGB to CMYK in PDF? - Stack Overflow
color - PDF colour model and LaTeX - TeX - LaTeX - Stack Exchange
color - Option cmyk for xcolor package does not produce a CMYK PDF - TeX - LaTeX - Stack Exchange
Making a cmyk PDF - comp.text.tex | Computer Group
colormanagement with ghostscript ? - Rhinocerus:
Is it for instance specified as "0 0 0
1 setcmykcolor"? Or possibly rather as "0 0 0 setrgbcolor"? In the
latter case you would end up with a rich black for text, if DeviceRGB is
remapped to a CIE-based color space in order to get RGB images color
managed.
sdaau, the command you used for trying to convert your PDF to CMYK was not correct. Try this one instead:
gs \
-o test-cmyk.pdf \
-sDEVICE=pdfwrite \
-sProcessColorModel=DeviceCMYK \
-sColorConversionStrategy=CMYK \
-sColorConversionStrategyForImages=CMYK \
test.pdf
Update
If color conversion does not work as desired and if you see a message like "Unable to convert color space to Gray, reverting strategy to LeaveColorUnchanged" then...
your Ghostscript probably is a newer release from the 9.x version series, and
your source PDF likely uses an embedded ICC color profile
In this case add -dOverrideICC to the command line and see if it changes the result as desired.
Update 2
To avoid JPEG artifacts appearing in the images (where there were none before), add:
-dEncodeColorImages=false
into the command line.
(This is true for almost all GS PDF->PDF processing, not just for this case. Because GS by default creates a completely new file with newly constructed objects and a new file structure when asked to produce PDF output -- it doesn't simply re-use the previous objects, as a more "dumb" PDF processor like pdftk does {pdftk has other advantages though, don't misunderstand my statement!}. GS applies JPEG compression by default -- look at the current Ps2pdf documentation and search for "ColorImageFilter" to learn about more details...)
I have an unrelated problem but I am also struggling with CMYK PDFs currently.
I wrote this little script here (it's called pdf2pdfx):
#!/bin/bash
gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-dProcessColorModel=/DeviceCMYK \
-dPDFSETTINGS=/prepress \
-sOutputFile="${1%%.pdf}_X-3.pdf" \
PDFX_def.ps \
"$1"
and my PDFX_def.ps contains the following (I removed the ICC profile and defined FOGRA39, this should be OK):
%!
% $Id$
% This is a sample prefix file for creating a PDF/X-3 document.
% Feel free to modify entries marked with "Customize".
% This assumes an ICC profile to reside in the file (ISO Coated sb.icc),
% unless the user modifies the corresponding line below.
systemdict /ProcessColorModel known {
systemdict /ProcessColorModel get dup /DeviceGray ne exch /DeviceCMYK ne and
} {
true
} ifelse
{ (ERROR: ProcessColorModel must be /DeviceGray or DeviceCMYK.)=
/ProcessColorModel cvx /rangecheck signalerror
} if
% Define entries to the document Info dictionary :
% /ICCProfile (/usr/share/color/icc/ISOcoated_v2_300_eci.icc) def % Customize or remove.
[ /GTS_PDFXVersion (PDF/X-3:2002) % Must be so (the standard requires).
/Title (Title) % Customize.
/Trapped /False % Must be so (Ghostscript doesn't provide other).
/DOCINFO pdfmark
% Define an ICC profile :
currentdict /ICCProfile known {
[/_objdef {icc_PDFX} /type /stream /OBJ pdfmark
[{icc_PDFX} <</N systemdict /ProcessColorModel get /DeviceGray eq {1} {4} ifelse >> /PUT pdfmark
[{icc_PDFX} ICCProfile (r) file /PUT pdfmark
} if
% Define the output intent dictionary :
[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
/Type /OutputIntent % Must be so (the standard requires).
/S /GTS_PDFX % Must be so (the standard requires).
/OutputCondition (Commercial and specialty printing) % Customize
/Info (none) % Customize
/OutputConditionIdentifier (FOGRA39) % Customize
/RegistryName (http://www.color.org) % Must be so (the standard requires).
currentdict /ICCProfile known {
/DestOutputProfile {icc_PDFX} % Must be so (see above).
} if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark
Identify then correctly reports CMYK colorspace.
Before:
tbart#blackknight ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print.pdf
Image: action_schulungsvideo_v3_print.pdf
Format: PDF (Portable Document Format)
Class: DirectClass
Geometry: 612x859+0+0
Resolution: 72x72
Print size: 8.5x11.9306
Units: Undefined
Type: TrueColor
Endianess: Undefined
Colorspace: RGB
Depth: 16/8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
Channel statistics:
Red:
min: 0 (0)
max: 65535 (1)
mean: 53873.6 (0.822058)
standard deviation: 19276.7 (0.294144)
kurtosis: 1.854
skewness: -1.82565
Green:
min: 0 (0)
max: 65535 (1)
mean: 55385.6 (0.84513)
standard deviation: 19274.6 (0.294112)
kurtosis: 2.09868
skewness: -1.91651
Blue:
min: 0 (0)
max: 65535 (1)
mean: 51020 (0.778516)
standard deviation: 20077.7 (0.306367)
kurtosis: 0.860627
skewness: -1.52344
Image statistics:
Overall:
min: 0 (0)
max: 65535 (1)
mean: 53426.4 (0.815235)
standard deviation: 19546.7 (0.298263)
kurtosis: 1.59453
skewness: -1.75701
Rendering intent: Undefined
Interlace: None
Background color: white
Border color: rgb(223,223,223)
Matte color: grey74
Transparent color: black
Compose: Over
Page geometry: 612x859+0+0
Dispose: Undefined
Iterations: 0
Compression: Undefined
Orientation: Undefined
Properties:
date:create: 2011-09-14T15:38:57+02:00
date:modify: 2011-09-14T15:38:57+02:00
pdf:HiResBoundingBox: 612.283x858.898+0+0
pdf:Version: PDF-1.5
signature: 210bfc9cf90e3b9505385f8b2267da1665b5c2de28bb5223311afba01718bbeb
Artifacts:
verbose: true
Tainted: False
Filesize: 1.577MBB
Number pixels: 526KB
Pixels per second: 52.57MB
User time: 0.020u
Elapsed time: 0:01.009
Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org
after:
tbart#blackknight ~/orpheus/werbung/action $ pdf2pdfx action_schulungsvideo_v3_print.pdf
GPL Ghostscript 9.04 (2011-08-05)
Copyright (C) 2011 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 1.
Page 1
tbart#blackknight ~/orpheus/werbung/action $ identify -verbose action_schulungsvideo_v3_print_X-3.pdf
Image: action_schulungsvideo_v3_print_X-3.pdf
Format: PDF (Portable Document Format)
Class: DirectClass
Geometry: 612x859+0+0
Resolution: 72x72
Print size: 8.5x11.9306
Units: Undefined
Type: ColorSeparation
Base type: ColorSeparation
Endianess: Undefined
Colorspace: CMYK
Depth: 16/8-bit
Channel depth:
cyan: 8-bit
magenta: 8-bit
yellow: 8-bit
black: 8-bit
Channel statistics:
Cyan:
min: 0 (0)
max: 65535 (1)
mean: 8331.78 (0.127135)
standard deviation: 14902.2 (0.227392)
kurtosis: 1.62171
skewness: 1.7799
Magenta:
min: 0 (0)
max: 62194 (0.94902)
mean: 6739.34 (0.102836)
standard deviation: 14517.5 (0.221523)
kurtosis: 2.08183
skewness: 1.93276
Yellow:
min: 0 (0)
max: 65535 (1)
mean: 13310.1 (0.203098)
standard deviation: 17022.5 (0.259746)
kurtosis: 0.991135
skewness: 1.45216
Black:
min: 0 (0)
max: 56540 (0.862745)
mean: 7117.47 (0.108606)
standard deviation: 16803.7 (0.256408)
kurtosis: 3.02752
skewness: 2.16554
Image statistics:
Overall:
min: 0 (0)
max: 65535 (1)
mean: 8874.66 (0.135419)
standard deviation: 15850.6 (0.241864)
kurtosis: 2.17614
skewness: 1.88139
Total ink density: 292%
Rendering intent: Undefined
Interlace: None
Background color: white
Border color: cmyk(223,223,223,0)
Matte color: grey74
Transparent color: black
Compose: Over
Page geometry: 612x859+0+0
Dispose: Undefined
Iterations: 0
Compression: Undefined
Orientation: Undefined
Properties:
date:create: 2011-09-14T15:39:30+02:00
date:modify: 2011-09-14T15:39:30+02:00
pdf:HiResBoundingBox: 612.28x858.9+0+0
pdf:Version: PDF-1.3
signature: 0416db7487ea147b974ece5748bc4284e82bfc3fb7cd07a4de050421ba112076
Artifacts:
verbose: true
Tainted: False
Filesize: 2.103MBB
Number pixels: 526KB
Pixels per second: 5.25708PB
User time: 0.000u
Elapsed time: 0:01.000
Version: ImageMagick 6.6.5-6 2011-04-08 Q16 http://www.imagemagick.org
This is on 64bit Gentoo with gs 9.04
Maybe that helps?
Source PDF stems from inkscape pdf export, colors were restricted to those covered in ECI ISO coated v2.
I use this as a workaround for the lacking CMYK export of inkscape and the lacking prepress-ready PDF/X output...
Ok, here is something, at least...
Originally, I need this as a way to make sure that my PDF files are in CMYK, and have the text as "plain black" C:0, M:0, Y:0, K:100 - since I've had problems with printers previously, where they would complain about my Latex PDFs containing "rich black" for text (which thus cost more). And I usually go for identify since it seems to be the only tool that can parse PDFs and colors (and it is also relatively easy to remember).
Well, I read through Tech Tip: Using Ghostscript to Convert and Combine Files | Linux Journal; where it is recommended to use the tiffsep device of gs to obtain separations. And this for me fulfills the same role as identify; I can just do:
$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 -sOutputFile=p%08d.tif test.pdf
$ ls p*
p00000001.Black.tif p00000001.Magenta.tif p00000001.Yellow.tif p00000001.Cyan.tif p00000001.tif
$ eog p00000001.tif
... and then I can just 'iterate' through the separation images using left/right arrow - and it is immediately obvious if it is 'plain black' or 'rich black'.
So this shows that, regardless of what identify shows, the test.pdf from pdflatex actually has 'plain black' as text color, as it is supposed to (the other separations are blank) - however, doing something like:
# do a conversion of original PDF
$ gs -dPDFA -dBATCH -dNOPAUSE -dNOOUTERSAVE -dUseCIEColor -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sOutputFile=out_pdfa.pdf test.pdf
# do a separation on the converted pdf
$ gs -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -r150x150 \
-dFirstPage=1 -dLastPage=1 -sOutputFile=p%08d.tif out_pdfa.pdf
# view
$ eog p00000001.tif
... will reveal that the particular out_pdfa.pdf actually has 'rich black' - i.e. ink for text goes over all four separations! (identify also shows this one as RGB, too).
So, I hope that this gs/tiffsep technique is more reliable than identify :)
Note: I'm using Ubuntu Natty, which ships GhostScript 9.01 - however, that one has a nasty bug with tiffsep: Bug 691857 – tiffsep crashes in Version 9 (missing lab.icc). That has been fixed for 9.02 - and 9.02 has been released as ghostscript in oneiric. To use 9.02 under Natty, I followed how to update a single package using apt-get? - Ubuntu Forums:
sudo nano /etc/apt/sources.list # add deb http://archive.ubuntu.com/ubuntu/ oneiric main restricted
sudo apt-get update
sudo apt-get install ghostscript # this upgrades only gs and dependencies
sudo nano /etc/apt/sources.list # remove/comment oneiric repo
sudo apt-get update && sudo apt-get upgrade # should be back to normal here
Note that with the buggy 9.01 version, even this command would fail:
$ GS_LIB=/usr/share/ghostscript/9.01/iccprofiles/ gs -sICCProfilesDir=/usr/share/ghostscript/9.01/iccprofiles/ -sDEVICE=tiffsep -dNOPAUSE -dBATCH -dSAFER -sOutputFile=p%08d.tif out_pdfa.pdf
...
sfopen: gs_parse_file_name failed.
sfopen: gs_parse_file_name failed.
... gsicc_open_search(): Could not find lab.icc ...
.. and with 9.02, there is no need to specify sICCProfilesDir explicitly.
I am also being driven insane by this. I tried #tbart's example exactly, but it only works for some input pdfs (seemingly containing images already, rgb or not?), and not others. Specifically, let's take this super simple ps file:
%!PS
/Times-Roman findfont 30 scalefont setfont
72 680 moveto
0.81 0.72 0 0 setcmykcolor
(This is text!) show
showpage
If I call this test1.ps, and then run this command (on windows, gs 9.14):
gswin64c -dEmbedAllFonts=true -dPDFX -dBATCH -dNOPAUSE -dNOOUTERSAVE -sDEVICE=pdfwrite -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedGRACoL2006.icc -sColorConversionStrategy=CMYK -sColorConversionStrategyForImages=CMYK -sOutputFile=test1.pdf PDFX_def.ps test1.ps
Replace gswin64c with gs if you're on linux/cygwin.
The CMYK ICC I'm using is in the PDFX_def.ps and in the command above. You can get it from here, but it's just a random ICC that moo wants for their cards, it doesn't seem special: http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=4075&fileID=3790
The test1.pdf output from this loads as a CMYK pdf in Illustrator, but identify -verbose says it's sRGB. If I do #sdaau's tiffsep thing it writes out the separations and they have the right values.
So, I dunno.
Can anybody get this ps file to convert to a CMYK pdf that identify recognizes?
Chris
Edit: whoa. I may have figured this out and fixed it. It looks like identify is just looking for a /ColorSpace /DeviceCMYK in the PDF file, so if I hack the PDFX_def.ps to output it, identify will call it CMYK. So, looking through the pdfs that worked, I found that if they had this line identify worked, and if not, they were incorrectly flagged as sRGB.
At the end of PDFX_def.ps, add the /ColorSpace /DeviceCMYK line:
[/_objdef {OutputIntent_PDFX} /type /dict /OBJ pdfmark
[{OutputIntent_PDFX} <<
/ColorSpace /DeviceCMYK % convince ImageMagick's identify that it's CMYK
/Type /OutputIntent % Must be so (the standard requires).
/S /GTS_PDFX % Must be so (the standard requires).
/OutputCondition (Commercial and specialty printing) % Customize
/Info (none) % Customize
/OutputConditionIdentifier (CGATS TR 003) % Customize
/RegistryName (http://www.color.org) % Must be so (the standard requires).
currentdict /ICCProfile known {
/DestOutputProfile {icc_PDFX} % Must be so (see above).
} if
>> /PUT pdfmark
[{Catalog} <</OutputIntents [ {OutputIntent_PDFX} ]>> /PUT pdfmark
Boom. I hope this doesn't do anything weird with compatibility or anything.
Revisiting the CMYK conversion with PDF/X-3 again as I have another print job in the queue made me find out the following:
If you only need CMYK, avoid X-3.
It does not support transparency (https://en.wikipedia.org/wiki/PDF/X) and the cyan tinted image you will get is neither satisfying nor will it actually conform to any standard. If you have alpha, opacity, gradients do not convert to PDF/X-3 if not absolutely needed by your print shop.
If you do need pdf/X you will need to rasterize and go for X-3. There is no X-4 on Linux / free software products that I know of in the "well known tool chain" (imagemagick, inkscape, gimp etc. )
I am however still fighting with defined rich black, f.ex. 60%C, 60%M, 40%Y, 100%K - a rather typical standard for print shops here. Whenever I set this in inkscape it will be gone as soon as export (to RGB; a cairo limitation)
Still, this is what seems to get me close to what they'd expect:
#!/bin/bash
# possibly ps2ps2 for keeping fonts?
pdf2ps -sOutputFile=- "$1" | gs \
-dPDFX \
-dBATCH \
-dNOPAUSE \
-dNOOUTERSAVE \
-dPDFSETTINGS=/prepress \
-dCompatibilityLevel=1.4 \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=CMYK \
-sProcessColorModel=DeviceCMYK \
-dHaveTransparency=false \
-sOutputFile="${1%%.pdf}_X-3.pdf" \
PDFX_def.ps \
-
Any insights on a true CMYK creation to CMYK-PDF output workflow are still very welcome. Scribus is no real solution as it has lots of problems importing inkscape SVGs correctly.. Other than that, scribus does a decent job creating CMYK-PDFs.
I found the command line for ghostscript to be quite confusing, and googling around for this gave a lot of similar, sometimes conflicting suggestions, most of which didn't work for me.
In my case, I'm starting with a purely black or white SVG (all vectors + text). Converting that to PDF with CairoSVG makes an RGB PDF.
The minimum ghostscript (version 9.50) command I found to perform the conversion to CMYK (or "single-plate" black only) is:
gs -q -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -o <output.pdf> <intput.pdf>
Notes:
-sColorConversionStrategy=Gray will make a "single-plate", black-only file (which is actually what I wanted in my case).
-o to set the output file is not the same as the -sOutputFile switch.
<input_file.pdf> cannot be the same file as <output_file.pdf>; you'll get a blank PDF if you do that.
In my case, I did not want to keep the intermediate RGB PDF that CairoSVG produced, so I did this: cairosvg <input_file.svg> -f pdf | gs -q -sDEVICE=pdfwrite -sColorConversionStrategy=Gray -o <output_file.pdf> -; the - at the end of the ghostcript command tells it to take input from standard out.
To verify that I ended up with the PDF file I desired, I used Adobe Acrobat's Preflight check, as suggested here, for conversion to PDF/X format, which does not support RGB colors.

Resources